diff --git a/.github/codeql/codeql-config.yml b/.github/codeql/codeql-config.yml index 80657da5dd7..d2a6507d76b 100644 --- a/.github/codeql/codeql-config.yml +++ b/.github/codeql/codeql-config.yml @@ -8,6 +8,8 @@ queries: uses: ./.github/codeql/queries paths: - ./extensions/ql-vscode + - ./.github/workflows + - ./.github/actions paths-ignore: - '**/node_modules' - '**/build' diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 45789f2055a..901fb8ab76f 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -38,7 +38,7 @@ updates: labels: - "Update dependencies" - package-ecosystem: docker - directory: "extensions/ql-vscode/test/e2e" + directory: "extensions/ql-vscode/test/e2e/docker" schedule: interval: "weekly" day: "thursday" # Thursday is arbitrary diff --git a/.github/workflows/build-storybook.yml b/.github/workflows/build-storybook.yml new file mode 100644 index 00000000000..5634b5580f6 --- /dev/null +++ b/.github/workflows/build-storybook.yml @@ -0,0 +1,57 @@ +name: Build Storybook + +on: + workflow_dispatch: + pull_request: + types: [opened, synchronize, reopened, ready_for_review] + push: + branches: + - main + +permissions: {} + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: read + steps: + - name: Checkout + uses: actions/checkout@v5 + + - uses: actions/setup-node@v5 + with: + node-version-file: extensions/ql-vscode/.nvmrc + + - name: Install dependencies + run: | + cd extensions/ql-vscode + npm ci + shell: bash + + - name: Build Storybook + run: | + cd extensions/ql-vscode + npm run build-storybook + shell: bash + + - name: Upload to GitHub Pages + id: deployment + uses: actions/upload-pages-artifact@v4 + with: + path: extensions/ql-vscode/storybook-static + + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + if: github.event_name == 'push' && github.ref == 'refs/heads/main' + runs-on: ubuntu-latest + permissions: + id-token: write + pages: write + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/bump-cli.yml b/.github/workflows/bump-cli.yml index e5bc038de1b..c79fb04696c 100644 --- a/.github/workflows/bump-cli.yml +++ b/.github/workflows/bump-cli.yml @@ -1,25 +1,12 @@ name: Bump CLI version on: workflow_dispatch: - inputs: - option: - description: "Option" - required: true - default: 'replace' - type: choice - options: - - prepend - - replace - version: - description: | - The version to prepend to the supported versions file. This should be in the form: `vA.B.C`. - required: false - type: string pull_request: branches: [main] paths: - .github/actions/create-pr/action.yml - .github/workflows/bump-cli.yml + - extensions/ql-vscode/scripts/bump-supported-cli-versions.ts schedule: - cron: 0 0 */14 * * # run every 14 days @@ -33,29 +20,32 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 + - uses: actions/setup-node@v5 with: - fetch-depth: 1 + node-version-file: extensions/ql-vscode/.nvmrc + cache: 'npm' + cache-dependency-path: extensions/ql-vscode/package-lock.json + - name: Install dependencies + working-directory: extensions/ql-vscode + run: | + npm ci + shell: bash - name: Bump CLI - if: ${{ inputs.option == 'replace' }} + working-directory: extensions/ql-vscode + id: bump-cli env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - scripts/replace-cli-version.sh - - name: Prepend another version - if: ${{ inputs.option == 'prepend' }} - run: | - cat extensions/ql-vscode/supported_cli_versions.json | jq '. |= ["${{ inputs.version }}"] + .' > supported_cli_versions_temp.json - mv supported_cli_versions_temp.json extensions/ql-vscode/supported_cli_versions.json - echo "LATEST_VERSION=${{ inputs.version }}" >> $GITHUB_ENV - echo "PREVIOUS_VERSION=`jq -r '.[1]' extensions/ql-vscode/supported_cli_versions.json`" >> $GITHUB_ENV + npx vite-node scripts/bump-supported-cli-versions.ts + shell: bash - name: Commit, Push and Open a PR uses: ./.github/actions/create-pr with: token: ${{ secrets.GITHUB_TOKEN }} base-branch: main head-branch: github-action/bump-cli - commit-message: Bump CLI version from ${{ env.PREVIOUS_VERSION }} to ${{ env.LATEST_VERSION }} for integration tests - title: Bump CLI Version to ${{ env.LATEST_VERSION }} for integration tests + commit-message: Bump CLI version from ${{ steps.bump-cli.outputs.PREVIOUS_VERSION }} to ${{ steps.bump-cli.outputs.LATEST_VERSION }} for integration tests + title: Bump CLI Version to ${{ steps.bump-cli.outputs.LATEST_VERSION }} for integration tests body: > - Bumps CLI version from ${{ env.PREVIOUS_VERSION }} to ${{ env.LATEST_VERSION }} + Bumps CLI version from ${{ steps.bump-cli.outputs.PREVIOUS_VERSION }} to ${{ steps.bump-cli.outputs.LATEST_VERSION }} diff --git a/.github/workflows/cli-test.yml b/.github/workflows/cli-test.yml index 5e2463d00e1..c6af5dffe96 100644 --- a/.github/workflows/cli-test.yml +++ b/.github/workflows/cli-test.yml @@ -17,6 +17,8 @@ jobs: find-nightly: name: Find Nightly Release runs-on: ubuntu-latest + permissions: + contents: read outputs: url: ${{ steps.get-url.outputs.nightly-url }} steps: @@ -33,9 +35,11 @@ jobs: set-matrix: name: Set Matrix for cli-test runs-on: ubuntu-latest + permissions: + contents: read steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Set the variables id: set-variables run: echo "cli-versions=$(cat ./extensions/ql-vscode/supported_cli_versions.json | jq -rc)" >> $GITHUB_OUTPUT @@ -47,6 +51,8 @@ jobs: runs-on: ${{ matrix.os }} needs: [find-nightly, set-matrix] timeout-minutes: 30 + permissions: + contents: read strategy: matrix: os: [ubuntu-latest, windows-latest] @@ -59,9 +65,9 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v5 with: node-version-file: extensions/ql-vscode/.nvmrc cache: 'npm' @@ -92,7 +98,7 @@ jobs: echo "ref=$REF" >> "$GITHUB_OUTPUT" - name: Checkout QL - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: repository: github/codeql ref: ${{ steps.choose-ref.outputs.ref }} diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index c529a772619..669b1cc46a4 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -11,6 +11,12 @@ on: jobs: codeql: runs-on: ubuntu-latest + strategy: + matrix: + language: + - javascript + - actions + fail-fast: false permissions: contents: read @@ -19,14 +25,14 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Initialize CodeQL uses: github/codeql-action/init@main with: - languages: javascript + languages: ${{ matrix.language }} config-file: ./.github/codeql/codeql-config.yml - tools: latest + tools: nightly - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@main diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml index 47d874e86a9..57223af28ca 100644 --- a/.github/workflows/dependency-review.yml +++ b/.github/workflows/dependency-review.yml @@ -11,6 +11,6 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Checkout Repository' - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: 'Dependency Review' uses: actions/dependency-review-action@v4 diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml index 34be85e8fdf..8771b0139d3 100644 --- a/.github/workflows/e2e-tests.yml +++ b/.github/workflows/e2e-tests.yml @@ -1,9 +1,14 @@ name: Run E2E Playwright tests on: - push: - branches: [main] - pull_request: - branches: [main] + workflow_dispatch: +# Temporarily disable running tests until they're fixed +# push: +# branches: [main] +# pull_request: +# branches: [main] + +permissions: + contents: read jobs: e2e-test: @@ -12,9 +17,9 @@ jobs: timeout-minutes: 30 steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v5 with: node-version-file: extensions/ql-vscode/.nvmrc cache: 'npm' diff --git a/.github/workflows/label-issue.yml b/.github/workflows/label-issue.yml index e4a51b71b13..ac7bbeb704c 100644 --- a/.github/workflows/label-issue.yml +++ b/.github/workflows/label-issue.yml @@ -3,6 +3,9 @@ on: issues: types: [opened] +permissions: + issues: write + jobs: label: name: Label issue diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index e36bc9c2b50..b42802099f6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -7,6 +7,9 @@ on: branches: - main +permissions: + contents: read + jobs: build: name: Build @@ -16,11 +19,11 @@ jobs: os: [ubuntu-latest, windows-latest] steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 1 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v5 with: node-version-file: extensions/ql-vscode/.nvmrc cache: 'npm' @@ -56,13 +59,16 @@ jobs: lint: name: Lint runs-on: ubuntu-latest + permissions: + contents: read + security-events: write steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 1 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v5 with: node-version-file: extensions/ql-vscode/.nvmrc cache: 'npm' @@ -79,13 +85,6 @@ jobs: run: | npm run check-types - - name: Lint - working-directory: extensions/ql-vscode - env: - NODE_OPTIONS: '--max-old-space-size=4096' - run: | - npm run lint - - name: Lint Markdown working-directory: extensions/ql-vscode run: | @@ -101,16 +100,31 @@ jobs: run: | npm run find-deadcode + - name: Lint + if: "${{ !cancelled() }}" + working-directory: extensions/ql-vscode + env: + NODE_OPTIONS: '--max-old-space-size=4096' + run: | + npm run lint-ci + + - name: Upload ESLint results to Code Scanning + if: "${{ !cancelled() && !startsWith(github.head_ref, 'dependabot/')}}" + uses: github/codeql-action/upload-sarif@main + with: + sarif_file: extensions/ql-vscode/build/eslint.sarif + category: eslint + generated: name: Check generated code runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 1 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v5 with: node-version-file: extensions/ql-vscode/.nvmrc cache: 'npm' @@ -158,11 +172,11 @@ jobs: } - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 1 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v5 with: node-version-file: extensions/ql-vscode/.nvmrc cache: 'npm' @@ -192,11 +206,11 @@ jobs: os: [ubuntu-latest, windows-latest] steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: fetch-depth: 1 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v5 with: node-version-file: extensions/ql-vscode/.nvmrc cache: 'npm' @@ -238,7 +252,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Set the variable id: set-variable run: | @@ -262,9 +276,9 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v5 with: node-version-file: extensions/ql-vscode/.nvmrc cache: 'npm' @@ -283,7 +297,7 @@ jobs: shell: bash - name: Checkout QL - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: repository: github/codeql ref: 'codeql-cli/${{ needs.get-latest-cli-version.outputs.cli-version }}' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4eb21da1117..6c85563dd73 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,15 +12,21 @@ on: tags: - 'v[0-9]+.[0-9]+.[0-9]+*' +permissions: + contents: read + jobs: build: name: Release runs-on: ubuntu-latest + permissions: + contents: write + pull-requests: write steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v5 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v5 with: node-version-file: extensions/ql-vscode/.nvmrc @@ -124,28 +130,52 @@ jobs: needs: build environment: publish-vscode-marketplace runs-on: ubuntu-latest - env: - VSCE_TOKEN: ${{ secrets.VSCE_TOKEN }} + permissions: + contents: read + id-token: write steps: + - name: Checkout + uses: actions/checkout@v5 + + - uses: actions/setup-node@v5 + with: + node-version-file: extensions/ql-vscode/.nvmrc + - name: Download artifact - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: name: vscode-codeql-extension + - name: Azure User-assigned managed identity login + uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0 + with: + client-id: ${{ secrets.AZURE_CLIENT_ID }} + tenant-id: ${{ secrets.AZURE_TENANT_ID }} + allow-no-subscriptions: true + enable-AzPSSession: true + - name: Publish to Registry - run: | - npx @vscode/vsce publish -p $VSCE_TOKEN --packagePath *.vsix + run: npx @vscode/vsce publish --azure-credential --packagePath *.vsix open-vsx-publish: name: Publish to Open VSX Registry needs: build environment: publish-open-vsx runs-on: ubuntu-latest + permissions: + contents: read env: OPEN_VSX_TOKEN: ${{ secrets.OPEN_VSX_TOKEN }} steps: + - name: Checkout + uses: actions/checkout@v5 + + - uses: actions/setup-node@v5 + with: + node-version-file: extensions/ql-vscode/.nvmrc + - name: Download artifact - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 with: name: vscode-codeql-extension diff --git a/.github/workflows/update-node-version.yml b/.github/workflows/update-node-version.yml index 800a34f38aa..a4b8ef7d0b1 100644 --- a/.github/workflows/update-node-version.yml +++ b/.github/workflows/update-node-version.yml @@ -14,8 +14,8 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + uses: actions/checkout@v5 + - uses: actions/setup-node@v5 with: node-version-file: extensions/ql-vscode/.nvmrc cache: 'npm' @@ -34,7 +34,7 @@ jobs: - name: Update Node version working-directory: extensions/ql-vscode run: | - npx ts-node scripts/update-node-version.ts + npx vite-node scripts/update-node-version.ts shell: bash - name: Get current Node version working-directory: extensions/ql-vscode diff --git a/.gitignore b/.gitignore index 4784b9ab81d..332b925b9fc 100644 --- a/.gitignore +++ b/.gitignore @@ -22,4 +22,7 @@ artifacts/ # E2E Reports **/playwright-report/** -**/test-results/** \ No newline at end of file +**/test-results/** + +# Storybook artifacts +**/storybook-static/** diff --git a/.husky/pre-commit b/.husky/pre-commit index 5dc94bf999d..abc5efe4456 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - cd extensions/ql-vscode && npm run format-staged diff --git a/.husky/pre-push b/.husky/pre-push index dc6c09fd782..f3f1a028d7e 100755 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -1,4 +1 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - cd extensions/ql-vscode && ./scripts/forbid-test-only diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 715aa1a5fd4..879b85bb9ca 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -78,7 +78,7 @@ $ vscode/scripts/code-cli.sh --install-extension dist/vscode-codeql-*.vsix # if ### Debugging -You can use VS Code to debug the extension without explicitly installing it. Just open this directory as a workspace in VS Code, and hit `F5` to start a debugging session. +You can use VS Code to debug the extension without explicitly installing it. Just open this repository's root directory as a workspace in VS Code, and hit `F5` to start a debugging session. ### Storybook diff --git a/README.md b/README.md index 03b564f5ace..cf7c48dddf9 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ The extension is released. You can download it from the [Visual Studio Marketpla To see what has changed in the last few versions of the extension, see the [Changelog](https://github.com/github/vscode-codeql/blob/main/extensions/ql-vscode/CHANGELOG.md). -[![CI status badge](https://github.com/github/vscode-codeql/workflows/Build%20Extension/badge.svg)](https://github.com/github/vscode-codeql/actions?query=workflow%3A%22Build+Extension%22+branch%3Amain) +[![CI status badge](https://github.com/github/vscode-codeql/actions/workflows/main.yml/badge.svg?branch=main)](https://github.com/github/vscode-codeql/actions?query=workflow%3A%22Build+Extension%22+branch%3Amain) [![VS Marketplace badge](https://vsmarketplacebadges.dev/version/github.vscode-codeql.svg)](https://marketplace.visualstudio.com/items?itemName=github.vscode-codeql) ## Features diff --git a/docs/releasing.md b/docs/releasing.md index 8a2441d17bd..2d1495c5dc6 100644 --- a/docs/releasing.md +++ b/docs/releasing.md @@ -1,6 +1,5 @@ # Releasing (write access required) -1. Make sure the needed authentication keys are valid. Most likely the Azure DevOps PAT needs to be regenerated. See below. 1. Determine the new version number. We default to increasing the patch version number, but make our own judgement about whether a change is big enough to warrant a minor version bump. Common reasons for a minor bump could include: - Making substantial new features available to all users. This can include lifting a feature flag. - Breakage in compatibility with recent versions of the CLI. @@ -61,7 +60,7 @@ ## Secrets and authentication for publishing -Repository administrators, will need to manage the authentication keys for publishing to the VS Code marketplace and Open VSX. Each requires an authentication token. +Repository administrators will need to manage the authentication keys for publishing to the VS Code marketplace and Open VSX. Each requires an authentication token. To regenerate the Open VSX token: @@ -70,4 +69,4 @@ To regenerate the Open VSX token: 1. Go to the [Access Tokens](https://open-vsx.org/user-settings/tokens) page and generate a new token. 1. Update the secret in the `publish-open-vsx` environment in the project settings. -To regenerate the VSCode Marketplace token, please see our internal documentation. Note that Azure DevOps PATs expire every 7 days and must be regenerated. +Publishing to the VS Code Marketplace is done using a user-assigned managed identity and should not require the token to be manually updated. diff --git a/docs/test-plan.md b/docs/test-plan.md index b5441f60b54..90fe3cc2abf 100644 --- a/docs/test-plan.md +++ b/docs/test-plan.md @@ -45,7 +45,7 @@ choose to go through some of the Optional Test Cases. #### Test case 2: Running a problem query and viewing results 1. Open the [javascript ReDoS query](https://github.com/github/codeql/blob/main/javascript/ql/src/Performance/ReDoS.ql). -2. Select the `babel/babel` database (or download it if you don't have one already) +2. Select the `angular-cn/ng-nice` database (or download it if you don't have one already) 3. Run a local query. 4. Once the query completes: - Check that the result messages are rendered @@ -490,7 +490,7 @@ This requires running a MRVA query and seeing the results view. 1. Make changes via config file (ensure JSON schema is helping out) 1. Close and re-open VS Code (ensure lists are there) 1. Collapse/expand tree nodes -1. Create a new list, right click and select "Add repositories with GitHub Code Search". Enter the language 'python' and the query "UserMixin". This should show a rate limiting notification after a while but eventually populate the list with roughly 770 items. +1. Create a new list, right click and select "Add repositories with GitHub Code Search". Enter the language 'python' and the query "UserMixin". This might result in an HttpError when it is run for the first time. If so, try again. When run for the second time it might show a rate limiting notification after a while or directly populate the list with roughly 900 repositories. Error cases that trigger an error notification: diff --git a/extensions/ql-vscode/.eslintignore b/extensions/ql-vscode/.eslintignore deleted file mode 100644 index 73702ce5402..00000000000 --- a/extensions/ql-vscode/.eslintignore +++ /dev/null @@ -1,7 +0,0 @@ -.vscode-test/ -node_modules/ -out/ -build/ - -# Include the Storybook config -!.storybook diff --git a/extensions/ql-vscode/.eslintrc.js b/extensions/ql-vscode/.eslintrc.js deleted file mode 100644 index a6a4d56b694..00000000000 --- a/extensions/ql-vscode/.eslintrc.js +++ /dev/null @@ -1,195 +0,0 @@ -const { resolve } = require("path"); - -const baseConfig = { - parser: "@typescript-eslint/parser", - parserOptions: { - ecmaVersion: 2018, - sourceType: "module", - project: [ - resolve(__dirname, "tsconfig.lint.json"), - resolve(__dirname, "src/**/tsconfig.json"), - resolve(__dirname, "test/**/tsconfig.json"), - resolve(__dirname, "gulpfile.ts/tsconfig.json"), - resolve(__dirname, "scripts/tsconfig.json"), - resolve(__dirname, ".storybook/tsconfig.json"), - ], - }, - plugins: ["github", "@typescript-eslint", "etc"], - env: { - node: true, - es6: true, - }, - extends: [ - "eslint:recommended", - "plugin:github/recommended", - "plugin:github/typescript", - "plugin:jest-dom/recommended", - "plugin:prettier/recommended", - "plugin:@typescript-eslint/recommended", - "plugin:import/recommended", - "plugin:import/typescript", - "plugin:deprecation/recommended", - ], - rules: { - "@typescript-eslint/await-thenable": "error", - "@typescript-eslint/no-unused-vars": [ - "warn", - { - vars: "all", - args: "none", - ignoreRestSiblings: false, - }, - ], - "@typescript-eslint/no-explicit-any": "error", - "@typescript-eslint/no-floating-promises": ["error", { ignoreVoid: true }], - "@typescript-eslint/no-invalid-this": "off", - "@typescript-eslint/no-shadow": "off", - "prefer-const": ["warn", { destructuring: "all" }], - "@typescript-eslint/no-throw-literal": "error", - "@typescript-eslint/consistent-type-imports": "error", - "import/consistent-type-specifier-style": ["error", "prefer-top-level"], - curly: ["error", "all"], - "escompat/no-regexp-lookbehind": "off", - "etc/no-implicit-any-catch": "error", - "filenames/match-regex": "off", - "i18n-text/no-en": "off", - "no-invalid-this": "off", - "no-console": "off", - "no-shadow": "off", - "github/array-foreach": "off", - "github/no-then": "off", - "react/jsx-key": ["error", { checkFragmentShorthand: true }], - "import/no-cycle": "error", - // Never allow extensions in import paths, except for JSON files where they are required. - "import/extensions": ["error", "never", { json: "always" }], - }, - settings: { - "import/resolver": { - typescript: true, - node: true, - }, - "import/extensions": [".js", ".jsx", ".ts", ".tsx", ".json"], - // vscode and sarif don't exist on-disk, but only provide types. - "import/core-modules": ["vscode", "sarif"], - }, -}; - -module.exports = { - root: true, - ...baseConfig, - overrides: [ - { - files: ["src/stories/**/*"], - parserOptions: { - project: resolve(__dirname, "src/stories/tsconfig.json"), - }, - extends: [ - ...baseConfig.extends, - "plugin:react/recommended", - "plugin:react/jsx-runtime", - "plugin:react-hooks/recommended", - "plugin:storybook/recommended", - "plugin:github/react", - ], - rules: { - ...baseConfig.rules, - }, - settings: { - react: { - version: "detect", - }, - }, - }, - { - files: ["src/view/**/*"], - parserOptions: { - project: resolve(__dirname, "src/view/tsconfig.json"), - }, - extends: [ - ...baseConfig.extends, - "plugin:react/recommended", - "plugin:react/jsx-runtime", - "plugin:react-hooks/recommended", - "plugin:github/react", - ], - rules: { - ...baseConfig.rules, - }, - settings: { - react: { - version: "detect", - }, - }, - }, - { - files: ["test/vscode-tests/**/*"], - parserOptions: { - project: resolve(__dirname, "test/tsconfig.json"), - }, - env: { - jest: true, - }, - rules: { - ...baseConfig.rules, - // We want to allow mocking of functions in modules, so we need to allow namespace imports. - "import/no-namespace": "off", - "@typescript-eslint/ban-types": [ - "error", - { - // For a full list of the default banned types, see: - // https://github.com/typescript-eslint/typescript-eslint/blob/master/packages/eslint-plugin/docs/rules/ban-types.md - extendDefaults: true, - types: { - // Don't complain about the `Function` type in test files. (Default is `true`.) - Function: false, - }, - }, - ], - }, - }, - { - files: ["test/**/*"], - parserOptions: { - project: resolve(__dirname, "test/tsconfig.json"), - }, - env: { - jest: true, - }, - rules: { - "@typescript-eslint/no-explicit-any": "off", - }, - }, - { - files: [ - ".eslintrc.js", - "test/**/jest-runner-vscode.config.js", - "test/**/jest-runner-vscode.config.base.js", - ], - parser: undefined, - plugins: ["github"], - extends: [ - "eslint:recommended", - "plugin:github/recommended", - "plugin:prettier/recommended", - ], - rules: { - "import/no-commonjs": "off", - "prefer-template": "off", - "filenames/match-regex": "off", - "@typescript-eslint/no-var-requires": "off", - }, - }, - { - files: [".storybook/**/*.tsx"], - parserOptions: { - project: resolve(__dirname, ".storybook/tsconfig.json"), - }, - rules: { - ...baseConfig.rules, - // Storybook doesn't use the automatic JSX runtime in the addon yet, so we need to allow - // `React` to be imported. - "import/no-namespace": ["error", { ignore: ["react"] }], - }, - }, - ], -}; diff --git a/extensions/ql-vscode/.nvmrc b/extensions/ql-vscode/.nvmrc index 42e31a00cf2..6edc5a20f3f 100644 --- a/extensions/ql-vscode/.nvmrc +++ b/extensions/ql-vscode/.nvmrc @@ -1 +1 @@ -v20.14.0 +v22.17.0 diff --git a/extensions/ql-vscode/.storybook/tsconfig.json b/extensions/ql-vscode/.storybook/tsconfig.json index c3a8a6ce092..defe43edce5 100644 --- a/extensions/ql-vscode/.storybook/tsconfig.json +++ b/extensions/ql-vscode/.storybook/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { "module": "esnext", "moduleResolution": "node", - "target": "es6", + "target": "es2021", "outDir": "out", "lib": ["ES2021", "dom"], "jsx": "react", diff --git a/extensions/ql-vscode/.vscodeignore b/extensions/ql-vscode/.vscodeignore index 313df6c9531..4e9f0d9300a 100644 --- a/extensions/ql-vscode/.vscodeignore +++ b/extensions/ql-vscode/.vscodeignore @@ -1,17 +1 @@ -.vs/** -.vscode/** -.vscode-test/** -typings/** -out/test/** -out/vscode-tests/** -**/@types/** -**/*.ts -test/** -src/** **/*.map -.gitignore -gulpfile.js/** -tsconfig.json -.prettierrc -vsc-extension-quickstart.md -node_modules/** diff --git a/extensions/ql-vscode/CHANGELOG.md b/extensions/ql-vscode/CHANGELOG.md index d638979fb89..7db975b552d 100644 --- a/extensions/ql-vscode/CHANGELOG.md +++ b/extensions/ql-vscode/CHANGELOG.md @@ -2,6 +2,54 @@ ## [UNRELEASED] +- Remove support for CodeQL CLI versions older than 2.20.7. [#4159](https://github.com/github/vscode-codeql/pull/4159) + +## 1.17.5 - 02 October 2025 + +- Add new command "CodeQL: Trim Overlay Base Cache" that returns a database to the state prior to overlay evaluation, leaving only base predicates and types that may later be referenced during overlay evaluation. [#4082](https://github.com/github/vscode-codeql/pull/4082) +- Remove support for CodeQL CLI versions older than 2.19.4. [#4108](https://github.com/github/vscode-codeql/pull/4108) +- Fix a bug where quick evaluation within a `.ql` file could cause spurious errors about processing query metadata. [#4141](https://github.com/github/vscode-codeql/pull/4141) + +## 1.17.4 - 10 July 2025 + +- Fix variant analysis pack creation on some Windows systems [#4068](https://github.com/github/vscode-codeql/pull/4068) + +## 1.17.3 - 3 June 2025 + +- Fix reporting of bad join orders in recursive predicates. [#4019](https://github.com/github/vscode-codeql/pull/4019) + +## 1.17.2 - 27 March 2025 + +- Always authenticate when downloading databases from GitHub, instead of only when in canary mode. [#3941](https://github.com/github/vscode-codeql/pull/3941) + +## 1.17.1 - 23 January 2025 + +- Remove support for CodeQL CLI versions older than 2.18.4. [#3895](https://github.com/github/vscode-codeql/pull/3895) +- Fix regex in CodeQL TextMate grammar that was silently failing. [#3903](https://github.com/github/vscode-codeql/pull/3903) + +## 1.17.0 - 20 December 2024 + +- Add a palette command that allows importing all databases directly inside of a parent folder. [#3797](https://github.com/github/vscode-codeql/pull/3797) +- Only use VS Code telemetry settings instead of using `codeQL.telemetry.enableTelemetry` [#3853](https://github.com/github/vscode-codeql/pull/3853) +- Improve the performance of the results view with large numbers of results. [#3862](https://github.com/github/vscode-codeql/pull/3862) + +## 1.16.1 - 6 November 2024 + +- Support result columns of type `QlBuiltins::BigInt` in quick evaluations. [#3647](https://github.com/github/vscode-codeql/pull/3647) +- Fix a bug where the CodeQL CLI would be re-downloaded if you switched to a different filesystem (for example Codespaces or a remote SSH host). [#3762](https://github.com/github/vscode-codeql/pull/3762) +- Clean up old extension-managed CodeQL CLI distributions. [#3763](https://github.com/github/vscode-codeql/pull/3763) +- Only compare the source and sink of a path when comparing alerts of local queries. [#3772](https://github.com/github/vscode-codeql/pull/3772) + +## 1.16.0 - 10 October 2024 + +- Increase the required version of VS Code to 1.90.0. [#3737](https://github.com/github/vscode-codeql/pull/3737) +- Fix a bug where some variant analysis results failed to download. [#3750](https://github.com/github/vscode-codeql/pull/3750) + +## 1.15.0 - 26 September 2024 + +- Update results view to display the length of the shortest path for path queries. [#3687](https://github.com/github/vscode-codeql/pull/3687) +- Remove support for CodeQL CLI versions older than 2.16.6. [#3728](https://github.com/github/vscode-codeql/pull/3728) + ## 1.14.0 - 7 August 2024 - Add Python support to the CodeQL Model Editor. [#3676](https://github.com/github/vscode-codeql/pull/3676) diff --git a/extensions/ql-vscode/eslint.config.mjs b/extensions/ql-vscode/eslint.config.mjs new file mode 100644 index 00000000000..e453a1f9838 --- /dev/null +++ b/extensions/ql-vscode/eslint.config.mjs @@ -0,0 +1,200 @@ +import { resolve, dirname } from "path"; +import { fileURLToPath } from "url"; +import eslint from "@eslint/js"; +import { globalIgnores } from "eslint/config"; +import github from "eslint-plugin-github"; +import tseslint from "typescript-eslint"; +import eslintPrettierRecommended from 'eslint-plugin-prettier/recommended'; +import * as jestDom from "eslint-plugin-jest-dom"; +import * as typescriptESLintParser from "@typescript-eslint/parser"; +import react from "eslint-plugin-react"; +import reactHooks from "eslint-plugin-react-hooks"; +import storybook from "eslint-plugin-storybook"; + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +export default tseslint.config( + globalIgnores([ + ".vscode-test/", + "node_modules/", + "out/", + "build/", + "scripts/", + "**/jest.config.ts", + "**/jest.config.js", + "**/jest-runner-vscode.config.js", + "**/jest-runner-vscode.config.base.js", + ".markdownlint-cli2.cjs", + "eslint.config.mjs", + "!.storybook", + ]), + github.getFlatConfigs().recommended, + ...github.getFlatConfigs().typescript, + tseslint.configs.recommendedTypeChecked, + eslint.configs.recommended, + tseslint.configs.recommended, + jestDom.configs["flat/recommended"], + { + rules: { + "@typescript-eslint/await-thenable": "error", + "@typescript-eslint/no-unused-vars": [ + "warn", + { + vars: "all", + args: "none", + ignoreRestSiblings: false, + }, + ], + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/no-floating-promises": ["error", { ignoreVoid: true }], + "@typescript-eslint/no-invalid-this": "off", + "@typescript-eslint/no-shadow": "off", + "prefer-const": ["warn", { destructuring: "all" }], + "@typescript-eslint/only-throw-error": "error", + "@typescript-eslint/consistent-type-imports": "error", + "import/consistent-type-specifier-style": ["error", "prefer-top-level"], + curly: ["error", "all"], + "escompat/no-regexp-lookbehind": "off", + "filenames/match-regex": "off", + "i18n-text/no-en": "off", + "no-invalid-this": "off", + "no-console": "off", + "no-shadow": "off", + "github/array-foreach": "off", + "github/no-then": "off", + // "react/jsx-key": ["error", { checkFragmentShorthand: true }], + "import/no-cycle": "error", + // Never allow extensions in import paths, except for JSON files where they are required. + "import/extensions": ["error", "never", { json: "always" }], + + // Rules disabled during eslint 9 migration + "github/filenames-match-regex": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unsafe-argument": "off", + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/restrict-plus-operands": "off", + "@typescript-eslint/unbound-method": "off", + "@typescript-eslint/require-await": "off", + "@typescript-eslint/no-misused-promises": "off", + "@typescript-eslint/no-base-to-string": "off", + "@typescript-eslint/no-array-delete": "off", + }, + settings: { + "import/parsers": { + "@typescript-eslint/parser": [".ts", ".tsx"] + }, + "import/resolver": { + typescript: true, + node: true, + }, + "import/extensions": [".js", ".jsx", ".ts", ".tsx", ".json"], + // vscode and sarif don't exist on-disk, but only provide types. + "import/core-modules": ["vscode", "sarif"], + }, + languageOptions: { + parser: typescriptESLintParser, + parserOptions: { + ecmaVersion: 2018, + sourceType: "module", + projectService: true, + tsconfigRootDir: import.meta.dirname, + project: resolve(__dirname, "tsconfig.lint.json"), + }, + }, + }, + { + files: ["src/stories/**/*"], + languageOptions: { + parserOptions: { + project: resolve(__dirname, "src/stories/tsconfig.json"), + }, + }, + extends: [ + react.configs.flat.recommended, + react.configs.flat['jsx-runtime'], + reactHooks.configs['recommended-latest'], + storybook.configs['flat/recommended'], + github.getFlatConfigs().react, + ], + settings: { + react: { + version: "detect", + }, + }, + }, + { + files: ["src/view/**/*"], + languageOptions: { + parserOptions: { + project: resolve(__dirname, "src/view/tsconfig.json"), + }, + }, + extends: [ + react.configs.flat.recommended, + react.configs.flat['jsx-runtime'], + reactHooks.configs['recommended-latest'], + github.getFlatConfigs().react, + ], + settings: { + react: { + version: "detect", + }, + }, + }, + { + files: ["test/vscode-tests/**/*"], + languageOptions: { + parserOptions: { + project: resolve(__dirname, "test/tsconfig.json"), + }, + globals: { + jest: true, + }, + }, + rules: { + // We want to allow mocking of functions in modules, so we need to allow namespace imports. + "import/no-namespace": "off", + "@typescript-eslint/no-unsafe-function-type": "off", + }, + }, + { + files: ["test/**/*"], + languageOptions: { + parserOptions: { + project: resolve(__dirname, "test/tsconfig.json"), + }, + globals: { + jest: true, + }, + }, + rules: { + "@typescript-eslint/no-explicit-any": "off", + + // Rules disabled during eslint 9 migration + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/unbound-method": "off", + }, + }, + { + files: [".storybook/**/*", "src/stories/**/*"], + languageOptions: { + parserOptions: { + project: resolve(__dirname, ".storybook/tsconfig.json"), + }, + }, + rules: { + // Storybook doesn't use the automatic JSX runtime in the addon yet, so we need to allow + // `React` to be imported. + "import/no-namespace": ["error", { ignore: ["react"] }], + + // Rules disabled during eslint 9 migration + "@typescript-eslint/no-unsafe-argument": "off", + "storybook/no-renderer-packages": "off", + "storybook/story-exports": "off", + }, + }, + eslintPrettierRecommended, +); diff --git a/extensions/ql-vscode/gulpfile.ts/appInsights.ts b/extensions/ql-vscode/gulpfile.ts/appInsights.ts index 8e96f286675..86d36aae4fe 100644 --- a/extensions/ql-vscode/gulpfile.ts/appInsights.ts +++ b/extensions/ql-vscode/gulpfile.ts/appInsights.ts @@ -1,6 +1,5 @@ import { src, dest } from "gulp"; -// eslint-disable-next-line @typescript-eslint/no-var-requires,import/no-commonjs -const replace = require("gulp-replace"); +import replace from "gulp-replace"; /** Inject the application insights key into the telemetry file */ export function injectAppInsightsKey() { diff --git a/extensions/ql-vscode/gulpfile.ts/chromium-version.json b/extensions/ql-vscode/gulpfile.ts/chromium-version.json index e3f8f015fed..e2433ceb1f9 100644 --- a/extensions/ql-vscode/gulpfile.ts/chromium-version.json +++ b/extensions/ql-vscode/gulpfile.ts/chromium-version.json @@ -1,4 +1,4 @@ { - "chromiumVersion": "114", - "electronVersion": "25.8.0" + "chromiumVersion": "122", + "electronVersion": "29.4.0" } diff --git a/extensions/ql-vscode/gulpfile.ts/deploy.ts b/extensions/ql-vscode/gulpfile.ts/deploy.ts index da02b9fd494..7b98600815b 100644 --- a/extensions/ql-vscode/gulpfile.ts/deploy.ts +++ b/extensions/ql-vscode/gulpfile.ts/deploy.ts @@ -4,6 +4,7 @@ import { mkdirs, readdir, unlinkSync, + rename, remove, writeFile, } from "fs-extra"; @@ -45,6 +46,10 @@ async function copyPackage( copyDirectory(resolve(sourcePath, file), resolve(destPath, file)), ), ); + + // The koffi directory needs to be located at the root of the package to ensure + // that the koffi package can find its native modules. + await rename(resolve(destPath, "out", "koffi"), resolve(destPath, "koffi")); } export async function deployPackage(): Promise { diff --git a/extensions/ql-vscode/gulpfile.ts/index.ts b/extensions/ql-vscode/gulpfile.ts/index.ts index d3084561cea..3c20b838c09 100644 --- a/extensions/ql-vscode/gulpfile.ts/index.ts +++ b/extensions/ql-vscode/gulpfile.ts/index.ts @@ -5,7 +5,7 @@ import { checkTypeScript, watchCheckTypeScript, cleanOutput, - copyWasmFiles, + copyModules, } from "./typescript"; import { compileTextMateGrammar } from "./textmate"; import { packageExtension } from "./package"; @@ -21,7 +21,7 @@ export const buildWithoutPackage = series( cleanOutput, parallel( compileEsbuild, - copyWasmFiles, + copyModules, checkTypeScript, compileTextMateGrammar, compileViewEsbuild, @@ -46,7 +46,7 @@ export { watchCheckTypeScript, watchViewEsbuild, compileEsbuild, - copyWasmFiles, + copyModules, checkTypeScript, injectAppInsightsKey, compileViewEsbuild, diff --git a/extensions/ql-vscode/gulpfile.ts/package.ts b/extensions/ql-vscode/gulpfile.ts/package.ts index 4675a130718..9f33938195e 100644 --- a/extensions/ql-vscode/gulpfile.ts/package.ts +++ b/extensions/ql-vscode/gulpfile.ts/package.ts @@ -1,6 +1,6 @@ import { resolve } from "path"; import { deployPackage } from "./deploy"; -import { spawn } from "child-process-promise"; +import { spawn } from "cross-spawn"; export async function packageExtension(): Promise { const deployedPackage = await deployPackage(); @@ -16,16 +16,22 @@ export async function packageExtension(): Promise { `${deployedPackage.name}-${deployedPackage.version}.vsix`, ), "--no-dependencies", + "--skip-license", ]; const proc = spawn(resolve(__dirname, "../node_modules/.bin/vsce"), args, { cwd: deployedPackage.distPath, - }); - proc.childProcess.stdout!.on("data", (data) => { - console.log(data.toString()); - }); - proc.childProcess.stderr!.on("data", (data) => { - console.error(data.toString()); + stdio: ["ignore", "inherit", "inherit"], }); - await proc; + await new Promise((resolve, reject) => { + proc.on("error", reject); + + proc.on("close", (code) => { + if (code === 0) { + resolve(undefined); + } else { + reject(new Error(`Failed to package extension with code ${code}`)); + } + }); + }); } diff --git a/extensions/ql-vscode/gulpfile.ts/textmate.ts b/extensions/ql-vscode/gulpfile.ts/textmate.ts index 0b7d2b88fac..a2ed4db083b 100644 --- a/extensions/ql-vscode/gulpfile.ts/textmate.ts +++ b/extensions/ql-vscode/gulpfile.ts/textmate.ts @@ -9,6 +9,7 @@ import type { Pattern, TextmateGrammar, } from "./textmate-grammar"; +import { pipeline } from "stream/promises"; /** * Replaces all rule references with the match pattern of the referenced rule. @@ -22,7 +23,6 @@ function replaceReferencesWithStrings( replacements: Map, ): string { let result = value; - // eslint-disable-next-line no-constant-condition while (true) { const original = result; for (const key of Array.from(replacements.keys())) { @@ -66,8 +66,7 @@ function getNodeMatchText(rule: Pattern): string { } else if (rule.patterns !== undefined) { const patterns: string[] = []; // For a list of patterns, use the disjunction of those patterns. - for (const patternIndex in rule.patterns) { - const pattern = rule.patterns[patternIndex]; + for (const pattern of rule.patterns) { if (pattern.include !== null) { patterns.push(`(?${pattern.include})`); } @@ -180,11 +179,11 @@ function expandPatternMatchProperties( const patterns: string[] = Array.isArray(pattern) ? pattern : [pattern]; rule[key] = patterns.map((p) => `((?${p}))`).join("|") as T; const captures: Pattern["captures"] = {}; - for (const patternIndex in patterns) { - captures[(Number(patternIndex) + 1).toString()] = { + for (const [captureIndex, capture] of patterns.entries()) { + captures[(Number(captureIndex) + 1).toString()] = { patterns: [ { - include: patterns[patternIndex], + include: capture, }, ], }; @@ -276,7 +275,9 @@ export function transpileTextMateGrammar() { } export function compileTextMateGrammar() { - return src("syntaxes/*.tmLanguage.yml") - .pipe(transpileTextMateGrammar()) - .pipe(dest("out/syntaxes")); + return pipeline( + src("syntaxes/*.tmLanguage.yml"), + transpileTextMateGrammar(), + dest("out/syntaxes"), + ); } diff --git a/extensions/ql-vscode/gulpfile.ts/typescript.ts b/extensions/ql-vscode/gulpfile.ts/typescript.ts index c7f12785507..9d49b56821e 100644 --- a/extensions/ql-vscode/gulpfile.ts/typescript.ts +++ b/extensions/ql-vscode/gulpfile.ts/typescript.ts @@ -1,9 +1,10 @@ import { gray, red } from "ansi-colors"; -import { dest, src, watch } from "gulp"; +import { dest, parallel, src, watch } from "gulp"; import esbuild from "gulp-esbuild"; import type { reporter } from "gulp-typescript"; import { createProject } from "gulp-typescript"; import del from "del"; +import { pipeline } from "stream/promises"; export function goodReporter(): reporter.Reporter { return { @@ -37,23 +38,23 @@ export function cleanOutput() { } export function compileEsbuild() { - return src("./src/extension.ts") - .pipe( - esbuild({ - outfile: "extension.js", - bundle: true, - external: ["vscode", "fsevents"], - format: "cjs", - platform: "node", - target: "es2020", - sourcemap: "linked", - sourceRoot: "..", - loader: { - ".node": "copy", - }, - }), - ) - .pipe(dest("out")); + return pipeline( + src("./src/extension.ts"), + esbuild({ + outfile: "extension.js", + bundle: true, + external: ["vscode", "fsevents"], + format: "cjs", + platform: "node", + target: "es2020", + sourcemap: "linked", + sourceRoot: "..", + loader: { + ".node": "copy", + }, + }), + dest("out"), + ); } export function watchEsbuild() { @@ -70,7 +71,7 @@ export function watchCheckTypeScript() { watch(["src/**/*.ts", "!src/view/**/*.ts"], checkTypeScript); } -export function copyWasmFiles() { +function copyWasmFiles() { // We need to copy this file for the source-map package to work. Without this fie, the source-map // package is not able to load the WASM file because we are not including the full node_modules // directory. In version 0.7.4, it is not possible to call SourceMapConsumer.initialize in Node environments @@ -82,3 +83,18 @@ export function copyWasmFiles() { encoding: false, }).pipe(dest("out")); } + +function copyNativeAddonFiles() { + // We need to copy these files manually because we only want to include Windows x64 to limit + // the size of the extension. Windows x64 is the most common platform that requires short path + // expansion, so we only include this platform. + // See src/common/short-paths.ts + return pipeline( + src("node_modules/koffi/build/koffi/win32_x64/*.node", { + encoding: false, + }), + dest("out/koffi/win32_x64"), + ); +} + +export const copyModules = parallel(copyWasmFiles, copyNativeAddonFiles); diff --git a/extensions/ql-vscode/gulpfile.ts/view.ts b/extensions/ql-vscode/gulpfile.ts/view.ts index fea09031d70..698f39c113e 100644 --- a/extensions/ql-vscode/gulpfile.ts/view.ts +++ b/extensions/ql-vscode/gulpfile.ts/view.ts @@ -3,28 +3,29 @@ import esbuild from "gulp-esbuild"; import { createProject } from "gulp-typescript"; import { goodReporter } from "./typescript"; +import { pipeline } from "stream/promises"; import chromiumVersion from "./chromium-version.json"; const tsProject = createProject("src/view/tsconfig.json"); export function compileViewEsbuild() { - return src("./src/view/webview.tsx") - .pipe( - esbuild({ - outfile: "webview.js", - bundle: true, - format: "iife", - platform: "browser", - target: `chrome${chromiumVersion.chromiumVersion}`, - jsx: "automatic", - sourcemap: "linked", - sourceRoot: "..", - loader: { - ".ttf": "file", - }, - }), - ) - .pipe(dest("out")); + return pipeline( + src("./src/view/webview.tsx"), + esbuild({ + outfile: "webview.js", + bundle: true, + format: "iife", + platform: "browser", + target: `chrome${chromiumVersion.chromiumVersion}`, + jsx: "automatic", + sourcemap: "linked", + sourceRoot: "..", + loader: { + ".ttf": "file", + }, + }), + dest("out"), + ); } export function watchViewEsbuild() { diff --git a/extensions/ql-vscode/package-lock.json b/extensions/ql-vscode/package-lock.json index c3c1e168584..7b602d054f9 100644 --- a/extensions/ql-vscode/package-lock.json +++ b/extensions/ql-vscode/package-lock.json @@ -1,42 +1,42 @@ { "name": "vscode-codeql", - "version": "1.14.1", + "version": "1.17.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "vscode-codeql", - "version": "1.14.1", + "version": "1.17.6", "hasInstallScript": true, "license": "MIT", "dependencies": { - "@floating-ui/react": "^0.26.12", - "@octokit/plugin-retry": "^6.0.1", - "@octokit/plugin-throttling": "^8.0.0", - "@octokit/rest": "^20.0.2", + "@floating-ui/react": "^0.27.0", + "@octokit/plugin-retry": "^7.2.0", + "@octokit/plugin-throttling": "^9.6.0", + "@octokit/rest": "^22.0.0", + "@vscode-elements/react-elements": "^0.9.0", "@vscode/codicons": "^0.0.36", "@vscode/debugadapter": "^1.59.0", - "@vscode/debugprotocol": "^1.65.0", - "@vscode/webview-ui-toolkit": "^1.0.1", + "@vscode/debugprotocol": "^1.68.0", "ajv": "^8.11.0", - "child-process-promise": "^2.2.1", "chokidar": "^3.6.0", "d3": "^7.9.0", "d3-graphviz": "^5.0.2", "fs-extra": "^11.1.1", "js-yaml": "^4.1.0", - "msw": "^2.2.13", + "koffi": "^2.12.0", + "msw": "^2.7.4", "nanoid": "^5.0.7", - "node-fetch": "^2.6.7", "p-queue": "^8.0.1", + "proper-lockfile": "^4.1.2", "react": "^18.3.1", "react-dom": "^18.3.1", "semver": "^7.6.2", - "source-map": "^0.7.4", + "source-map": "^0.7.6", "source-map-support": "^0.5.21", "stream-json": "^1.7.3", - "styled-components": "^6.1.9", - "tmp": "^0.2.1", + "styled-components": "^6.1.13", + "tmp": "^0.2.5", "tmp-promise": "^3.0.2", "tree-kill": "^1.2.2", "vscode-extension-telemetry": "^0.1.6", @@ -46,32 +46,36 @@ "zip-a-folder": "^3.1.6" }, "devDependencies": { - "@babel/core": "^7.24.6", - "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/core": "^7.28.3", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", "@babel/preset-env": "^7.24.4", - "@babel/preset-react": "^7.24.1", - "@babel/preset-typescript": "^7.21.4", - "@faker-js/faker": "^8.4.1", - "@github/markdownlint-github": "^0.6.2", - "@playwright/test": "^1.40.1", - "@storybook/addon-a11y": "^8.2.8", - "@storybook/addon-actions": "^8.2.8", - "@storybook/addon-essentials": "^8.2.8", - "@storybook/addon-interactions": "^8.2.8", - "@storybook/addon-links": "^8.2.8", - "@storybook/blocks": "^8.0.2", - "@storybook/components": "^8.2.8", - "@storybook/csf": "^0.1.11", - "@storybook/icons": "^1.2.10", - "@storybook/manager-api": "^8.2.8", - "@storybook/react": "^8.2.8", - "@storybook/react-vite": "^8.2.8", - "@storybook/theming": "^8.2.4", - "@testing-library/dom": "^10.4.0", - "@testing-library/jest-dom": "^6.4.8", - "@testing-library/react": "^16.0.0", - "@testing-library/user-event": "^14.5.2", - "@types/child-process-promise": "^2.2.1", + "@babel/preset-react": "^7.27.1", + "@babel/preset-typescript": "^7.26.0", + "@eslint/js": "^9.28.0", + "@faker-js/faker": "^9.0.3", + "@github/markdownlint-github": "^0.8.0", + "@jest/environment": "^30.0.0-alpha.7", + "@jest/environment-jsdom-abstract": "^30.0.0-alpha.7", + "@microsoft/eslint-formatter-sarif": "^3.1.0", + "@playwright/test": "^1.50.1", + "@storybook/addon-a11y": "^8.6.14", + "@storybook/addon-actions": "^8.6.14", + "@storybook/addon-essentials": "^8.6.14", + "@storybook/addon-interactions": "^8.6.14", + "@storybook/addon-links": "^8.6.14", + "@storybook/blocks": "^8.6.0", + "@storybook/components": "^8.6.14", + "@storybook/csf": "^0.1.13", + "@storybook/icons": "^1.4.0", + "@storybook/manager-api": "^8.6.14", + "@storybook/react": "^8.6.14", + "@storybook/react-vite": "^8.6.14", + "@storybook/theming": "^8.6.14", + "@testing-library/dom": "^10.4.1", + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.0", + "@testing-library/user-event": "^14.6.1", + "@types/cross-spawn": "^6.0.6", "@types/d3": "^7.4.0", "@types/d3-graphviz": "^2.6.6", "@types/del": "^4.0.0", @@ -80,11 +84,10 @@ "@types/gulp-replace": "^1.1.0", "@types/jest": "^29.5.12", "@types/js-yaml": "^4.0.6", - "@types/nanoid": "^3.0.0", - "@types/node": "20.14.*", - "@types/node-fetch": "^2.5.2", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.0", + "@types/node": "22.17.*", + "@types/proper-lockfile": "^4.1.4", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", "@types/sarif": "^2.1.2", "@types/semver": "^7.5.8", "@types/stream-json": "^1.7.1", @@ -92,59 +95,59 @@ "@types/tar-stream": "^3.1.3", "@types/through2": "^2.0.36", "@types/tmp": "^0.2.6", - "@types/vscode": "^1.82.0", + "@types/vscode": "1.90.0", "@types/yauzl": "^2.10.3", - "@typescript-eslint/eslint-plugin": "^7.5.0", - "@typescript-eslint/parser": "^7.5.0", + "@typescript-eslint/eslint-plugin": "^8.45.0", + "@typescript-eslint/parser": "^8.45.0", "@vscode/test-electron": "^2.3.9", - "@vscode/vsce": "^2.24.0", + "@vscode/vsce": "^3.2.1", "ansi-colors": "^4.1.1", "applicationinsights": "^2.9.5", "cosmiconfig": "^9.0.0", "cross-env": "^7.0.3", + "cross-spawn": "^7.0.6", "del": "^6.0.0", - "eslint": "^8.56.0", + "eslint": "^9.28.0", "eslint-config-prettier": "^9.0.0", - "eslint-import-resolver-typescript": "^3.6.1", - "eslint-plugin-deprecation": "^2.0.0", + "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-etc": "^2.0.2", - "eslint-plugin-github": "^4.10.2", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jest-dom": "^5.2.0", - "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-react": "^7.34.1", - "eslint-plugin-react-hooks": "^4.6.2", - "eslint-plugin-storybook": "^0.8.0", - "glob": "^10.0.0", + "eslint-plugin-github": "^6.0.0", + "eslint-plugin-jest-dom": "^5.5.0", + "eslint-plugin-prettier": "^5.2.6", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-storybook": "^9.0.12", + "glob": "^11.0.1", "gulp": "^5.0.0", - "gulp-esbuild": "^0.12.0", + "gulp-esbuild": "^0.14.0", "gulp-replace": "^1.1.3", "gulp-typescript": "^5.0.1", - "husky": "^9.0.11", - "jest": "^29.0.3", - "jest-environment-jsdom": "^29.0.3", + "husky": "^9.1.7", + "jest": "^30.0.0-alpha.7", "jest-runner-vscode": "^3.0.1", - "lint-staged": "^15.2.2", - "markdownlint-cli2": "^0.13.0", - "markdownlint-cli2-formatter-pretty": "^0.0.6", + "jsdom": "^26.1.0", + "lint-staged": "^15.3.0", + "markdownlint-cli2": "^0.17.0", + "markdownlint-cli2-formatter-pretty": "^0.0.7", "npm-run-all": "^4.1.5", "patch-package": "^8.0.0", - "prettier": "^3.2.5", - "storybook": "^8.2.8", + "prettier": "^3.6.1", + "storybook": "^8.6.14", "tar-stream": "^3.1.7", "through2": "^4.0.2", - "ts-jest": "^29.1.4", - "ts-json-schema-generator": "^2.1.1", + "ts-jest": "^29.3.2", + "ts-json-schema-generator": "^2.3.0", "ts-node": "^10.9.2", "ts-unused-exports": "^10.1.0", - "typescript": "^5.0.2", - "vite": "^5.2.11", - "vite-node": "^1.5.3" + "typescript": "^5.6.2", + "typescript-plugin-css-modules": "^5.1.0", + "vite": "^7.1.5", + "vite-node": "^3.0.7" }, "engines": { - "node": "^20.14.0", + "node": "^22.17.0", "npm": ">=7.20.6", - "vscode": "^1.82.0" + "vscode": "^1.90.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -157,17 +160,18 @@ } }, "node_modules/@achrinza/node-ipc": { - "version": "9.2.8", - "resolved": "https://registry.npmjs.org/@achrinza/node-ipc/-/node-ipc-9.2.8.tgz", - "integrity": "sha512-DSzEEkbMYbAUVlhy7fg+BzccoRuSQzqHbIPGxGv19OJ2WKwS3/9ChAnQcII4g+GujcHhyJ8BUuOVAx/S5uAfQg==", + "version": "9.2.9", + "resolved": "https://registry.npmjs.org/@achrinza/node-ipc/-/node-ipc-9.2.9.tgz", + "integrity": "sha512-7s0VcTwiK/0tNOVdSX9FWMeFdOEcsAOz9HesBldXxFMaGvIak7KC2z9tV9EgsQXn6KUsWsfIkViMNuIo0GoZDQ==", "dev": true, + "license": "MIT", "dependencies": { "@node-ipc/js-queue": "2.0.3", "event-pubsub": "4.3.0", "js-message": "1.0.7" }, "engines": { - "node": "8 || 9 || 10 || 11 || 12 || 13 || 14 || 15 || 16 || 17 || 18 || 19 || 20 || 21" + "node": "8 || 9 || 10 || 11 || 12 || 13 || 14 || 15 || 16 || 17 || 18 || 19 || 20 || 21 || 22" } }, "node_modules/@adobe/css-tools": { @@ -189,6 +193,27 @@ "node": ">=6.0.0" } }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.1.1.tgz", + "integrity": "sha512-hpRD68SV2OMcZCsrbdkccTw5FXjNDLo5OuqSHyHZfwweGsDWZwDJ2+gONyNAbazZclobMirACLw0lk8WVxIqxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.2", + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, "node_modules/@azure/abort-controller": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", @@ -202,17 +227,91 @@ } }, "node_modules/@azure/core-auth": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.5.0.tgz", - "integrity": "sha512-udzoBuYG1VBoHVohDTrvKjyzel34zt77Bhp7dQntVGGD0ehVq48owENbBG8fIgkHRNUBQH5k1r0hpoMu5L8+kw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.9.0.tgz", + "integrity": "sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==", "dev": true, + "license": "MIT", "dependencies": { - "@azure/abort-controller": "^1.0.0", - "@azure/core-util": "^1.1.0", - "tslib": "^2.2.0" + "@azure/abort-controller": "^2.0.0", + "@azure/core-util": "^1.11.0", + "tslib": "^2.6.2" }, "engines": { - "node": ">=14.0.0" + "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, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-auth/node_modules/@azure/core-util": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.11.0.tgz", + "integrity": "sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "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, + "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", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-client/node_modules/@azure/core-util": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.11.0.tgz", + "integrity": "sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" } }, "node_modules/@azure/core-rest-pipeline": { @@ -293,6 +392,135 @@ "node": ">=14.0.0" } }, + "node_modules/@azure/identity": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-4.5.0.tgz", + "integrity": "sha512-EknvVmtBuSIic47xkOqyNabAme0RYTw52BTMz8eBgU1ysTyMrD1uOoM+JdS0J/4Yfp98IBT3osqq3BfwSaNaGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.9.0", + "@azure/core-client": "^1.9.2", + "@azure/core-rest-pipeline": "^1.17.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.11.0", + "@azure/logger": "^1.0.0", + "@azure/msal-browser": "^3.26.1", + "@azure/msal-node": "^2.15.0", + "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/@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, + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/identity/node_modules/@azure/core-rest-pipeline": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.18.1.tgz", + "integrity": "sha512-/wS73UEDrxroUEVywEm7J0p2c+IIiVxyfigCGfsKvCxxCET4V/Hef2aURqltrXMRjNmdmt5IuOgIpl8f6xdO5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "@azure/core-auth": "^1.8.0", + "@azure/core-tracing": "^1.0.1", + "@azure/core-util": "^1.11.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/identity/node_modules/@azure/core-util": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.11.0.tgz", + "integrity": "sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/identity/node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/@azure/identity/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, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@azure/identity/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@azure/identity/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, + "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/@azure/logger": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.0.4.tgz", @@ -305,6 +533,54 @@ "node": ">=14.0.0" } }, + "node_modules/@azure/msal-browser": { + "version": "3.28.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.28.0.tgz", + "integrity": "sha512-1c1qUF6vB52mWlyoMem4xR1gdwiQWYEQB2uhDkbAL4wVJr8WmAcXybc1Qs33y19N4BdPI8/DHI7rPE8L5jMtWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/msal-common": "14.16.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-common": { + "version": "14.16.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.16.0.tgz", + "integrity": "sha512-1KOZj9IpcDSwpNiQNjt0jDYZpQvNZay7QAEi/5DLubay40iGYtLzya/jbjRPLyOTZhEKyL1MzPuw2HqBCjceYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-node": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.16.2.tgz", + "integrity": "sha512-An7l1hEr0w1HMMh1LU+rtDtqL7/jw74ORlc9Wnh06v7TU/xpG39/Zdr1ZJu3QpjUfKJ+E0/OXMW8DRSWTlh7qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@azure/msal-common": "14.16.0", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@azure/msal-node/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, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@azure/opentelemetry-instrumentation-azure-sdk": { "version": "1.0.0-beta.5", "resolved": "https://registry.npmjs.org/@azure/opentelemetry-instrumentation-azure-sdk/-/opentelemetry-instrumentation-azure-sdk-1.0.0-beta.5.tgz", @@ -323,43 +599,47 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", - "picocolors": "^1.0.0" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.6.tgz", - "integrity": "sha512-aC2DGhBq5eEdyXWqrDInSqQjO0k8xtPRf5YylULqx8MCd6jBtzqfta/3ETMRpuKIc5hyswfO80ObyA1MvkCcUQ==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.0.tgz", + "integrity": "sha512-60X7qkglvrap8mn1lh2ebxXdZYtUcpd7gsmy9kLaBJ4i/WdY8PqTSdxyA8qraikqKQK5C1KRBKXqznrVapyNaw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.6.tgz", - "integrity": "sha512-qAHSfAdVyFmIvl0VHELib8xar7ONuSHrE2hLnsaWkYNTI68dmi1x8GYDhJjMI/e7XWal9QBlZkwbOnkcw7Z8gQ==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.3.tgz", + "integrity": "sha512-yDBHV9kQNcr2/sUr9jghVyz9C3Y5G2zUM2H2lo+9mKv4sFgbA8s8Z9t8D1jiTkGoO/NoIfKMyKWr4s6CN23ZwQ==", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.6", - "@babel/generator": "^7.24.6", - "@babel/helper-compilation-targets": "^7.24.6", - "@babel/helper-module-transforms": "^7.24.6", - "@babel/helpers": "^7.24.6", - "@babel/parser": "^7.24.6", - "@babel/template": "^7.24.6", - "@babel/traverse": "^7.24.6", - "@babel/types": "^7.24.6", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.3", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.3", + "@babel/types": "^7.28.2", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -384,27 +664,30 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", - "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "version": "7.27.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", + "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.27.3" }, "engines": { "node": ">=6.9.0" @@ -423,14 +706,15 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.6.tgz", - "integrity": "sha512-VZQ57UsDGlX/5fFA7GkVPplZhHsVc+vuErWgdOiysI9Ksnw0Pbbd6pnPiR/mmJyKHgyIW0c7KT32gmhiF+cirg==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.24.6", - "@babel/helper-validator-option": "^7.24.6", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -448,19 +732,18 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.24.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.4.tgz", - "integrity": "sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz", + "integrity": "sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.24.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/helper-replace-supers": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/traverse": "^7.25.9", "semver": "^6.3.1" }, "engines": { @@ -546,6 +829,16 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-hoist-variables": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz", @@ -559,41 +852,43 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz", + "integrity": "sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.23.0" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", - "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" }, "engines": { "node": ">=6.9.0" @@ -603,22 +898,24 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz", + "integrity": "sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz", + "integrity": "sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -641,14 +938,15 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.24.1.tgz", - "integrity": "sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz", + "integrity": "sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.23.0", - "@babel/helper-optimise-call-expression": "^7.22.5" + "@babel/helper-member-expression-to-functions": "^7.25.9", + "@babel/helper-optimise-call-expression": "^7.25.9", + "@babel/traverse": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -657,26 +955,15 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", - "dev": true, - "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz", + "integrity": "sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.25.9", + "@babel/types": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -695,28 +982,31 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", - "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", - "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -736,38 +1026,28 @@ } }, "node_modules/@babel/helpers": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.6.tgz", - "integrity": "sha512-V2PI+NqnyFu1i0GyTd/O/cTpxzQCYioSkUIRmgo7gFEHKKCg5w46+r/A6WeUR1+P3TeQ49dspGPNd/E3n9AnnA==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.3.tgz", + "integrity": "sha512-PTNtvUQihsAsDHMOP5pfobP8C6CM4JWXmP8DrEIt46c3r2bf87Ua1zoqevsMo9g+tWDwgWrFP5EIxuBx5RudAw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.24.6", - "@babel/types": "^7.24.6" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "node_modules/@babel/parser": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz", + "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" + "@babel/types": "^7.28.2" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", - "dev": true, "bin": { "parser": "bin/babel-parser.js" }, @@ -926,13 +1206,13 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.24.7.tgz", - "integrity": "sha512-9G8GYT/dxn/D1IIKOUBmGX0mnmj46mGH9NnZyJLwtCpgh5f7D2VbuKodb+2s9m1Yavh1s7ASQN8lf0eqrb1LTw==", + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", + "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -941,22 +1221,7 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.1.tgz", - "integrity": "sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { + "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.24.1", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.1.tgz", "integrity": "sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==", @@ -996,12 +1261,13 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", - "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz", + "integrity": "sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1113,12 +1379,13 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", - "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz", + "integrity": "sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1388,22 +1655,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.25.2.tgz", - "integrity": "sha512-InBZ0O8tew5V0K6cHcQ+wgxlrjOw1W4wDXLkOTjLRD8GYhTSkxTVBtdy3MMtvYBrbAWa1Qm3hNoTc1620Yj+Mg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/plugin-syntax-flow": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-transform-for-of": { "version": "7.24.1", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.1.tgz", @@ -1516,14 +1767,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz", - "integrity": "sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz", + "integrity": "sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7" + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -1761,12 +2012,13 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.24.1.tgz", - "integrity": "sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", + "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1776,16 +2028,17 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.23.4.tgz", - "integrity": "sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz", + "integrity": "sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/types": "^7.23.4" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/plugin-syntax-jsx": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1795,12 +2048,13 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz", - "integrity": "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", + "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.22.5" + "@babel/plugin-transform-react-jsx": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1810,13 +2064,14 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.24.1.tgz", - "integrity": "sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", + "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-plugin-utils": "^7.24.0" + "@babel/helper-annotate-as-pure": "^7.27.1", + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -1933,15 +2188,17 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.23.6.tgz", - "integrity": "sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.26.3.tgz", + "integrity": "sha512-6+5hpdr6mETwSKjmJUdYw0EIkATiQhnELWlE3kJFBwSg/BGIVwVaVbX+gOXBCdc7Ln1RXZxyWGecIXhUfnl7oA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.23.6", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-typescript": "^7.23.3" + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-create-class-features-plugin": "^7.25.9", + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2117,23 +2374,6 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/preset-flow": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.24.7.tgz", - "integrity": "sha512-NL3Lo0NorCU607zU3NwRyJbpaB6E3t0xtd3LfAQKDfkeX4/ggcDXvkmkW42QWT5owUeW/jAe4hn+2qvkV1IbfQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "@babel/plugin-transform-flow-strip-types": "^7.24.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", @@ -2149,17 +2389,18 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.24.1", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.24.1.tgz", - "integrity": "sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.27.1.tgz", + "integrity": "sha512-oJHWh2gLhU9dW9HHr42q0cI0/iHHXTLGe39qvpAZZzagHy0MzYLCnCVV0symeRvzmjHyVU7mw2K06E6u/JwbhA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.0", - "@babel/helper-validator-option": "^7.23.5", - "@babel/plugin-transform-react-display-name": "^7.24.1", - "@babel/plugin-transform-react-jsx": "^7.23.4", - "@babel/plugin-transform-react-jsx-development": "^7.22.5", - "@babel/plugin-transform-react-pure-annotations": "^7.24.1" + "@babel/helper-plugin-utils": "^7.27.1", + "@babel/helper-validator-option": "^7.27.1", + "@babel/plugin-transform-react-display-name": "^7.27.1", + "@babel/plugin-transform-react-jsx": "^7.27.1", + "@babel/plugin-transform-react-jsx-development": "^7.27.1", + "@babel/plugin-transform-react-pure-annotations": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -2169,35 +2410,17 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.23.3", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.23.3.tgz", - "integrity": "sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-syntax-jsx": "^7.23.3", - "@babel/plugin-transform-modules-commonjs": "^7.23.3", - "@babel/plugin-transform-typescript": "^7.23.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register": { - "version": "7.24.6", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.24.6.tgz", - "integrity": "sha512-WSuFCc2wCqMeXkz/i3yfAAsxwWflEgbVkZzivgAmXl/MxrXeoYFZOOPllbC8R8WTF7u61wSRQtDVZ1879cdu6w==", + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz", + "integrity": "sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==", "dev": true, + "license": "MIT", "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.6", - "source-map-support": "^0.5.16" + "@babel/helper-plugin-utils": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.25.9", + "@babel/plugin-transform-typescript": "^7.25.9" }, "engines": { "node": ">=6.9.0" @@ -2206,51 +2429,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/register/node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/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/@babel/regjsgen": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", @@ -2270,60 +2448,53 @@ } }, "node_modules/@babel/template": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.7.tgz", - "integrity": "sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==", + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", - "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-environment-visitor": "^7.24.7", - "@babel/helper-function-name": "^7.24.7", - "@babel/helper-hoist-variables": "^7.24.7", - "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7", - "debug": "^4.3.1", - "globals": "^11.1.0" + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", + "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.3", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", - "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@base2/pretty-print-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz", - "integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==", - "dev": true - }, "node_modules/@bcoe/v8-coverage": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", @@ -2331,11 +2502,11 @@ "dev": true }, "node_modules/@bundled-es-modules/cookie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.0.tgz", - "integrity": "sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.1.tgz", + "integrity": "sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==", "dependencies": { - "cookie": "^0.5.0" + "cookie": "^0.7.2" } }, "node_modules/@bundled-es-modules/statuses": { @@ -2346,6 +2517,16 @@ "statuses": "^2.0.1" } }, + "node_modules/@bundled-es-modules/tough-cookie": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz", + "integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==", + "license": "ISC", + "dependencies": { + "@types/tough-cookie": "^4.0.5", + "tough-cookie": "^4.1.4" + } + }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -2368,10 +2549,125 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@csstools/color-helpers": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", + "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.2.tgz", + "integrity": "sha512-TklMyb3uBB28b5uQdxjReG4L80NxAqgrECqLZFQbyLekwwlcDDS8r3f07DKqeo8C4926Br0gf/ZDe17Zv4wIuw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.8.tgz", + "integrity": "sha512-pdwotQjCCnRPuNi06jFuP68cykU1f3ZWExLe/8MQ1LOs8Xq+fTkYgd+2V8mWUWMrOn9iS2HftPVaMZDaXzGbhQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.0.2", + "@csstools/css-calc": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", + "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", + "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/@emotion/is-prop-valid": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", - "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", "dependencies": { "@emotion/memoize": "^0.8.1" } @@ -2387,407 +2683,526 @@ "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", + "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", + "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", + "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", + "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", + "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", + "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", + "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", + "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", + "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", + "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", + "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", + "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", "cpu": [ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", + "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", "cpu": [ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", + "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", + "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", + "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", + "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", + "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", + "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", + "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", + "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", + "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", + "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", + "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", + "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "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==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz", + "integrity": "sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==", "dev": true, + "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/compat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.3.1.tgz", + "integrity": "sha512-k8MHony59I5EPic6EQTCNOuPoVBnoYXkP+20xvwFjN7t0qI3ImyvyBgg+hIVPwC8JaxVjjUZld+cLfBLFDLucg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^8.40 || 9" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/config-array": { + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", + "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.15.1.tgz", + "integrity": "sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -2795,7 +3210,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -2806,6 +3221,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2818,15 +3234,13 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2836,33 +3250,50 @@ "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 + "dev": true, + "license": "MIT" }, - "node_modules/@eslint/eslintrc/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==", + "node_modules/@eslint/js": { + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.32.0.tgz", + "integrity": "sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://eslint.org/donate" } }, - "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.3.4.tgz", + "integrity": "sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.15.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@faker-js/faker": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-8.4.1.tgz", - "integrity": "sha512-XQ3cU+Q8Uqmrbf2e0cIC/QN43sTBSC8KF12u29Mb47tWrt2hAgBXSgpZMj4Ao8Uk0iJcU99QsOCaIL8934obCg==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.0.3.tgz", + "integrity": "sha512-lWrrK4QNlFSU+13PL9jMbMKLJYXDFu3tQfayBsMXX7KL/GiQeqfB1CzHkqD5UHBUtPAuPo6XwGbMFNdVMZObRA==", "dev": true, "funding": [ { @@ -2870,48 +3301,50 @@ "url": "https://opencollective.com/fakerjs" } ], + "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0", - "npm": ">=6.14.13" + "node": ">=18.0.0", + "npm": ">=9.0.0" } }, "node_modules/@floating-ui/core": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", - "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "version": "1.6.8", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.8.tgz", + "integrity": "sha512-7XJ9cPU+yI2QeLS+FCSlqNFZJq8arvswefkZrYI1yQBbftw6FyrZOxYSh+9S7z7TpeWlRt9zJ5IhM1WIL334jA==", "dependencies": { - "@floating-ui/utils": "^0.2.1" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.1.tgz", - "integrity": "sha512-iA8qE43/H5iGozC3W0YSnVSW42Vh522yyM1gj+BqRwVsTNOyr231PsXDaV04yT39PsO0QL2QpbI/M0ZaLUQgRQ==", + "version": "1.6.11", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.11.tgz", + "integrity": "sha512-qkMCxSR24v2vGkhYDo/UzxfJN3D4syqSjyuTFz6C7XcpU1pASPRieNI0Kj5VP3/503mOfYiGY891ugBX1GlABQ==", "dependencies": { "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.1" + "@floating-ui/utils": "^0.2.8" } }, "node_modules/@floating-ui/react": { - "version": "0.26.12", - "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.12.tgz", - "integrity": "sha512-D09o62HrWdIkstF2kGekIKAC0/N/Dl6wo3CQsnLcOmO3LkW6Ik8uIb3kw8JYkwxNCcg+uJ2bpWUiIijTBep05w==", + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.27.0.tgz", + "integrity": "sha512-WLEksq7fJapXSJbmfiyq9pAW0a7ZFMEJToFE4oTDESxGjoa+nZu3YMjmZE2KvoUtQhqOK2yMMfWQFZyeWD0wGQ==", + "license": "MIT", "dependencies": { - "@floating-ui/react-dom": "^2.0.0", - "@floating-ui/utils": "^0.2.0", + "@floating-ui/react-dom": "^2.1.2", + "@floating-ui/utils": "^0.2.8", "tabbable": "^6.0.0" }, "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" + "react": ">=17.0.0", + "react-dom": ">=17.0.0" } }, "node_modules/@floating-ui/react-dom": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.0.8.tgz", - "integrity": "sha512-HOdqOt3R3OGeTKidaLvJKcgg75S6tibQ3Tif4eyd91QnIJWr0NLvoXFpJA/j8HqkFSL68GDca9AuyWEHlhyClw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.2.tgz", + "integrity": "sha512-06okr5cgPzMNBy+Ycse2A6udMi4bqwW/zgBF/rwjcNqWkyr82Mcg8b0vjX8OJpZFy/FKjJmw6wV7t44kK6kW7A==", "dependencies": { - "@floating-ui/dom": "^1.6.1" + "@floating-ui/dom": "^1.0.0" }, "peerDependencies": { "react": ">=16.8.0", @@ -2924,9 +3357,9 @@ "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" }, "node_modules/@floating-ui/utils": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", - "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.8.tgz", + "integrity": "sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==" }, "node_modules/@github/browserslist-config": { "version": "1.0.0", @@ -2935,12 +3368,16 @@ "dev": true }, "node_modules/@github/markdownlint-github": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@github/markdownlint-github/-/markdownlint-github-0.6.2.tgz", - "integrity": "sha512-cd+eRhqqIAXICHu5RQ9de70AZEI14opO9TqTz8HjkjQwWC1HRsdTwsRiK+6Fz2DqC1ZEd6t7+Dh5brOChLozcg==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@github/markdownlint-github/-/markdownlint-github-0.8.0.tgz", + "integrity": "sha512-079sWT/2Z8EI5v02GTtSfvG06E1m8Q6xjYoQiGdPg6rSKVntpfBw6in79fGs+vc9cYihBHl73vkOoDcyH/Jl8g==", "dev": true, + "license": "ISC", "dependencies": { - "lodash": "^4.17.15" + "lodash-es": "^4.17.15" + }, + "engines": { + "node": ">=18" } }, "node_modules/@gulpjs/messages": { @@ -2975,14 +3412,54 @@ "dot-wasm": "bin/dot-wasm.js" } }, + "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, + "license": "Apache-2.0", + "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, + "license": "Apache-2.0", + "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, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -3003,41 +3480,58 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", - "dev": true + "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, + "license": "BSD-3-Clause" + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@inquirer/confirm": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.1.2.tgz", - "integrity": "sha512-xQeRxRpVOQdBinIyOHX9+/nTrvt84NnaP8hym5ARdLr6a5T1ckowx70sEaItgULBHlxSIJL970BoRfFxlzO2IA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.0.tgz", + "integrity": "sha512-osaBbIMEqVFjTX5exoqPXs6PilWQdjaLhGtMDXMXg/yxkHXNq43GlxGyTA35lK2HpzUgDN+Cjh/2AmqCN0QJpw==", + "license": "MIT", "dependencies": { - "@inquirer/core": "^7.1.2", - "@inquirer/type": "^1.2.1" + "@inquirer/core": "^10.1.1", + "@inquirer/type": "^3.0.1" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" } }, "node_modules/@inquirer/core": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-7.1.2.tgz", - "integrity": "sha512-ne5VhDqruYYzx8mmjDZ9F58ymrLJGxmSHJUcJGiW3tifzvl3goAm6gNX11w6+zUnGE54vgQ6ALDXL3IOSezMRw==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.1.tgz", + "integrity": "sha512-rmZVXy9iZvO3ZStEe/ayuuwIJ23LSF13aPMlLMTQARX6lGUBDHGV8UB5i9MRrfy0+mZwt5/9bdy8llszSD3NQA==", + "license": "MIT", "dependencies": { - "@inquirer/type": "^1.2.1", - "@types/mute-stream": "^0.0.4", - "@types/node": "^20.12.4", - "@types/wrap-ansi": "^3.0.0", + "@inquirer/figures": "^1.0.8", + "@inquirer/type": "^3.0.1", "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "cli-spinners": "^2.9.2", "cli-width": "^4.1.0", - "figures": "^3.2.0", - "mute-stream": "^1.0.0", + "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0" + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" }, "engines": { "node": ">=18" @@ -3047,6 +3541,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3057,54 +3552,35 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@inquirer/core/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, "node_modules/@inquirer/core/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/@inquirer/core/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, "node_modules/@inquirer/core/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/@inquirer/core/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@inquirer/core/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -3114,21 +3590,11 @@ "node": ">=8" } }, - "node_modules/@inquirer/core/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@inquirer/core/node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -3138,18 +3604,31 @@ "node": ">=8" } }, - "node_modules/@inquirer/type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.2.1.tgz", - "integrity": "sha512-xwMfkPAxeo8Ji/IxfUSqzRi0/+F2GIqJmpc5/thelgMGsjNZcjDDRBO9TLXT1s/hdx/mK5QbVIvgoLIFgXhTMQ==", + "node_modules/@inquirer/figures": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.8.tgz", + "integrity": "sha512-tKd+jsmhq21AP1LhexC0pPwsCxEhGgAkg28byjJAd+xhmIs8LUX8JbUc3vBf3PhLxWiB5EvyBE5X7JSPAqMAqg==", + "license": "MIT", "engines": { "node": ">=18" } }, - "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==", + "node_modules/@inquirer/type": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.1.tgz", + "integrity": "sha512-+ksJMIy92sOAiAccGpcKZUc3bYO07cADnscIxHBknEm3uNts3movSmBofc1908BNy5edKscxYeAdaX1NXkHS6A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + } + }, + "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==", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -3163,9 +3642,9 @@ } }, "node_modules/@isaacs/cliui/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==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "engines": { "node": ">=12" }, @@ -3487,167 +3966,134 @@ } }, "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==", + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-30.0.0-alpha.7.tgz", + "integrity": "sha512-sEszhsMrT7Jh0ngVjR8q36payUT2NU0kYwd5rdxUzlVha8gZg2FTq1VMjgETEnYyGXrEmnk7MmBUxTbT7dYrUw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", + "@jest/fake-timers": "30.0.0-alpha.7", + "@jest/types": "30.0.0-alpha.7", "@types/node": "*", - "jest-mock": "^29.7.0" + "jest-mock": "30.0.0-alpha.7" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/@jest/environment/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==", + "node_modules/@jest/environment-jsdom-abstract": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/environment-jsdom-abstract/-/environment-jsdom-abstract-30.0.0-alpha.7.tgz", + "integrity": "sha512-FHKsoBsyAs08KAgD0Iqvao3dd69JLaJnkoc7jLtb8LIUa9u0eDWoGftf4xb/a3nyJIE8Wv6qCqQxAmAWfOZ12g==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", + "@jest/environment": "30.0.0-alpha.7", + "@jest/fake-timers": "30.0.0-alpha.7", + "@jest/types": "30.0.0-alpha.7", + "@types/jsdom": "^21.1.1", "@types/node": "*", - "jest-util": "^29.7.0" + "jest-mock": "30.0.0-alpha.7", + "jest-util": "30.0.0-alpha.7" }, "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" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "canvas": "^2.5.0", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } } }, - "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==", + "node_modules/@jest/environment-jsdom-abstract/node_modules/@jest/fake-timers": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.0.0-alpha.7.tgz", + "integrity": "sha512-ct29bG+ebuRk1Re8nzxcMJIul1sE1Se0/PRwQwqbrLbInOw5H31q9DnqrhVhqgUgXosx7dyt1dJD8UvBfHBc4A==", "dev": true, + "license": "MIT", "dependencies": { - "jest-get-type": "^29.6.3" + "@jest/types": "30.0.0-alpha.7", + "@sinonjs/fake-timers": "^13.0.0", + "@types/node": "*", + "jest-message-util": "30.0.0-alpha.7", + "jest-mock": "30.0.0-alpha.7", + "jest-util": "30.0.0-alpha.7" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.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==", + "node_modules/@jest/environment-jsdom-abstract/node_modules/@jest/schemas": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.0-alpha.7.tgz", + "integrity": "sha512-fzJDwdg3E8Gq+Aqo/h+JQc1ZD+Mqbkz7OVqpoUa0A2Btd70zdgu1Hza8AyhJjr83paRQ+ZCHnHepp4/+tpqDFQ==", "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" + "@sinclair/typebox": "^0.34.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/@jest/fake-timers/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==", + "node_modules/@jest/environment-jsdom-abstract/node_modules/@jest/types": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.0-alpha.7.tgz", + "integrity": "sha512-hrdUqtIjUMpoNlpmo4DQfe6fvD0Rk02kdOv0+AsAbO689llpzNmb+kLcojzKp/H2jVGqcYrUb0wNSRgn4KcuqA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", + "@jest/pattern": "30.0.0-alpha.7", + "@jest/schemas": "30.0.0-alpha.7", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@types/node": "*", - "jest-util": "^29.7.0" + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.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==", + "node_modules/@jest/environment-jsdom-abstract/node_modules/@sinclair/typebox": { + "version": "0.34.31", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.31.tgz", + "integrity": "sha512-qQ71T9DsITbX3dVCrcBERbs11YuSMg3wZPnT472JhqhWGPdiLgyvihJXU8m+ADJtJvRdjATIiACJD22dEknBrQ==", "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" - } + "license": "MIT" }, - "node_modules/@jest/globals/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==", + "node_modules/@jest/environment-jsdom-abstract/node_modules/@sinonjs/fake-timers": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@sinonjs/commons": "^3.0.1" } }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", - "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "node_modules/@jest/environment-jsdom-abstract/node_modules/@types/jsdom": { + "version": "21.1.7", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz", + "integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==", "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 - } + "@types/tough-cookie": "*", + "parse5": "^7.0.0" } }, - "node_modules/@jest/reporters/node_modules/ansi-styles": { + "node_modules/@jest/environment-jsdom-abstract/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3658,11 +4104,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/reporters/node_modules/chalk": { + "node_modules/@jest/environment-jsdom-abstract/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3674,56 +4121,125 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/reporters/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/@jest/environment-jsdom-abstract/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8" } }, - "node_modules/@jest/reporters/node_modules/has-flag": { + "node_modules/@jest/environment-jsdom-abstract/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", - "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "node_modules/@jest/environment-jsdom-abstract/node_modules/jest-message-util": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.0-alpha.7.tgz", + "integrity": "sha512-Wzfx5D8SQwdeb4iXex86ddzTMK2QTc0FUIIFEQ7VuQ+RWEcCRgpOPu6QaQqLl9X8q/JZ1yU/6ZIhb7dpJ6TnWw==", "dev": true, + "license": "MIT", "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" + "@babel/code-frame": "^7.12.13", + "@jest/types": "30.0.0-alpha.7", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.8", + "pretty-format": "30.0.0-alpha.7", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/jest-util": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.0-alpha.7.tgz", + "integrity": "sha512-8slx+UQVqYE7WgkOyAab//u0YlTKXFIv31+nsHNFpT0boE5E/w4uJ/HSer0SWpUOotcrGLveeWYi2Pyy8gxVfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.0-alpha.7", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^4.0.0", + "graceful-fs": "^4.2.9", + "picomatch": "^4.0.0" + }, + "engines": { + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/pretty-format": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.0-alpha.7.tgz", + "integrity": "sha512-2gg8UNJxO+v6IiWydXPTM2LvCuIBxT2RC53Ind6IW0Cu9zvxoCMKeAAVV9nfukZyK01GFdYXhoH2zW18PsA6MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.0-alpha.7", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, + "engines": { + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" + } + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/reporters/node_modules/supports-color": { + "node_modules/@jest/environment-jsdom-abstract/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jest/environment-jsdom-abstract/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3731,93 +4247,79 @@ "node": ">=8" } }, - "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==", + "node_modules/@jest/environment/node_modules/@jest/fake-timers": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.0.0-alpha.7.tgz", + "integrity": "sha512-ct29bG+ebuRk1Re8nzxcMJIul1sE1Se0/PRwQwqbrLbInOw5H31q9DnqrhVhqgUgXosx7dyt1dJD8UvBfHBc4A==", "dev": true, + "license": "MIT", "dependencies": { - "@sinclair/typebox": "^0.27.8" + "@jest/types": "30.0.0-alpha.7", + "@sinonjs/fake-timers": "^13.0.0", + "@types/node": "*", + "jest-message-util": "30.0.0-alpha.7", + "jest-mock": "30.0.0-alpha.7", + "jest-util": "30.0.0-alpha.7" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.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==", + "node_modules/@jest/environment/node_modules/@jest/schemas": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.0-alpha.7.tgz", + "integrity": "sha512-fzJDwdg3E8Gq+Aqo/h+JQc1ZD+Mqbkz7OVqpoUa0A2Btd70zdgu1Hza8AyhJjr83paRQ+ZCHnHepp4/+tpqDFQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" + "@sinclair/typebox": "^0.34.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.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==", + "node_modules/@jest/environment/node_modules/@jest/types": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.0-alpha.7.tgz", + "integrity": "sha512-hrdUqtIjUMpoNlpmo4DQfe6fvD0Rk02kdOv0+AsAbO689llpzNmb+kLcojzKp/H2jVGqcYrUb0wNSRgn4KcuqA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", + "@jest/pattern": "30.0.0-alpha.7", + "@jest/schemas": "30.0.0-alpha.7", "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.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": "^16.10.0 || ^18.12.0 || >=20.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==", + "node_modules/@jest/environment/node_modules/@sinclair/typebox": { + "version": "0.34.31", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.31.tgz", + "integrity": "sha512-qQ71T9DsITbX3dVCrcBERbs11YuSMg3wZPnT472JhqhWGPdiLgyvihJXU8m+ADJtJvRdjATIiACJD22dEknBrQ==", "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" - } + "license": "MIT" }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", - "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "node_modules/@jest/environment/node_modules/@sinonjs/fake-timers": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", "dev": true, + "license": "BSD-3-Clause", "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" + "@sinonjs/commons": "^3.0.1" } }, - "node_modules/@jest/transform/node_modules/ansi-styles": { + "node_modules/@jest/environment/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3828,11 +4330,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/transform/node_modules/chalk": { + "node_modules/@jest/environment/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3844,89 +4347,125 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@jest/transform/node_modules/has-flag": { + "node_modules/@jest/environment/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/environment/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@jest/transform/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@jest/environment/node_modules/jest-message-util": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.0-alpha.7.tgz", + "integrity": "sha512-Wzfx5D8SQwdeb4iXex86ddzTMK2QTc0FUIIFEQ7VuQ+RWEcCRgpOPu6QaQqLl9X8q/JZ1yU/6ZIhb7dpJ6TnWw==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@babel/code-frame": "^7.12.13", + "@jest/types": "30.0.0-alpha.7", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.8", + "pretty-format": "30.0.0-alpha.7", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": ">=8" + "node": "^16.10.0 || ^18.12.0 || >=20.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==", + "node_modules/@jest/environment/node_modules/jest-util": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.0-alpha.7.tgz", + "integrity": "sha512-8slx+UQVqYE7WgkOyAab//u0YlTKXFIv31+nsHNFpT0boE5E/w4uJ/HSer0SWpUOotcrGLveeWYi2Pyy8gxVfg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", + "@jest/types": "30.0.0-alpha.7", "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "chalk": "^4.0.0", + "ci-info": "^4.0.0", + "graceful-fs": "^4.2.9", + "picomatch": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/@jest/types/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/@jest/environment/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@jest/types/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/@jest/environment/node_modules/pretty-format": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.0-alpha.7.tgz", + "integrity": "sha512-2gg8UNJxO+v6IiWydXPTM2LvCuIBxT2RC53Ind6IW0Cu9zvxoCMKeAAVV9nfukZyK01GFdYXhoH2zW18PsA6MQ==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jest/schemas": "30.0.0-alpha.7", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, + "engines": { + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" + } + }, + "node_modules/@jest/environment/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@jest/types/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/@jest/environment/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", "dev": true, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/@jest/types/node_modules/supports-color": { + "node_modules/@jest/environment/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3934,634 +4473,1960 @@ "node": ">=8" } }, - "node_modules/@joshwooding/vite-plugin-react-docgen-typescript": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.3.1.tgz", - "integrity": "sha512-pdoMZ9QaPnVlSM+SdU/wgg0nyD/8wQ7y90ttO2CMCyrrm7RxveYIJ5eNfjPaoMFqW41LZra7QO9j+xV4Y18Glw==", + "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": { - "glob": "^7.2.0", - "glob-promise": "^4.2.0", - "magic-string": "^0.27.0", - "react-docgen-typescript": "^2.2.2" - }, - "peerDependencies": { - "typescript": ">= 4.3.x", - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "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": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "jest-get-type": "^29.6.3" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "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": { - "@jridgewell/sourcemap-codec": "^1.4.13" + "@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": ">=12" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "node_modules/@jest/fake-timers/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": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" }, "engines": { - "node": ">=6.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "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": ">=6.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "node_modules/@jest/globals/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, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, "engines": { - "node": ">=6.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "node_modules/@jest/globals/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": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@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/@mdx-js/react": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz", - "integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==", + "node_modules/@jest/pattern": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.0-alpha.7.tgz", + "integrity": "sha512-PpuWkTJwcFJlyo6YOuMLi96doaaDfz90gOAU+cuyIZyr6wjbjKjdMkHlt7rE6gNaZNEUEA9sSJzKsg8oXfLW0w==", "dev": true, + "license": "MIT", "dependencies": { - "@types/mdx": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@types/node": "*", + "jest-regex-util": "30.0.0-alpha.7" }, - "peerDependencies": { - "@types/react": ">=16", - "react": ">=16" + "engines": { + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/@microsoft/applicationinsights-web-snippet": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-web-snippet/-/applicationinsights-web-snippet-1.0.1.tgz", - "integrity": "sha512-2IHAOaLauc8qaAitvWS+U931T+ze+7MNWrDHY47IENP5y2UA0vqJDu67kWZDdpCN1fFC77sfgfB+HV7SrKshnQ==", - "dev": true - }, - "node_modules/@microsoft/fast-element": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@microsoft/fast-element/-/fast-element-1.12.0.tgz", - "integrity": "sha512-gQutuDHPKNxUEcQ4pypZT4Wmrbapus+P9s3bR/SEOLsMbNqNoXigGImITygI5zhb+aA5rzflM6O8YWkmRbGkPA==" - }, - "node_modules/@microsoft/fast-foundation": { - "version": "2.49.4", - "resolved": "https://registry.npmjs.org/@microsoft/fast-foundation/-/fast-foundation-2.49.4.tgz", - "integrity": "sha512-5I2tSPo6bnOfVAIX7XzX+LhilahwvD7h+yzl3jW0t5IYmMX9Lci9VUVyx5f8hHdb1O9a8Y9Atb7Asw7yFO/u+w==", - "dependencies": { - "@microsoft/fast-element": "^1.12.0", - "@microsoft/fast-web-utilities": "^5.4.1", - "tabbable": "^5.2.0", - "tslib": "^1.13.0" + "node_modules/@jest/pattern/node_modules/jest-regex-util": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.0-alpha.7.tgz", + "integrity": "sha512-EUHpErwer3WQVcX1wKlvGHtIzVnGz5PzFVzp3/PzI+kTGduDvo0JuOnKHWuBYVwc5TADQmrdNiVU3+25swZoug==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/@microsoft/fast-foundation/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@microsoft/fast-react-wrapper": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@microsoft/fast-react-wrapper/-/fast-react-wrapper-0.3.22.tgz", - "integrity": "sha512-XhlX4m6znh7XW92oPvlKoG9USUn9JtF9rP1qtUoIbkaDaFtUS+H8o1Jn6/oK/rS44LbBLJXrvRkInmSWlDiGFw==", + "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": { - "@microsoft/fast-element": "^1.12.0", - "@microsoft/fast-foundation": "^2.49.4" + "@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" }, - "peerDependencies": { - "react": ">=16.9.0" - } - }, - "node_modules/@microsoft/fast-web-utilities": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/@microsoft/fast-web-utilities/-/fast-web-utilities-5.4.1.tgz", - "integrity": "sha512-ReWYncndjV3c8D8iq9tp7NcFNc1vbVHvcBFPME2nNFKNbS1XCesYZGlIlf3ot5EmuOXPlrzUHOWzQ2vFpIkqDg==", - "dependencies": { - "exenv-es6": "^1.1.1" - } - }, - "node_modules/@mswjs/cookies": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@mswjs/cookies/-/cookies-1.1.0.tgz", - "integrity": "sha512-0ZcCVQxifZmhwNBoQIrystCb+2sWBY2Zw8lpfJBPCHGCA/HWqehITeCRVIv4VMy8MPlaHo2w2pTHFV2pFfqKPw==", "engines": { - "node": ">=18" + "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/@mswjs/interceptors": { - "version": "0.26.15", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.26.15.tgz", - "integrity": "sha512-HM47Lu1YFmnYHKMBynFfjCp0U/yRskHj/8QEJW0CBEPOlw8Gkmjfll+S9b8M7V5CNDw2/ciRxjjnWeaCiblSIQ==", + "node_modules/@jest/reporters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { - "@open-draft/deferred-promise": "^2.2.0", - "@open-draft/logger": "^0.3.0", - "@open-draft/until": "^2.0.0", - "is-node-process": "^1.2.0", - "outvariant": "^1.2.1", - "strict-event-emitter": "^0.5.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=18" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@node-ipc/js-queue": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@node-ipc/js-queue/-/js-queue-2.0.3.tgz", - "integrity": "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==", + "node_modules/@jest/reporters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "easy-stack": "1.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=1.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "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==", + "node_modules/@jest/reporters/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">= 8" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "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==", + "node_modules/@jest/reporters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">= 8" + "node": ">=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==", + "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", + "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@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": ">= 8" + "node": ">=10" } }, - "node_modules/@octokit/auth-token": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "node_modules/@jest/reporters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">= 18" + "node": ">=8" } }, - "node_modules/@octokit/core": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.2.tgz", - "integrity": "sha512-cZUy1gUvd4vttMic7C0lwPed8IYXWYp8kHIMatyhY8t8n3Cpw2ILczkV5pGMPqef7v0bLo0pOHrEHarsau2Ydg==", + "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": { - "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": ">= 18" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@octokit/endpoint": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.4.tgz", - "integrity": "sha512-DWPLtr1Kz3tv8L0UvXTDP1fNwM0S+z6EJpRcvH66orY6Eld4XBMCSYsaWp4xIm61jTWxK68BrR7ibO+vSDnZqw==", + "node_modules/@jest/snapshot-utils": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/snapshot-utils/-/snapshot-utils-30.0.0-alpha.7.tgz", + "integrity": "sha512-mXfMgNqHdiuWXavhZPaH+EfASKp5DUqfr9ISvcl+YO0HxtOvQH2Ulttwsq9MYkhbKpiwTTk17Tt6NTBogmRlGw==", + "dev": true, + "license": "MIT", "dependencies": { - "@octokit/types": "^12.0.0", - "universal-user-agent": "^6.0.0" + "@jest/types": "30.0.0-alpha.7", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "natural-compare": "^1.4.0" }, "engines": { - "node": ">= 18" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/@octokit/graphql": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.2.tgz", - "integrity": "sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==", + "node_modules/@jest/snapshot-utils/node_modules/@jest/schemas": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.0-alpha.7.tgz", + "integrity": "sha512-fzJDwdg3E8Gq+Aqo/h+JQc1ZD+Mqbkz7OVqpoUa0A2Btd70zdgu1Hza8AyhJjr83paRQ+ZCHnHepp4/+tpqDFQ==", + "dev": true, + "license": "MIT", "dependencies": { - "@octokit/request": "^8.0.1", - "@octokit/types": "^12.0.0", - "universal-user-agent": "^6.0.0" + "@sinclair/typebox": "^0.34.0" }, "engines": { - "node": ">= 18" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/@octokit/openapi-types": { - "version": "19.1.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.1.0.tgz", - "integrity": "sha512-6G+ywGClliGQwRsjvqVYpklIfa7oRPA0vyhPQG/1Feh+B+wU0vGH1JiJ5T25d3g1JZYBHzR2qefLi9x8Gt+cpw==" - }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "9.1.5", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.1.5.tgz", - "integrity": "sha512-WKTQXxK+bu49qzwv4qKbMMRXej1DU2gq017euWyKVudA6MldaSSQuxtz+vGbhxV4CjxpUxjZu6rM2wfc1FiWVg==", + "node_modules/@jest/snapshot-utils/node_modules/@jest/types": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.0-alpha.7.tgz", + "integrity": "sha512-hrdUqtIjUMpoNlpmo4DQfe6fvD0Rk02kdOv0+AsAbO689llpzNmb+kLcojzKp/H2jVGqcYrUb0wNSRgn4KcuqA==", + "dev": true, + "license": "MIT", "dependencies": { - "@octokit/types": "^12.4.0" + "@jest/pattern": "30.0.0-alpha.7", + "@jest/schemas": "30.0.0-alpha.7", + "@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": ">= 18" - }, - "peerDependencies": { - "@octokit/core": ">=5" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/@octokit/plugin-request-log": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.0.tgz", - "integrity": "sha512-2uJI1COtYCq8Z4yNSnM231TgH50bRkheQ9+aH8TnZanB6QilOnx8RMD2qsnamSOXtDj0ilxvevf5fGsBhBBzKA==", - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": ">=5" - } + "node_modules/@jest/snapshot-utils/node_modules/@sinclair/typebox": { + "version": "0.34.31", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.31.tgz", + "integrity": "sha512-qQ71T9DsITbX3dVCrcBERbs11YuSMg3wZPnT472JhqhWGPdiLgyvihJXU8m+ADJtJvRdjATIiACJD22dEknBrQ==", + "dev": true, + "license": "MIT" }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.2.0.tgz", - "integrity": "sha512-ePbgBMYtGoRNXDyKGvr9cyHjQ163PbwD0y1MkDJCpkO2YH4OeXX40c4wYHKikHGZcpGPbcRLuy0unPUuafco8Q==", + "node_modules/@jest/snapshot-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", "dependencies": { - "@octokit/types": "^12.3.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 18" + "node": ">=8" }, - "peerDependencies": { - "@octokit/core": ">=5" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@octokit/plugin-retry": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-6.0.1.tgz", - "integrity": "sha512-SKs+Tz9oj0g4p28qkZwl/topGcb0k0qPNX/i7vBKmDsjoeqnVfFUquqrE/O9oJY7+oLzdCtkiWSXLpLjvl6uog==", + "node_modules/@jest/snapshot-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", "dependencies": { - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", - "bottleneck": "^2.15.3" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 18" + "node": ">=10" }, - "peerDependencies": { - "@octokit/core": ">=5" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@octokit/plugin-throttling": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.1.3.tgz", - "integrity": "sha512-pfyqaqpc0EXh5Cn4HX9lWYsZ4gGbjnSmUILeu4u2gnuM50K/wIk9s1Pxt3lVeVwekmITgN/nJdoh43Ka+vye8A==", - "dependencies": { - "@octokit/types": "^12.2.0", - "bottleneck": "^2.15.3" - }, + "node_modules/@jest/snapshot-utils/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "@octokit/core": "^5.0.0" + "node": ">=8" } }, - "node_modules/@octokit/request": { - "version": "8.1.6", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.6.tgz", - "integrity": "sha512-YhPaGml3ncZC1NfXpP3WZ7iliL1ap6tLkAp6MvbK2fTTPytzVUyUesBBogcdMm86uRYO5rHaM1xIWxigWZ17MQ==", + "node_modules/@jest/snapshot-utils/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", "dependencies": { - "@octokit/endpoint": "^9.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", - "universal-user-agent": "^6.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 18" + "node": ">=8" } }, - "node_modules/@octokit/request-error": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.1.tgz", - "integrity": "sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==", + "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": { - "@octokit/types": "^12.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" }, "engines": { - "node": ">= 18" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@octokit/rest": { - "version": "20.0.2", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.0.2.tgz", - "integrity": "sha512-Ux8NDgEraQ/DMAU1PlAohyfBBXDwhnX2j33Z1nJNziqAfHi70PuxkFYIcIt8aIAxtRE7KVuKp8lSR8pA0J5iOQ==", + "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": { - "@octokit/core": "^5.0.0", - "@octokit/plugin-paginate-rest": "^9.0.0", - "@octokit/plugin-request-log": "^4.0.0", - "@octokit/plugin-rest-endpoint-methods": "^10.0.0" + "@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": ">= 18" - } - }, - "node_modules/@octokit/types": { - "version": "12.4.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.4.0.tgz", - "integrity": "sha512-FLWs/AvZllw/AGVs+nJ+ELCDZZJk+kY0zMen118xhL2zD0s1etIUHm1odgjP7epxYU1ln7SZxEUWYop5bhsdgQ==", - "dependencies": { - "@octokit/openapi-types": "^19.1.0" - } - }, - "node_modules/@open-draft/deferred-promise": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", - "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==" - }, - "node_modules/@open-draft/logger": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", - "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", - "dependencies": { - "is-node-process": "^1.2.0", - "outvariant": "^1.4.0" - } - }, - "node_modules/@open-draft/until": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", - "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==" - }, - "node_modules/@opentelemetry/api": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.7.0.tgz", - "integrity": "sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw==", - "dev": true, - "engines": { - "node": ">=8.0.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@opentelemetry/core": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.19.0.tgz", - "integrity": "sha512-w42AukJh3TP8R0IZZOVJVM/kMWu8g+lm4LzT70WtuKqhwq7KVhcDzZZuZinWZa6TtQCl7Smt2wolEYzpHabOgw==", + "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": { - "@opentelemetry/semantic-conventions": "1.19.0" + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.8.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@opentelemetry/instrumentation": { - "version": "0.41.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.41.2.tgz", - "integrity": "sha512-rxU72E0pKNH6ae2w5+xgVYZLzc5mlxAbGzF4shxMVK8YC2QQsfN38B2GPbj0jvrKWWNUElfclQ+YTykkNg/grw==", + "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": { - "@types/shimmer": "^1.0.2", - "import-in-the-middle": "1.4.2", - "require-in-the-middle": "^7.1.1", - "semver": "^7.5.1", - "shimmer": "^1.2.1" + "@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" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@opentelemetry/resources": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.19.0.tgz", - "integrity": "sha512-RgxvKuuMOf7nctOeOvpDjt2BpZvZGr9Y0vf7eGtY5XYZPkh2p7e2qub1S2IArdBMf9kEbz0SfycqCviOu9isqg==", + "node_modules/@jest/transform/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@opentelemetry/core": "1.19.0", - "@opentelemetry/semantic-conventions": "1.19.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=14" + "node": ">=8" }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.8.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.19.0.tgz", - "integrity": "sha512-+IRvUm+huJn2KqfFW3yW/cjvRwJ8Q7FzYHoUNx5Fr0Lws0LxjMJG1uVB8HDpLwm7mg5XXH2M5MF+0jj5cM8BpQ==", + "node_modules/@jest/transform/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "@opentelemetry/core": "1.19.0", - "@opentelemetry/resources": "1.19.0", - "@opentelemetry/semantic-conventions": "1.19.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=14" + "node": ">=10" }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.8.0" + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.19.0.tgz", - "integrity": "sha512-14jRpC8f5c0gPSwoZ7SbEJni1PqI+AhAE8m1bMz6v+RPM4OlP1PT2UHBJj5Qh/ALLPjhVU/aZUK3YyjTUqqQVg==", + "node_modules/@jest/transform/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=14" + "node": ">=8" } }, - "node_modules/@phenomnomnominal/tsquery": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-5.0.1.tgz", - "integrity": "sha512-3nVv+e2FQwsW8Aw6qTU6f+1rfcJ3hrcnvH/mu9i8YhxO+9sqbOfpL8m6PbET5+xKOlz/VSbp0RoYWYCtIsnmuA==", + "node_modules/@jest/transform/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "esquery": "^1.4.0" + "has-flag": "^4.0.0" }, - "peerDependencies": { - "typescript": "^3 || ^4 || ^5" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "optional": true, "engines": { - "node": ">=14" + "node": ">=8" } }, - "node_modules/@pkgr/utils": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@pkgr/utils/-/utils-2.4.2.tgz", - "integrity": "sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==", + "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": { - "cross-spawn": "^7.0.3", - "fast-glob": "^3.3.0", - "is-glob": "^4.0.3", - "open": "^9.1.0", - "picocolors": "^1.0.0", - "tslib": "^2.6.0" + "@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": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/unts" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@pkgr/utils/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/@jest/types/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@pkgr/utils/node_modules/open": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/open/-/open-9.1.0.tgz", - "integrity": "sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==", + "node_modules/@jest/types/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "default-browser": "^4.0.0", - "define-lazy-prop": "^3.0.0", - "is-inside-container": "^1.0.0", - "is-wsl": "^2.2.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=14.16" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@pkgr/utils/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/@jest/types/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/@playwright/test": { - "version": "1.40.1", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.40.1.tgz", - "integrity": "sha512-EaaawMTOeEItCRvfmkI9v6rBkF1svM8wjl/YPRrg2N2Wmp+4qJYkWtJsbew1szfKKDm6fPLy4YAanBhIlf9dWw==", + "node_modules/@jest/types/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "playwright": "1.40.1" - }, - "bin": { - "playwright": "cli.js" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=16" + "node": ">=8" } }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "node_modules/@joshwooding/vite-plugin-react-docgen-typescript": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.5.0.tgz", + "integrity": "sha512-qYDdL7fPwLRI+bJNurVcis+tNgJmvWjH4YTBGXTA8xMuxFrnAz6E5o35iyzyKbq5J5Lr8mJGfrR5GXl+WGwhgQ==", "dev": true, + "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" + "glob": "^10.0.0", + "magic-string": "^0.27.0", + "react-docgen-typescript": "^2.2.2" }, - "engines": { + "peerDependencies": { + "typescript": ">= 4.3.x", + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/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, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz", + "integrity": "sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.29", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.29.tgz", + "integrity": "sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@lit-labs/ssr-dom-shim": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.3.0.tgz", + "integrity": "sha512-nQIWonJ6eFAvUUrSlwyHDm/aE8PBDu5kRpL0vHMg6K8fK3Diq1xdPjTnsJSwxABhaZ+5eBi1btQB5ShUTKo4nQ==", + "license": "BSD-3-Clause" + }, + "node_modules/@lit/react": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@lit/react/-/react-1.0.7.tgz", + "integrity": "sha512-cencnwwLXQKiKxjfFzSgZRngcWJzUDZi/04E0fSaF86wZgchMdvTyu+lE36DrUfvuus3bH8+xLPrhM1cTjwpzw==", + "license": "BSD-3-Clause", + "peerDependencies": { + "@types/react": "17 || 18 || 19" + } + }, + "node_modules/@lit/reactive-element": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", + "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0" + } + }, + "node_modules/@mdx-js/react": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", + "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdx": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" + } + }, + "node_modules/@microsoft/applicationinsights-web-snippet": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-web-snippet/-/applicationinsights-web-snippet-1.0.1.tgz", + "integrity": "sha512-2IHAOaLauc8qaAitvWS+U931T+ze+7MNWrDHY47IENP5y2UA0vqJDu67kWZDdpCN1fFC77sfgfB+HV7SrKshnQ==", + "dev": true + }, + "node_modules/@microsoft/eslint-formatter-sarif": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@microsoft/eslint-formatter-sarif/-/eslint-formatter-sarif-3.1.0.tgz", + "integrity": "sha512-/mn4UXziHzGXnKCg+r8HGgPy+w4RzpgdoqFuqaKOqUVBT5x2CygGefIrO4SusaY7t0C4gyIWMNu6YQT6Jw64Cw==", + "dev": true, + "dependencies": { + "eslint": "^8.9.0", + "jschardet": "latest", + "lodash": "^4.17.14", + "utf8": "^3.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@microsoft/eslint-formatter-sarif/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, + "license": "MIT", + "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/@microsoft/eslint-formatter-sarif/node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@microsoft/eslint-formatter-sarif/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, + "license": "MIT", + "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/@microsoft/eslint-formatter-sarif/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@microsoft/eslint-formatter-sarif/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "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/@microsoft/eslint-formatter-sarif/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@microsoft/eslint-formatter-sarif/node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@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/@microsoft/eslint-formatter-sarif/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "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/@microsoft/eslint-formatter-sarif/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, + "license": "BSD-2-Clause", + "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/@microsoft/eslint-formatter-sarif/node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@microsoft/eslint-formatter-sarif/node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@microsoft/eslint-formatter-sarif/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, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@microsoft/eslint-formatter-sarif/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, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@microsoft/eslint-formatter-sarif/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@microsoft/eslint-formatter-sarif/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, + "license": "MIT" + }, + "node_modules/@microsoft/eslint-formatter-sarif/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@microsoft/eslint-formatter-sarif/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, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@mswjs/interceptors": { + "version": "0.37.3", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.37.3.tgz", + "integrity": "sha512-USvgCL/uOGFtVa6SVyRrC8kIAedzRohxIXN5LISlg5C5vLZCn7dgMFVSNhSF9cuBEFrm/O2spDWEZeMnw4ZXYg==", + "license": "MIT", + "dependencies": { + "@open-draft/deferred-promise": "^2.2.0", + "@open-draft/logger": "^0.3.0", + "@open-draft/until": "^2.0.0", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "strict-event-emitter": "^0.5.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@node-ipc/js-queue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@node-ipc/js-queue/-/js-queue-2.0.3.tgz", + "integrity": "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==", + "dev": true, + "dependencies": { + "easy-stack": "1.0.1" + }, + "engines": { + "node": ">=1.0.0" + } + }, + "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/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@octokit/auth-token": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-6.0.0.tgz", + "integrity": "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==", + "license": "MIT", + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/core": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-7.0.3.tgz", + "integrity": "sha512-oNXsh2ywth5aowwIa7RKtawnkdH6LgU1ztfP9AIUCQCvzysB+WeU8o2kyyosDPwBZutPpjZDKPQGIzzrfTWweQ==", + "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^6.0.0", + "@octokit/graphql": "^9.0.1", + "@octokit/request": "^10.0.2", + "@octokit/request-error": "^7.0.0", + "@octokit/types": "^14.0.0", + "before-after-hook": "^4.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/core/node_modules/@octokit/openapi-types": { + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.1.0.tgz", + "integrity": "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==", + "license": "MIT" + }, + "node_modules/@octokit/core/node_modules/@octokit/request-error": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.0.0.tgz", + "integrity": "sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg==", + "license": "MIT", + "dependencies": { + "@octokit/types": "^14.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/core/node_modules/@octokit/types": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.1.0.tgz", + "integrity": "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^25.1.0" + } + }, + "node_modules/@octokit/endpoint": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-11.0.0.tgz", + "integrity": "sha512-hoYicJZaqISMAI3JfaDr1qMNi48OctWuOih1m80bkYow/ayPw6Jj52tqWJ6GEoFTk1gBqfanSoI1iY99Z5+ekQ==", + "license": "MIT", + "dependencies": { + "@octokit/types": "^14.0.0", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/endpoint/node_modules/@octokit/openapi-types": { + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.1.0.tgz", + "integrity": "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==", + "license": "MIT" + }, + "node_modules/@octokit/endpoint/node_modules/@octokit/types": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.1.0.tgz", + "integrity": "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^25.1.0" + } + }, + "node_modules/@octokit/graphql": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-9.0.1.tgz", + "integrity": "sha512-j1nQNU1ZxNFx2ZtKmL4sMrs4egy5h65OMDmSbVyuCzjOcwsHq6EaYjOTGXPQxgfiN8dJ4CriYHk6zF050WEULg==", + "license": "MIT", + "dependencies": { + "@octokit/request": "^10.0.2", + "@octokit/types": "^14.0.0", + "universal-user-agent": "^7.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/graphql/node_modules/@octokit/openapi-types": { + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.1.0.tgz", + "integrity": "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==", + "license": "MIT" + }, + "node_modules/@octokit/graphql/node_modules/@octokit/types": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.1.0.tgz", + "integrity": "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^25.1.0" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "23.0.1", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz", + "integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==", + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-13.1.1.tgz", + "integrity": "sha512-q9iQGlZlxAVNRN2jDNskJW/Cafy7/XE52wjZ5TTvyhyOD904Cvx//DNyoO3J/MXJ0ve3rPoNWKEg5iZrisQSuw==", + "license": "MIT", + "dependencies": { + "@octokit/types": "^14.1.0" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/openapi-types": { + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.1.0.tgz", + "integrity": "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==", + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-rest/node_modules/@octokit/types": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.1.0.tgz", + "integrity": "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^25.1.0" + } + }, + "node_modules/@octokit/plugin-request-log": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-6.0.0.tgz", + "integrity": "sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q==", + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-16.0.0.tgz", + "integrity": "sha512-kJVUQk6/dx/gRNLWUnAWKFs1kVPn5O5CYZyssyEoNYaFedqZxsfYs7DwI3d67hGz4qOwaJ1dpm07hOAD1BXx6g==", + "license": "MIT", + "dependencies": { + "@octokit/types": "^14.1.0" + }, + "engines": { + "node": ">= 20" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/openapi-types": { + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.1.0.tgz", + "integrity": "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==", + "license": "MIT" + }, + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.1.0.tgz", + "integrity": "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^25.1.0" + } + }, + "node_modules/@octokit/plugin-retry": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-7.2.0.tgz", + "integrity": "sha512-psMbEYb/Fh+V+ZaFo8J16QiFz4sVTv3GntCSU+hYqzHiMdc3P+hhHLVv+dJt0PGIPAGoIA5u+J2DCJdK6lEPsQ==", + "license": "MIT", + "dependencies": { + "@octokit/request-error": "^6.1.7", + "@octokit/types": "^13.6.2", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": ">=6" + } + }, + "node_modules/@octokit/plugin-throttling": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-9.6.0.tgz", + "integrity": "sha512-zn7m1N3vpJDaVzLqjCRdJ0cRzNiekHEWPi8Ww9xyPNrDt5PStHvVE0eR8wy4RSU8Eg7YO8MHyvn6sv25EGVhhg==", + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.7.0", + "bottleneck": "^2.15.3" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "^6.1.3" + } + }, + "node_modules/@octokit/request": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-10.0.3.tgz", + "integrity": "sha512-V6jhKokg35vk098iBqp2FBKunk3kMTXlmq+PtbV9Gl3TfskWlebSofU9uunVKhUN7xl+0+i5vt0TGTG8/p/7HA==", + "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^11.0.0", + "@octokit/request-error": "^7.0.0", + "@octokit/types": "^14.0.0", + "fast-content-type-parse": "^3.0.0", + "universal-user-agent": "^7.0.2" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/request-error": { + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.7.tgz", + "integrity": "sha512-69NIppAwaauwZv6aOzb+VVLwt+0havz9GT5YplkeJv7fG7a40qpLt/yZKyiDxAhgz0EtgNdNcb96Z0u+Zyuy2g==", + "license": "MIT", + "dependencies": { + "@octokit/types": "^13.6.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/@octokit/request/node_modules/@octokit/openapi-types": { + "version": "25.1.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-25.1.0.tgz", + "integrity": "sha512-idsIggNXUKkk0+BExUn1dQ92sfysJrje03Q0bv0e+KPLrvyqZF8MnBpFz8UNfYDwB3Ie7Z0TByjWfzxt7vseaA==", + "license": "MIT" + }, + "node_modules/@octokit/request/node_modules/@octokit/request-error": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-7.0.0.tgz", + "integrity": "sha512-KRA7VTGdVyJlh0cP5Tf94hTiYVVqmt2f3I6mnimmaVz4UG3gQV/k4mDJlJv3X67iX6rmN7gSHCF8ssqeMnmhZg==", + "license": "MIT", + "dependencies": { + "@octokit/types": "^14.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/request/node_modules/@octokit/types": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-14.1.0.tgz", + "integrity": "sha512-1y6DgTy8Jomcpu33N+p5w58l6xyt55Ar2I91RPiIA0xCJBXyUAhXCcmZaDWSANiha7R9a6qJJ2CRomGPZ6f46g==", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^25.1.0" + } + }, + "node_modules/@octokit/rest": { + "version": "22.0.0", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-22.0.0.tgz", + "integrity": "sha512-z6tmTu9BTnw51jYGulxrlernpsQYXpui1RK21vmXn8yF5bp6iX16yfTtJYGK5Mh1qDkvDOmp2n8sRMcQmR8jiA==", + "license": "MIT", + "dependencies": { + "@octokit/core": "^7.0.2", + "@octokit/plugin-paginate-rest": "^13.0.1", + "@octokit/plugin-request-log": "^6.0.0", + "@octokit/plugin-rest-endpoint-methods": "^16.0.0" + }, + "engines": { + "node": ">= 20" + } + }, + "node_modules/@octokit/types": { + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz", + "integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==", + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^23.0.1" + } + }, + "node_modules/@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "license": "MIT" + }, + "node_modules/@open-draft/logger": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz", + "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==", + "license": "MIT", + "dependencies": { + "is-node-process": "^1.2.0", + "outvariant": "^1.4.0" + } + }, + "node_modules/@open-draft/until": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz", + "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==", + "license": "MIT" + }, + "node_modules/@opentelemetry/api": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.7.0.tgz", + "integrity": "sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/core": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.19.0.tgz", + "integrity": "sha512-w42AukJh3TP8R0IZZOVJVM/kMWu8g+lm4LzT70WtuKqhwq7KVhcDzZZuZinWZa6TtQCl7Smt2wolEYzpHabOgw==", + "dev": true, + "dependencies": { + "@opentelemetry/semantic-conventions": "1.19.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.8.0" + } + }, + "node_modules/@opentelemetry/instrumentation": { + "version": "0.41.2", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.41.2.tgz", + "integrity": "sha512-rxU72E0pKNH6ae2w5+xgVYZLzc5mlxAbGzF4shxMVK8YC2QQsfN38B2GPbj0jvrKWWNUElfclQ+YTykkNg/grw==", + "dev": true, + "dependencies": { + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "1.4.2", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.1", + "shimmer": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@opentelemetry/resources": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.19.0.tgz", + "integrity": "sha512-RgxvKuuMOf7nctOeOvpDjt2BpZvZGr9Y0vf7eGtY5XYZPkh2p7e2qub1S2IArdBMf9kEbz0SfycqCviOu9isqg==", + "dev": true, + "dependencies": { + "@opentelemetry/core": "1.19.0", + "@opentelemetry/semantic-conventions": "1.19.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.8.0" + } + }, + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.19.0.tgz", + "integrity": "sha512-+IRvUm+huJn2KqfFW3yW/cjvRwJ8Q7FzYHoUNx5Fr0Lws0LxjMJG1uVB8HDpLwm7mg5XXH2M5MF+0jj5cM8BpQ==", + "dev": true, + "dependencies": { + "@opentelemetry/core": "1.19.0", + "@opentelemetry/resources": "1.19.0", + "@opentelemetry/semantic-conventions": "1.19.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.8.0" + } + }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.19.0.tgz", + "integrity": "sha512-14jRpC8f5c0gPSwoZ7SbEJni1PqI+AhAE8m1bMz6v+RPM4OlP1PT2UHBJj5Qh/ALLPjhVU/aZUK3YyjTUqqQVg==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/@parcel/watcher/node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/@phenomnomnominal/tsquery": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-5.0.1.tgz", + "integrity": "sha512-3nVv+e2FQwsW8Aw6qTU6f+1rfcJ3hrcnvH/mu9i8YhxO+9sqbOfpL8m6PbET5+xKOlz/VSbp0RoYWYCtIsnmuA==", + "dev": true, + "dependencies": { + "esquery": "^1.4.0" + }, + "peerDependencies": { + "typescript": "^3 || ^4 || ^5" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@pkgr/core": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.2.tgz", + "integrity": "sha512-fdDH1LSGfZdTH2sxdpVMw31BanV28K/Gry0cVFxaNP77neJSkd82mM8ErPNYs9e+0O7SdHBLTDzDgwUuy18RnQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@playwright/test": { + "version": "1.50.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.50.1.tgz", + "integrity": "sha512-Jii3aBg+CEDpgnuDxEp/h7BimHcUTDlpEtce89xEumlJ5ef2hqepZ+PWp1DDpYC/VO9fmWVI1IlEaoI5fK9FXQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.50.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { "node": ">=14.0.0" }, "peerDependencies": { @@ -4573,181 +6438,306 @@ } } }, - "node_modules/@rollup/pluginutils/node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true - }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", - "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.1.tgz", + "integrity": "sha512-HJXwzoZN4eYTdD8bVV22DN8gsPCAj3V20NHKOs8ezfXanGpmVPR7kalUHd+Y31IJp9stdB87VKPFbsGY3H/2ag==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", - "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.1.tgz", + "integrity": "sha512-PZlsJVcjHfcH53mOImyt3bc97Ep3FJDXRpk9sMdGX0qgLmY0EIWxCag6EigerGhLVuL8lDVYNnSo8qnTElO4xw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", - "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.1.tgz", + "integrity": "sha512-xc6i2AuWh++oGi4ylOFPmzJOEeAa2lJeGUGb4MudOtgfyyjr4UPNK+eEWTPLvmPJIY/pgw6ssFIox23SyrkkJw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", - "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.1.tgz", + "integrity": "sha512-2ofU89lEpDYhdLAbRdeyz/kX3Y2lpYc6ShRnDjY35bZhd2ipuDMDi6ZTQ9NIag94K28nFMofdnKeHR7BT0CATw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.1.tgz", + "integrity": "sha512-wOsE6H2u6PxsHY/BeFHA4VGQN3KUJFZp7QJBmDYI983fgxq5Th8FDkVuERb2l9vDMs1D5XhOrhBrnqcEY6l8ZA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.1.tgz", + "integrity": "sha512-A/xeqaHTlKbQggxCqispFAcNjycpUEHP52mwMQZUNqDUJFFYtPHCXS1VAG29uMlDzIVr+i00tSFWFLivMcoIBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", - "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.1.tgz", + "integrity": "sha512-54v4okehwl5TaSIkpp97rAHGp7t3ghinRd/vyC1iXqXMfjYUTm7TfYmCzXDoHUPTTf36L8pr0E7YsD3CfB3ZDg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.1.tgz", + "integrity": "sha512-p/LaFyajPN/0PUHjv8TNyxLiA7RwmDoVY3flXHPSzqrGcIp/c2FjwPPP5++u87DGHtw+5kSH5bCJz0mvXngYxw==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", - "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.1.tgz", + "integrity": "sha512-2AbMhFFkTo6Ptna1zO7kAXXDLi7H9fGTbVaIq2AAYO7yzcAsuTNWPHhb2aTA6GPiP+JXh85Y8CiS54iZoj4opw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", - "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.1.tgz", + "integrity": "sha512-Cgef+5aZwuvesQNw9eX7g19FfKX5/pQRIyhoXLCiBOrWopjo7ycfB292TX9MDcDijiuIJlx1IzJz3IoCPfqs9w==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.50.1.tgz", + "integrity": "sha512-RPhTwWMzpYYrHrJAS7CmpdtHNKtt2Ueo+BlLBjfZEhYBhK00OsEqM08/7f+eohiF6poe0YRDDd8nAvwtE/Y62Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.1.tgz", + "integrity": "sha512-eSGMVQw9iekut62O7eBdbiccRguuDgiPMsw++BVUg+1K7WjZXHOg/YOT9SWMzPZA+w98G+Fa1VqJgHZOHHnY0Q==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", - "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.1.tgz", + "integrity": "sha512-S208ojx8a4ciIPrLgazF6AgdcNJzQE4+S9rsmOmDJkusvctii+ZvEuIC4v/xFqzbuP8yDjn73oBlNDgF6YGSXQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.1.tgz", + "integrity": "sha512-3Ag8Ls1ggqkGUvSZWYcdgFwriy2lWo+0QlYgEFra/5JGtAd6C5Hw59oojx1DeqcA2Wds2ayRgvJ4qxVTzCHgzg==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.1.tgz", + "integrity": "sha512-t9YrKfaxCYe7l7ldFERE1BRg/4TATxIg+YieHQ966jwvo7ddHJxPj9cNFWLAzhkVsbBvNA4qTbPVNsZKBO4NSg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", - "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.1.tgz", + "integrity": "sha512-MCgtFB2+SVNuQmmjHf+wfI4CMxy3Tk8XjA5Z//A0AKD7QXUYFMQcns91K6dEHBvZPCnhJSyDWLApk40Iq/H3tA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", - "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.1.tgz", + "integrity": "sha512-nEvqG+0jeRmqaUMuwzlfMKwcIVffy/9KGbAGyoa26iu6eSngAYQ512bMXuqqPrlTyfqdlB9FVINs93j534UJrg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.1.tgz", + "integrity": "sha512-RDsLm+phmT3MJd9SNxA9MNuEAO/J2fhW8GXk62G/B4G7sLVumNFbRwDL6v5NrESb48k+QMqdGbHgEtfU0LCpbA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", - "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.1.tgz", + "integrity": "sha512-hpZB/TImk2FlAFAIsoElM3tLzq57uxnGYwplg6WDyAxbYczSi8O2eQ+H2Lx74504rwKtZ3N2g4bCUkiamzS6TQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", - "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.1.tgz", + "integrity": "sha512-SXjv8JlbzKM0fTJidX4eVsH+Wmnp0/WcD8gJxIZyR6Gay5Qcsmdbi9zVtnbkGPG8v2vMR1AD06lGWy5FLMcG7A==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", - "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.1.tgz", + "integrity": "sha512-StxAO/8ts62KZVRAm4JZYq9+NqNsV7RvimNK+YM7ry//zebEH6meuugqW/P5OFUCjyQgui+9fUxT6d5NShvMvA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -4759,6 +6749,7 @@ "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -4767,10 +6758,11 @@ } }, "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", - "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } @@ -4785,12 +6777,15 @@ } }, "node_modules/@storybook/addon-a11y": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-8.2.8.tgz", - "integrity": "sha512-pUjTjJjoP/52hoB2BGqWmGPOUpM1YwEKsYJmY4ki3qJo/ehau+mMlal9xY9/mxafYFkYbrWvHoVSLxSRBxt3yg==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-a11y/-/addon-a11y-8.6.14.tgz", + "integrity": "sha512-fozv6enO9IgpWq2U8qqS8MZ21Nt+MVHiRQe3CjnCpBOejTyo/ATm690PeYYRVHVG6M/15TVePb0h3ngKQbrrzQ==", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/addon-highlight": "8.2.8", + "@storybook/addon-highlight": "8.6.14", + "@storybook/global": "^5.0.0", + "@storybook/test": "8.6.14", "axe-core": "^4.2.0" }, "funding": { @@ -4798,14 +6793,15 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.8" + "storybook": "^8.6.14" } }, "node_modules/@storybook/addon-actions": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.2.8.tgz", - "integrity": "sha512-dyajqsMNAUktpi7aiml0Fsm4ey8Nh2YwRyTDuTJZ1iJFcFyARqfr5iKH4/qElq80y0FYXGgGRJB+dKJsCdefLw==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.6.14.tgz", + "integrity": "sha512-mDQxylxGGCQSK7tJPkD144J8jWh9IU9ziJMHfB84PKpI/V5ZgqMDnpr2bssTrUaGDqU5e1/z8KcRF+Melhs9pQ==", "dev": true, + "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", "@types/uuid": "^9.0.1", @@ -4818,14 +6814,15 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.8" + "storybook": "^8.6.14" } }, "node_modules/@storybook/addon-backgrounds": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.2.8.tgz", - "integrity": "sha512-OqXGpq8KzWwAAQWPnby/v4ayWuUAB18Twgi6zeb+QNLEQdFnSp7kz6+4mP8ZVg8RS3ACGXD31nnvvlF7GYoJjQ==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.6.14.tgz", + "integrity": "sha512-l9xS8qWe5n4tvMwth09QxH2PmJbCctEvBAc1tjjRasAfrd69f7/uFK4WhwJAstzBTNgTc8VXI4w8ZR97i1sFbg==", "dev": true, + "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", "memoizerific": "^1.11.3", @@ -4836,17 +6833,18 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.8" + "storybook": "^8.6.14" } }, "node_modules/@storybook/addon-controls": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.2.8.tgz", - "integrity": "sha512-adhg68CSFaR/r95rgyKU4ZzWwZz+MU0c4vr9hqrR1UGvg/zl33IZQQzb5j5v3Axo0O31yPMaY6LRty7pOv3+/Q==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.6.14.tgz", + "integrity": "sha512-IiQpkNJdiRyA4Mq9mzjZlvQugL/aE7hNgVxBBGPiIZG6wb6Ht9hNnBYpap5ZXXFKV9p2qVI0FZK445ONmAa+Cw==", "dev": true, + "license": "MIT", "dependencies": { + "@storybook/global": "^5.0.0", "dequal": "^2.0.2", - "lodash": "^4.17.21", "ts-dedent": "^2.0.0" }, "funding": { @@ -4854,27 +6852,22 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.8" + "storybook": "^8.6.14" } }, "node_modules/@storybook/addon-docs": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.2.8.tgz", - "integrity": "sha512-8hqUYYveJjR3e/XdXt0vduA7TxFRIFWgXoa9jN5axa63kqfiHcfkpFYPjM8jCRhsfDIRgdrwe2qxsA0wewO1pA==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.6.14.tgz", + "integrity": "sha512-Obpd0OhAF99JyU5pp5ci17YmpcQtMNgqW2pTXV8jAiiipWpwO++hNDeQmLmlSXB399XjtRDOcDVkoc7rc6JzdQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/core": "^7.24.4", "@mdx-js/react": "^3.0.0", - "@storybook/blocks": "8.2.8", - "@storybook/csf-plugin": "8.2.8", - "@storybook/global": "^5.0.0", - "@storybook/react-dom-shim": "8.2.8", - "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "fs-extra": "^11.1.0", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", - "rehype-external-links": "^3.0.0", - "rehype-slug": "^6.0.0", + "@storybook/blocks": "8.6.14", + "@storybook/csf-plugin": "8.6.14", + "@storybook/react-dom-shim": "8.6.14", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "ts-dedent": "^2.0.0" }, "funding": { @@ -4882,24 +6875,25 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.8" + "storybook": "^8.6.14" } }, "node_modules/@storybook/addon-essentials": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.2.8.tgz", - "integrity": "sha512-NRbFv2ociM1l/Oi/1go/ZC5bUU41n9aKD1DzIbguEKBhUs/TGAES+f5x+7DvYnt3Hvd925/FyTXuMU+vNUeiUA==", - "dev": true, - "dependencies": { - "@storybook/addon-actions": "8.2.8", - "@storybook/addon-backgrounds": "8.2.8", - "@storybook/addon-controls": "8.2.8", - "@storybook/addon-docs": "8.2.8", - "@storybook/addon-highlight": "8.2.8", - "@storybook/addon-measure": "8.2.8", - "@storybook/addon-outline": "8.2.8", - "@storybook/addon-toolbars": "8.2.8", - "@storybook/addon-viewport": "8.2.8", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.6.14.tgz", + "integrity": "sha512-5ZZSHNaW9mXMOFkoPyc3QkoNGdJHETZydI62/OASR0lmPlJ1065TNigEo5dJddmZNn0/3bkE8eKMAzLnO5eIdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@storybook/addon-actions": "8.6.14", + "@storybook/addon-backgrounds": "8.6.14", + "@storybook/addon-controls": "8.6.14", + "@storybook/addon-docs": "8.6.14", + "@storybook/addon-highlight": "8.6.14", + "@storybook/addon-measure": "8.6.14", + "@storybook/addon-outline": "8.6.14", + "@storybook/addon-toolbars": "8.6.14", + "@storybook/addon-viewport": "8.6.14", "ts-dedent": "^2.0.0" }, "funding": { @@ -4907,14 +6901,15 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.8" + "storybook": "^8.6.14" } }, "node_modules/@storybook/addon-highlight": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.2.8.tgz", - "integrity": "sha512-IM1pPx6CCZbHV0bv3oB1qBCGDsr8soq7XLl93tc7mc4hstWSDFfNn7rx4CWycSlCqXlNTKh8cEkbrPrhV9cwbg==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.6.14.tgz", + "integrity": "sha512-4H19OJlapkofiE9tM6K/vsepf4ir9jMm9T+zw5L85blJZxhKZIbJ6FO0TCG9PDc4iPt3L6+aq5B0X29s9zicNQ==", "dev": true, + "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0" }, @@ -4923,18 +6918,19 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.8" + "storybook": "^8.6.14" } }, "node_modules/@storybook/addon-interactions": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.2.8.tgz", - "integrity": "sha512-ggctlrSlK72xMfhviHHRslZF5tr9aHr1VFwCG/tjF7s1lM3S7OGqgHLJpcja/wNREvq9GMEvX95ZSu5NMh5CtA==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.6.14.tgz", + "integrity": "sha512-8VmElhm2XOjh22l/dO4UmXxNOolGhNiSpBcls2pqWSraVh4a670EyYBZsHpkXqfNHo2YgKyZN3C91+9zfH79qQ==", "dev": true, + "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "8.2.8", - "@storybook/test": "8.2.8", + "@storybook/instrumenter": "8.6.14", + "@storybook/test": "8.6.14", "polished": "^4.2.2", "ts-dedent": "^2.2.0" }, @@ -4943,16 +6939,16 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.8" + "storybook": "^8.6.14" } }, "node_modules/@storybook/addon-links": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.2.8.tgz", - "integrity": "sha512-2igEaSdKAFjKjioT6LGdBxZulpbVCzmlmV//sTu3sQiVnnxRjjGFt77sEeLMajrsSvg9DB1RMbDsvJ4FJTzXfQ==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.6.14.tgz", + "integrity": "sha512-DRlXHIyZzOruAZkxmXfVgTF+4d6K27pFcH4cUsm3KT1AXuZbr23lb5iZHpUZoG6lmU85Sru4xCEgewSTXBIe1w==", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/csf": "0.1.11", "@storybook/global": "^5.0.0", "ts-dedent": "^2.0.0" }, @@ -4962,7 +6958,7 @@ }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.2.8" + "storybook": "^8.6.14" }, "peerDependenciesMeta": { "react": { @@ -4971,10 +6967,11 @@ } }, "node_modules/@storybook/addon-measure": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.2.8.tgz", - "integrity": "sha512-oqZiX571F9NNy8o/oVyM1Pe2cJz3WJ/OpL0lVbepHrV4ir1f+SDYZdMI58jGBAtoM52cwFc2ZPbzXKQs7a513A==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.6.14.tgz", + "integrity": "sha512-1Tlyb72NX8aAqm6I6OICsUuGOP6hgnXcuFlXucyhKomPa6j3Eu2vKu561t/f0oGtAK2nO93Z70kVaEh5X+vaGw==", "dev": true, + "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", "tiny-invariant": "^1.3.1" @@ -4984,14 +6981,15 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.8" + "storybook": "^8.6.14" } }, "node_modules/@storybook/addon-outline": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.2.8.tgz", - "integrity": "sha512-Cbk4Z0ojggiXjpbS2c4WUP56yikQdT4O7+8AuBNNjVUHNvJQADWYovi6SvDmrS5dH1iyIkB+4saXMr0syp+BDw==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.6.14.tgz", + "integrity": "sha512-CW857JvN6OxGWElqjlzJO2S69DHf+xO3WsEfT5mT3ZtIjmsvRDukdWfDU9bIYUFyA2lFvYjncBGjbK+I91XR7w==", "dev": true, + "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", "ts-dedent": "^2.0.0" @@ -5001,27 +6999,29 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.8" + "storybook": "^8.6.14" } }, "node_modules/@storybook/addon-toolbars": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.2.8.tgz", - "integrity": "sha512-k64G3FUpX3H/mhJ7AG1r/4Drsk6cdUtxI3yVdgWb7O3Ka7v/OFZexRXRSiV03n5q/kaqVKDu96Tuog57+7EB4w==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.6.14.tgz", + "integrity": "sha512-W/wEXT8h3VyZTVfWK/84BAcjAxTdtRiAkT2KAN0nbSHxxB5KEM1MjKpKu2upyzzMa3EywITqbfy4dP6lpkVTwQ==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.8" + "storybook": "^8.6.14" } }, "node_modules/@storybook/addon-viewport": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.2.8.tgz", - "integrity": "sha512-/JZeIgB33yhryUvWaNO+3t9akcS8nGLyAUmlljPFr3LUDDYrO/0H9tE4CgjLqtwCXBq3k3s0HLzEJOrKI9Tmbw==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.6.14.tgz", + "integrity": "sha512-gNzVQbMqRC+/4uQTPI2ZrWuRHGquTMZpdgB9DrD88VTEjNudP+J6r8myLfr2VvGksBbUMHkGHMXHuIhrBEnXYA==", "dev": true, + "license": "MIT", "dependencies": { "memoizerific": "^1.11.3" }, @@ -5030,244 +7030,119 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.8" - } - }, - "node_modules/@storybook/blocks": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.2.8.tgz", - "integrity": "sha512-AHBXu9s73Xv9r1JageIL7C4eGf5XYEByai4Y6NYQsE+jF7b7e8oaSUoLW6fWSyLGuqvjRx+5P7GMNI2K1EngBA==", - "dev": true, - "dependencies": { - "@storybook/csf": "0.1.11", - "@storybook/global": "^5.0.0", - "@storybook/icons": "^1.2.5", - "@types/lodash": "^4.14.167", - "color-convert": "^2.0.1", - "dequal": "^2.0.2", - "lodash": "^4.17.21", - "markdown-to-jsx": "^7.4.5", - "memoizerific": "^1.11.3", - "polished": "^4.2.2", - "react-colorful": "^5.1.2", - "telejson": "^7.2.0", - "ts-dedent": "^2.0.0", - "util-deprecate": "^1.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.2.8" - }, - "peerDependenciesMeta": { - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@storybook/builder-vite": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-8.2.8.tgz", - "integrity": "sha512-p9EJfZkX9ZsVi1Qr3jYyCJaZZ/2pt0KVTOYnDzNnhi3P/suU6O3Lp/YCV5+KOfAmlg2IgTND0EidqZinqPIBSg==", - "dev": true, - "dependencies": { - "@storybook/csf-plugin": "8.2.8", - "@types/find-cache-dir": "^3.2.1", - "browser-assert": "^1.2.1", - "es-module-lexer": "^1.5.0", - "express": "^4.19.2", - "find-cache-dir": "^3.0.0", - "fs-extra": "^11.1.0", - "magic-string": "^0.30.0", - "ts-dedent": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "@preact/preset-vite": "*", - "storybook": "^8.2.8", - "typescript": ">= 4.3.x", - "vite": "^4.0.0 || ^5.0.0", - "vite-plugin-glimmerx": "*" - }, - "peerDependenciesMeta": { - "@preact/preset-vite": { - "optional": true - }, - "typescript": { - "optional": true - }, - "vite-plugin-glimmerx": { - "optional": true - } - } - }, - "node_modules/@storybook/codemod": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/codemod/-/codemod-8.2.8.tgz", - "integrity": "sha512-dqD4j6JTsS8BM2y1yHBIe5fHvsGM08qpJQXkE77aXJIm5UfUeuWC7rY0xAheX3fU5G98l3BJk0ySUGspQL5pNg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.24.4", - "@babel/preset-env": "^7.24.4", - "@babel/types": "^7.24.0", - "@storybook/core": "8.2.8", - "@storybook/csf": "0.1.11", - "@types/cross-spawn": "^6.0.2", - "cross-spawn": "^7.0.3", - "globby": "^14.0.1", - "jscodeshift": "^0.15.1", - "lodash": "^4.17.21", - "prettier": "^3.1.1", - "recast": "^0.23.5", - "tiny-invariant": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/codemod/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@storybook/codemod/node_modules/globby": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", - "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", - "dev": true, - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/codemod/node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@storybook/codemod/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "storybook": "^8.6.14" + } + }, + "node_modules/@storybook/blocks": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.6.14.tgz", + "integrity": "sha512-rBMHAfA39AGHgkrDze4RmsnQTMw1ND5fGWobr9pDcJdnDKWQWNRD7Nrlxj0gFlN3n4D9lEZhWGdFrCbku7FVAQ==", "dev": true, - "engines": { - "node": ">=14.16" + "license": "MIT", + "dependencies": { + "@storybook/icons": "^1.2.12", + "ts-dedent": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "storybook": "^8.6.14" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } } }, - "node_modules/@storybook/codemod/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/@storybook/builder-vite": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-8.6.14.tgz", + "integrity": "sha512-ajWYhy32ksBWxwWHrjwZzyC0Ii5ZTeu5lsqA95Q/EQBB0P5qWlHWGM3AVyv82Mz/ND03ebGy123uVwgf6olnYQ==", "dev": true, + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" + "@storybook/csf-plugin": "8.6.14", + "browser-assert": "^1.2.1", + "ts-dedent": "^2.0.0" }, - "bin": { - "node-which": "bin/node-which" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" }, - "engines": { - "node": ">= 8" + "peerDependencies": { + "storybook": "^8.6.14", + "vite": "^4.0.0 || ^5.0.0 || ^6.0.0" } }, "node_modules/@storybook/components": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.2.8.tgz", - "integrity": "sha512-d4fI7Clogx4rgLAM7vZVr9L2EFtAkGXvpkZFuB0H0eyYaxZSbuZYvDCzRglQGQGsqD8IA8URTgPVSXC3L3k6Bg==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.6.14.tgz", + "integrity": "sha512-HNR2mC5I4Z5ek8kTrVZlIY/B8gJGs5b3XdZPBPBopTIN6U/YHXiDyOjY3JlaS4fSG1fVhp/Qp1TpMn1w/9m1pw==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.8" + "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" } }, "node_modules/@storybook/core": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/core/-/core-8.2.8.tgz", - "integrity": "sha512-Wwm/Txh87hbxqU9OaxXwdGAmdRBjDn7rlZEPjNBx0tt43SQ11fKambY7nVWrWuw46YsJpdF9V/PQr4noNEXXEA==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-8.6.14.tgz", + "integrity": "sha512-1P/w4FSNRqP8j3JQBOi3yGt8PVOgSRbP66Ok520T78eJBeqx9ukCfl912PQZ7SPbW3TIunBwLXMZOjZwBB/JmA==", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/csf": "0.1.11", - "@types/express": "^4.17.21", - "@types/node": "^18.0.0", + "@storybook/theming": "8.6.14", + "better-opn": "^3.0.2", "browser-assert": "^1.2.1", - "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0", + "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0 || ^0.24.0 || ^0.25.0", "esbuild-register": "^3.5.0", - "express": "^4.19.2", + "jsdoc-type-pratt-parser": "^4.0.0", "process": "^0.11.10", "recast": "^0.23.5", - "util": "^0.12.4", + "semver": "^7.6.2", + "util": "^0.12.5", "ws": "^8.2.3" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" - } - }, - "node_modules/@storybook/core/node_modules/@types/node": { - "version": "18.19.43", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.43.tgz", - "integrity": "sha512-Mw/YlgXnyJdEwLoFv2dpuJaDFriX+Pc+0qOBJ57jC1H6cDxIj2xc5yUrdtArDVG0m+KV6622a4p2tenEqB3C/g==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" + }, + "peerDependencies": { + "prettier": "^2 || ^3" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + } } }, "node_modules/@storybook/csf": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.11.tgz", - "integrity": "sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg==", + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.13.tgz", + "integrity": "sha512-7xOOwCLGB3ebM87eemep89MYRFTko+D8qE7EdAAq74lgdqRR5cOUtYWJLjO2dLtP94nqoOdHJo6MdLLKzg412Q==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^2.19.0" } }, "node_modules/@storybook/csf-plugin": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.2.8.tgz", - "integrity": "sha512-CEHY7xloBPE8d8h0wg2AM2kRaZkHK8/vkYMNZPbccqAYj6PQIdTuOcXZIBAhAGydyIBULZmsmmsASxM9RO5fKA==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.6.14.tgz", + "integrity": "sha512-dErtc9teAuN+eelN8FojzFE635xlq9cNGGGEu0WEmMUQ4iJ8pingvBO1N8X3scz4Ry7KnxX++NNf3J3gpxS8qQ==", "dev": true, + "license": "MIT", "dependencies": { "unplugin": "^1.3.1" }, @@ -5276,7 +7151,7 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.8" + "storybook": "^8.6.14" } }, "node_modules/@storybook/global": { @@ -5286,89 +7161,78 @@ "dev": true }, "node_modules/@storybook/icons": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-1.2.10.tgz", - "integrity": "sha512-310apKdDcjbbX2VSLWPwhEwAgjxTzVagrwucVZIdGPErwiAppX8KvBuWZgPo+rQLVrtH8S+pw1dbUwjcE6d7og==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-1.4.0.tgz", + "integrity": "sha512-Td73IeJxOyalzvjQL+JXx72jlIYHgs+REaHiREOqfpo3A2AYYG71AUbcv+lg7mEDIweKVCxsMQ0UKo634c8XeA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.0.0" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" } }, "node_modules/@storybook/instrumenter": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.2.8.tgz", - "integrity": "sha512-6Gk3CzoYQQXBXpW86PKqYSozOB/C9dSYiFvwPRo4XsEfjARDi8yglqkbOtG+FVqKDL66I5krcveB8bTWigqc9g==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.6.14.tgz", + "integrity": "sha512-iG4MlWCcz1L7Yu8AwgsnfVAmMbvyRSk700Mfy2g4c8y5O+Cv1ejshE1LBBsCwHgkuqU0H4R0qu4g23+6UnUemQ==", "dev": true, + "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", - "@vitest/utils": "^1.3.1", - "util": "^0.12.4" + "@vitest/utils": "^2.1.1" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.8" + "storybook": "^8.6.14" } }, "node_modules/@storybook/manager-api": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.2.8.tgz", - "integrity": "sha512-wzfRu3vrD9a99pN3W/RJXVtgNGNsy9PyvetjUfgQVtUZ9eXXDuA+tM7ITTu3xvONtV/rT2YEBwzOpowa+r1GNQ==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.6.14.tgz", + "integrity": "sha512-ez0Zihuy17udLbfHZQXkGqwtep0mSGgHcNzGN7iZrMP1m+VmNo+7aGCJJdvXi7+iU3yq8weXSQFWg5DqWgLS7g==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.8" + "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" } }, "node_modules/@storybook/preview-api": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.2.8.tgz", - "integrity": "sha512-BDt1lo5oEWAaTVCsl6JUHCBFtIWI/Za4qvIdn2Lx9eCA+Ae6IDliosmu273DcvGD9R4OPF6sm1dML3TXILGGcA==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.6.14.tgz", + "integrity": "sha512-2GhcCd4dNMrnD7eooEfvbfL4I83qAqEyO0CO7JQAmIO6Rxb9BsOLLI/GD5HkvQB73ArTJ+PT50rfaO820IExOQ==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.8" + "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" } }, "node_modules/@storybook/react": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-8.2.8.tgz", - "integrity": "sha512-Nln0DDTQ930P4J+SEkWbLSgaDe8eDd5gP6h3l4b5RwT7sRuSyHtTtYHPCnU9U7sLQ3AbMsclgtJukHXDitlccg==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-8.6.14.tgz", + "integrity": "sha512-BOepx5bBFwl/CPI+F+LnmMmsG1wQYmrX/UQXgUbHQUU9Tj7E2ndTnNbpIuSLc8IrM03ru+DfwSg1Co3cxWtT+g==", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/components": "^8.2.8", + "@storybook/components": "8.6.14", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "^8.2.8", - "@storybook/preview-api": "^8.2.8", - "@storybook/react-dom-shim": "8.2.8", - "@storybook/theming": "^8.2.8", - "@types/escodegen": "^0.0.6", - "@types/estree": "^0.0.51", - "@types/node": "^18.0.0", - "acorn": "^7.4.1", - "acorn-jsx": "^5.3.1", - "acorn-walk": "^7.2.0", - "escodegen": "^2.1.0", - "html-tags": "^3.1.0", - "lodash": "^4.17.21", - "prop-types": "^15.7.2", - "react-element-to-jsx-string": "^15.0.0", - "semver": "^7.3.7", - "ts-dedent": "^2.0.0", - "type-fest": "~2.19", - "util-deprecate": "^1.0.2" + "@storybook/manager-api": "8.6.14", + "@storybook/preview-api": "8.6.14", + "@storybook/react-dom-shim": "8.6.14", + "@storybook/theming": "8.6.14" }, "engines": { "node": ">=18.0.0" @@ -5378,22 +7242,27 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { + "@storybook/test": "8.6.14", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.2.8", + "storybook": "^8.6.14", "typescript": ">= 4.2.x" }, "peerDependenciesMeta": { + "@storybook/test": { + "optional": true + }, "typescript": { "optional": true } } }, "node_modules/@storybook/react-dom-shim": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.2.8.tgz", - "integrity": "sha512-2my3dGBOpBe30+FsSdQOIYCfxMyT68+SEq0qcXxfuax0BkhhJnZLpwvpqOna6EOVTgBD+Tk1TKmjpGwxuwp4rg==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.6.14.tgz", + "integrity": "sha512-0hixr3dOy3f3M+HBofp3jtMQMS+sqzjKNgl7Arfuj3fvjmyXOks/yGjDImySR4imPtEllvPZfhiQNlejheaInw==", "dev": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" @@ -5401,19 +7270,20 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.2.8" + "storybook": "^8.6.14" } }, "node_modules/@storybook/react-vite": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-8.2.8.tgz", - "integrity": "sha512-xzXWyhFnLoFtJGgj8F5j/33QB4YTyEX61On6kolt7WFAjRFaUWJGYUC8cPPL4PNwsdouyCrnHvlJj77AvFlvfQ==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-8.6.14.tgz", + "integrity": "sha512-FZU0xMPxa4/TO87FgcWwappOxLBHZV5HSRK5K+2bJD7rFJAoNorbHvB4Q1zvIAk7eCMjkr2GPCPHx9PRB9vJFg==", "dev": true, + "license": "MIT", "dependencies": { - "@joshwooding/vite-plugin-react-docgen-typescript": "0.3.1", + "@joshwooding/vite-plugin-react-docgen-typescript": "0.5.0", "@rollup/pluginutils": "^5.0.2", - "@storybook/builder-vite": "8.2.8", - "@storybook/react": "8.2.8", + "@storybook/builder-vite": "8.6.14", + "@storybook/react": "8.6.14", "find-up": "^5.0.0", "magic-string": "^0.30.0", "react-docgen": "^7.0.0", @@ -5428,10 +7298,16 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { + "@storybook/test": "8.6.14", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.2.8", - "vite": "^4.0.0 || ^5.0.0" + "storybook": "^8.6.14", + "vite": "^4.0.0 || ^5.0.0 || ^6.0.0" + }, + "peerDependenciesMeta": { + "@storybook/test": { + "optional": true + } } }, "node_modules/@storybook/react-vite/node_modules/strip-bom": { @@ -5457,191 +7333,35 @@ "node": ">=6" } }, - "node_modules/@storybook/react/node_modules/@types/node": { - "version": "18.19.43", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.43.tgz", - "integrity": "sha512-Mw/YlgXnyJdEwLoFv2dpuJaDFriX+Pc+0qOBJ57jC1H6cDxIj2xc5yUrdtArDVG0m+KV6622a4p2tenEqB3C/g==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, "node_modules/@storybook/test": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.2.8.tgz", - "integrity": "sha512-Lbt4DHP8WhnakTPw981kP85DeoONKN+zVLjFPa5ptllyT+jazZANjIdGhNUlBdIzOw3oyDXhGlWIdtqztS3pSA==", + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.6.14.tgz", + "integrity": "sha512-GkPNBbbZmz+XRdrhMtkxPotCLOQ1BaGNp/gFZYdGDk2KmUWBKmvc5JxxOhtoXM2703IzNFlQHSSNnhrDZYuLlw==", "dev": true, + "license": "MIT", "dependencies": { - "@storybook/csf": "0.1.11", - "@storybook/instrumenter": "8.2.8", - "@testing-library/dom": "10.1.0", - "@testing-library/jest-dom": "6.4.5", + "@storybook/global": "^5.0.0", + "@storybook/instrumenter": "8.6.14", + "@testing-library/dom": "10.4.0", + "@testing-library/jest-dom": "6.5.0", "@testing-library/user-event": "14.5.2", - "@vitest/expect": "1.6.0", - "@vitest/spy": "1.6.0", - "util": "^0.12.4" + "@vitest/expect": "2.0.5", + "@vitest/spy": "2.0.5" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.8" + "storybook": "^8.6.14" } }, "node_modules/@storybook/test/node_modules/@testing-library/dom": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.1.0.tgz", - "integrity": "sha512-wdsYKy5zupPyLCW2Je5DLHSxSfbIp6h80WoHOQc+RPtmPGA52O9x5MJEkv92Sjonpq+poOAtUKhh1kBGAXBrNA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.3.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@storybook/test/node_modules/@testing-library/jest-dom": { - "version": "6.4.5", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.5.tgz", - "integrity": "sha512-AguB9yvTXmCnySBP1lWjfNNUwpbElsaQ567lt2VdGqAdHtpieLgjmcVyv1q7PMIvLbgpDdkWV5Ydv3FEejyp2A==", - "dev": true, - "dependencies": { - "@adobe/css-tools": "^4.3.2", - "@babel/runtime": "^7.9.2", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.6.3", - "lodash": "^4.17.21", - "redent": "^3.0.0" - }, - "engines": { - "node": ">=14", - "npm": ">=6", - "yarn": ">=1" - }, - "peerDependencies": { - "@jest/globals": ">= 28", - "@types/bun": "latest", - "@types/jest": ">= 28", - "jest": ">= 28", - "vitest": ">= 0.32" - }, - "peerDependenciesMeta": { - "@jest/globals": { - "optional": true - }, - "@types/bun": { - "optional": true - }, - "@types/jest": { - "optional": true - }, - "jest": { - "optional": true - }, - "vitest": { - "optional": true - } - } - }, - "node_modules/@storybook/test/node_modules/@testing-library/jest-dom/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/test/node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", - "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", - "dev": true - }, - "node_modules/@storybook/test/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@storybook/test/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/test/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/theming": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.2.8.tgz", - "integrity": "sha512-jt5oUO82LN3z5aygNdHucBZcErSicIAwzhR5Kz9E/C9wUbhyZhbWsWyhpZaytu8LJUj2YWAIPS8kq/jGx+qLZA==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.2.8" - } - }, - "node_modules/@testing-library/dom": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -5656,26 +7376,12 @@ "node": ">=18" } }, - "node_modules/@testing-library/dom/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/dom/node_modules/chalk": { + "node_modules/@storybook/test/node_modules/@testing-library/dom/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5687,35 +7393,21 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@testing-library/dom/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/dom/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/@storybook/test/node_modules/@testing-library/dom/node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/@testing-library/jest-dom": { - "version": "6.4.8", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.4.8.tgz", - "integrity": "sha512-JD0G+Zc38f5MBHA4NgxQMR5XtO5Jx9g86jqturNTt2WUfRmLDIY7iKkWHDCCTiDuFMre6nxAD5wHw9W5kI4rGw==", + "node_modules/@storybook/test/node_modules/@testing-library/jest-dom": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz", + "integrity": "sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==", "dev": true, + "license": "MIT", "dependencies": { "@adobe/css-tools": "^4.4.0", - "@babel/runtime": "^7.9.2", "aria-query": "^5.0.0", "chalk": "^3.0.0", "css.escape": "^1.5.1", @@ -5729,11 +7421,26 @@ "yarn": ">=1" } }, - "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { + "node_modules/@storybook/test/node_modules/@testing-library/user-event": { + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", + "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@storybook/test/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -5744,11 +7451,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "node_modules/@storybook/test/node_modules/chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5757,26 +7465,29 @@ "node": ">=8" } }, - "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "node_modules/@storybook/test/node_modules/dom-accessibility-api": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/@testing-library/jest-dom/node_modules/has-flag": { + "node_modules/@storybook/test/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@testing-library/jest-dom/node_modules/supports-color": { + "node_modules/@storybook/test/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -5784,11 +7495,72 @@ "node": ">=8" } }, + "node_modules/@storybook/theming": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.6.14.tgz", + "integrity": "sha512-r4y+LsiB37V5hzpQo+BM10PaCsp7YlZ0YcZzQP1OCkPlYXmUAFy2VvDKaFRpD8IeNPKug2u4iFm/laDEbs03dg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.1.tgz", + "integrity": "sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "picocolors": "1.1.1", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.9.1.tgz", + "integrity": "sha512-zIcONa+hVtVSSep9UT3jZ5rizo2BsxgyDYU7WFD5eICBE7no3881HGeb/QkGfsJs6JTkY1aQhT7rIPC7e+0nnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "picocolors": "^1.1.1", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true + }, "node_modules/@testing-library/react": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.0.0.tgz", - "integrity": "sha512-guuxUKRWQ+FgNX0h0NS0FIq3Q3uLtWVpBzcLOggmfMoUpgBnzBzvLLd4fbm6yS8ydJd94cIfY4yP9qUQjM2KwQ==", + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-16.3.0.tgz", + "integrity": "sha512-kFSyxiEDwv1WLl2fgsq6pPBbw5aWKrsY2/noi1Id0TK0UParSF62oFQFGHXIyaG4pp2tEub/Zlel+fjjZILDsw==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.5" }, @@ -5797,10 +7569,10 @@ }, "peerDependencies": { "@testing-library/dom": "^10.0.0", - "@types/react": "^18.0.0", - "@types/react-dom": "^18.0.0", - "react": "^18.0.0", - "react-dom": "^18.0.0" + "@types/react": "^18.0.0 || ^19.0.0", + "@types/react-dom": "^18.0.0 || ^19.0.0", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" }, "peerDependenciesMeta": { "@types/react": { @@ -5812,10 +7584,11 @@ } }, "node_modules/@testing-library/user-event": { - "version": "14.5.2", - "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", - "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", + "version": "14.6.1", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.6.1.tgz", + "integrity": "sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==", "dev": true, + "license": "MIT", "engines": { "node": ">=12", "npm": ">=6" @@ -5904,34 +7677,6 @@ "@babel/types": "^7.20.7" } }, - "node_modules/@types/body-parser": { - "version": "1.19.5", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", - "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", - "dev": true, - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/child-process-promise": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/@types/child-process-promise/-/child-process-promise-2.2.6.tgz", - "integrity": "sha512-g0pOHijr6Trug43D2bV0PLSIsSHa/xHEES2HeX5BAlduq1vW0nZcq27Zeud5lgmNB+kPYYVqiMap32EHGTco/w==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.38", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", - "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/cookie": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", @@ -5942,6 +7687,7 @@ "resolved": "https://registry.npmjs.org/@types/cross-spawn/-/cross-spawn-6.0.6.tgz", "integrity": "sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -6250,6 +7996,16 @@ "@types/d3-selection": "*" } }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, "node_modules/@types/del": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/del/-/del-4.0.0.tgz", @@ -6260,23 +8016,12 @@ "del": "*" } }, - "node_modules/@types/emscripten": { - "version": "1.39.13", - "resolved": "https://registry.npmjs.org/@types/emscripten/-/emscripten-1.39.13.tgz", - "integrity": "sha512-cFq+fO/isvhvmuP/+Sl4K4jtU6E23DoivtbO4r50e3odaxAiVdbfSYRDdJ4gCdxx+3aRjhphS5ZMwIH4hFy/Cw==", - "dev": true - }, - "node_modules/@types/escodegen": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/@types/escodegen/-/escodegen-0.0.6.tgz", - "integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==", - "dev": true - }, "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" }, "node_modules/@types/expect": { "version": "1.20.4", @@ -6284,36 +8029,6 @@ "integrity": "sha512-Q5Vn3yjTDyCMV50TB6VRIbQNxSE4OmZR86VSbGaNpfUolm0iePBB4KdEEHmxoY5sT2+2DIvXW0rvMDP2nHZ4Mg==", "dev": true }, - "node_modules/@types/express": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", - "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", - "dev": true, - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.19.5", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", - "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*", - "@types/send": "*" - } - }, - "node_modules/@types/find-cache-dir": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@types/find-cache-dir/-/find-cache-dir-3.2.1.tgz", - "integrity": "sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==", - "dev": true - }, "node_modules/@types/fs-extra": { "version": "11.0.4", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-11.0.4.tgz", @@ -6330,16 +8045,6 @@ "integrity": "sha512-bmrNrgKMOhM3WsafmbGmC+6dsF2Z308vLFsQ3a/bT8X8Sv5clVYpPars/UPq+sAaJP+5OoLAYgwbkS5QEJdLUQ==", "dev": true }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, "node_modules/@types/glob-stream": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@types/glob-stream/-/glob-stream-8.0.2.tgz", @@ -6382,15 +8087,6 @@ "gulp-replace": "*" } }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dev": true, - "dependencies": { - "@types/unist": "*" - } - }, "node_modules/@types/hoist-non-react-statics": { "version": "3.3.5", "resolved": "https://registry.npmjs.org/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.5.tgz", @@ -6401,12 +8097,6 @@ "hoist-non-react-statics": "^3.3.0" } }, - "node_modules/@types/http-errors": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", - "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", - "dev": true - }, "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", @@ -6479,17 +8169,6 @@ "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", "dev": true }, - "node_modules/@types/jsdom": { - "version": "20.0.1", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz", - "integrity": "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^7.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", @@ -6511,64 +8190,35 @@ "@types/node": "*" } }, - "node_modules/@types/lodash": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.0.tgz", - "integrity": "sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==", - "dev": true + "node_modules/@types/katex": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@types/katex/-/katex-0.16.7.tgz", + "integrity": "sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==", + "dev": true, + "license": "MIT" }, "node_modules/@types/mdx": { "version": "2.0.13", "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", - "dev": true - }, - "node_modules/@types/mime": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", - "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true - }, - "node_modules/@types/mute-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", - "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", - "dependencies": { - "@types/node": "*" - } + "dev": true, + "license": "MIT" }, - "node_modules/@types/nanoid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/nanoid/-/nanoid-3.0.0.tgz", - "integrity": "sha512-UXitWSmXCwhDmAKe7D3hNQtQaHeHt5L8LO1CB8GF8jlYVzOv5cBWDNqiJ+oPEWrWei3i3dkZtHY/bUtd0R/uOQ==", - "deprecated": "This is a stub types definition. nanoid provides its own type definitions, so you do not need this installed.", + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", "dev": true, - "dependencies": { - "nanoid": "*" - } + "license": "MIT" }, "node_modules/@types/node": { - "version": "20.14.14", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.14.tgz", - "integrity": "sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@types/node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==", + "version": "22.17.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.17.2.tgz", + "integrity": "sha512-gL6z5N9Jm9mhY+U2KXZpteb+09zyffliRkZyZOHODGATyC5B1Jt/7TzuuiLkFsSUMLbS1OLmlj/E+/3KF4Q/4w==", "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "*", - "form-data": "^4.0.0" + "undici-types": "~6.21.0" } }, "node_modules/@types/parse-json": { @@ -6583,38 +8233,57 @@ "integrity": "sha512-Yll76ZHikRFCyz/pffKGjrCwe/le2CDwOP5F210KQo27kpRE46U2rDnzikNlVn6/ezH3Mhn46bJMTfeVTtcYMg==", "dev": true }, + "node_modules/@types/postcss-modules-local-by-default": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.2.tgz", + "integrity": "sha512-CtYCcD+L+trB3reJPny+bKWKMzPfxEyQpKIwit7kErnOexf5/faaGpkFy4I5AwbV4hp1sk7/aTg0tt0B67VkLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/@types/postcss-modules-scope": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/postcss-modules-scope/-/postcss-modules-scope-3.0.4.tgz", + "integrity": "sha512-//ygSisVq9kVI0sqx3UPLzWIMCmtSVrzdljtuaAEJtGoGnpjBikZ2sXO5MpH9SnWX9HRfXxHifDAXcQjupWnIQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss": "^8.0.0" + } + }, "node_modules/@types/prop-types": { "version": "15.7.11", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.11.tgz", "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==", "dev": true }, - "node_modules/@types/qs": { - "version": "6.9.15", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz", - "integrity": "sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==", - "dev": true - }, - "node_modules/@types/range-parser": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", - "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", - "dev": true + "node_modules/@types/proper-lockfile": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@types/proper-lockfile/-/proper-lockfile-4.1.4.tgz", + "integrity": "sha512-uo2ABllncSqg9F1D4nugVl9v93RmjxF6LJzQLMLDdPaXCUIDPeOJ21Gbqi43xNKzBi/WQ0Q0dICqufzQbMjipQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/retry": "*" + } }, "node_modules/@types/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.1.tgz", - "integrity": "sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==", + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", "dev": true, + "license": "MIT", "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" } }, "node_modules/@types/react-dom": { - "version": "18.3.0", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.0.tgz", - "integrity": "sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", "dev": true, "dependencies": { "@types/react": "*" @@ -6626,6 +8295,13 @@ "integrity": "sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==", "dev": true }, + "node_modules/@types/retry": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.5.tgz", + "integrity": "sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/sarif": { "version": "2.1.7", "resolved": "https://registry.npmjs.org/@types/sarif/-/sarif-2.1.7.tgz", @@ -6638,27 +8314,6 @@ "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", "dev": true }, - "node_modules/@types/send": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", - "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", - "dev": true, - "dependencies": { - "@types/mime": "^1", - "@types/node": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.7", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", - "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", - "dev": true, - "dependencies": { - "@types/http-errors": "*", - "@types/node": "*", - "@types/send": "*" - } - }, "node_modules/@types/shimmer": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.0.5.tgz", @@ -6716,9 +8371,9 @@ } }, "node_modules/@types/stylis": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.0.tgz", - "integrity": "sha512-n4sx2bqL0mW1tvDf/loQ+aMX7GQD3lc3fkCMC55VFNDu/vBOabO+LTIeXKM14xK0ppk5TUGcWRjiSpIlUpghKw==" + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", + "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==" }, "node_modules/@types/tar-stream": { "version": "3.1.3", @@ -6747,8 +8402,13 @@ "node_modules/@types/tough-cookie": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "dev": true + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT" }, "node_modules/@types/undertaker": { "version": "1.2.11", @@ -6768,10 +8428,11 @@ "dev": true }, "node_modules/@types/unist": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", - "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", - "dev": true + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "dev": true, + "license": "MIT" }, "node_modules/@types/uuid": { "version": "9.0.7", @@ -6796,202 +8457,79 @@ "dev": true, "dependencies": { "@types/glob-stream": "*", - "@types/node": "*", - "@types/vinyl": "*" - } - }, - "node_modules/@types/vscode": { - "version": "1.85.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.85.0.tgz", - "integrity": "sha512-CF/RBon/GXwdfmnjZj0WTUMZN5H6YITOfBCP4iEZlOtVQXuzw6t7Le7+cR+7JzdMrnlm7Mfp49Oj2TuSXIWo3g==", - "dev": true - }, - "node_modules/@types/wrap-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", - "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==" - }, - "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true - }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", - "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.5.0.tgz", - "integrity": "sha512-HpqNTH8Du34nLxbKgVMGljZMG0rJd2O9ecvr2QLYp+7512ty1j42KnsFwspPXg1Vh8an9YImf6CokUBltisZFQ==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "7.5.0", - "@typescript-eslint/type-utils": "7.5.0", - "@typescript-eslint/utils": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0", - "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": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.5.0.tgz", - "integrity": "sha512-Z1r7uJY0MDeUlql9XJ6kRVgk/sP11sr3HKXn268HZyqL7i4cEfrdFuSSY/0tUqT37l5zT0tJOsuDP16kio85iA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "@types/node": "*", + "@types/vinyl": "*" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.5.0.tgz", - "integrity": "sha512-tv5B4IHeAdhR7uS4+bf8Ov3k793VEVHd45viRRkehIUZxm0WF82VPiLgHzA/Xl4TGPg1ZD49vfxBKFPecD5/mg==", + "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==", "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } + "license": "MIT" }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.5.0.tgz", - "integrity": "sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==", + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", "dev": true, "dependencies": { - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@types/yargs-parser": "*" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.5.0.tgz", - "integrity": "sha512-3vZl9u0R+/FLQcpy2EHyRGNqAS/ofJ3Ji8aebilfJe+fobK8+LbIFmrHciLVDxjDoONmufDcnVSF38KwMEOjzw==", + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "7.5.0", - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/typescript-estree": "7.5.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" + "@types/node": "*" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.5.0.tgz", - "integrity": "sha512-mcuHM/QircmA6O7fy6nn2w/3ditQkj+SgtOc8DW3uQ10Yfj42amm2i+6F2K4YAOPNNTmE6iM1ynM6lrSwdendA==", + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.45.0.tgz", + "integrity": "sha512-HC3y9CVuevvWCl/oyZuI47dOeDF9ztdMEfMH8/DW/Mhwa9cCLnK1oD7JoTVGW/u7kFzNZUKUoyJEqkaJh5y3Wg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.5.0", - "eslint-visitor-keys": "^3.4.1" + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.45.0", + "@typescript-eslint/type-utils": "8.45.0", + "@typescript-eslint/utils": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.45.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 4" } }, "node_modules/@typescript-eslint/experimental-utils": { @@ -7136,290 +8674,210 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.5.0.tgz", - "integrity": "sha512-cj+XGhNujfD2/wzR1tabNsidnYRaFfEkcULdcIyVBYcXjBvBKOes+mpMBP7hMpOyk+gBcfXsrg4NBGAStQyxjQ==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.45.0.tgz", + "integrity": "sha512-TGf22kon8KW+DeKaUmOibKWktRY8b2NSAZNdtWh798COm1NWx8+xJ6iFBtk3IvLdv6+LGLJLRlyhrhEDZWargQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "7.5.0", - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/typescript-estree": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0", + "@typescript-eslint/scope-manager": "8.45.0", + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/typescript-estree": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.0", "debug": "^4.3.4" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.5.0.tgz", - "integrity": "sha512-Z1r7uJY0MDeUlql9XJ6kRVgk/sP11sr3HKXn268HZyqL7i4cEfrdFuSSY/0tUqT37l5zT0tJOsuDP16kio85iA==", + "node_modules/@typescript-eslint/project-service": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.38.0.tgz", + "integrity": "sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0" + "@typescript-eslint/tsconfig-utils": "^8.38.0", + "@typescript-eslint/types": "^8.38.0", + "debug": "^4.3.4" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.5.0.tgz", - "integrity": "sha512-tv5B4IHeAdhR7uS4+bf8Ov3k793VEVHd45viRRkehIUZxm0WF82VPiLgHzA/Xl4TGPg1ZD49vfxBKFPecD5/mg==", - "dev": true, - "engines": { - "node": "^18.18.0 || >=20.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.5.0.tgz", - "integrity": "sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.45.0.tgz", + "integrity": "sha512-clmm8XSNj/1dGvJeO6VGH7EUSeA0FMs+5au/u3lrA3KfG8iJ4u8ym9/j2tTEoacAffdW1TVUzXO30W1JTJS7dA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.5.0.tgz", - "integrity": "sha512-mcuHM/QircmA6O7fy6nn2w/3ditQkj+SgtOc8DW3uQ10Yfj42amm2i+6F2K4YAOPNNTmE6iM1ynM6lrSwdendA==", + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.38.0.tgz", + "integrity": "sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==", "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.5.0", - "eslint-visitor-keys": "^3.4.1" - }, + "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/parser/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "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/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.5.0.tgz", - "integrity": "sha512-A021Rj33+G8mx2Dqh0nMO9GyjjIBK3MqgVgZ2qlKf6CJy51wY/lkkFqq3TqqnH34XyAHUkq27IjlUkWlQRpLHw==", + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.45.0.tgz", + "integrity": "sha512-bpjepLlHceKgyMEPglAeULX1vixJDgaKocp0RVJ5u4wLJIMNuKtUXIczpJCPcn2waII0yuvks/5m5/h3ZQKs0A==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.5.0", - "@typescript-eslint/utils": "7.5.0", + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/typescript-estree": "8.45.0", + "@typescript-eslint/utils": "8.45.0", "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.5.0.tgz", - "integrity": "sha512-Z1r7uJY0MDeUlql9XJ6kRVgk/sP11sr3HKXn268HZyqL7i4cEfrdFuSSY/0tUqT37l5zT0tJOsuDP16kio85iA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.5.0.tgz", - "integrity": "sha512-tv5B4IHeAdhR7uS4+bf8Ov3k793VEVHd45viRRkehIUZxm0WF82VPiLgHzA/Xl4TGPg1ZD49vfxBKFPecD5/mg==", + "node_modules/@typescript-eslint/types": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.45.0.tgz", + "integrity": "sha512-WugXLuOIq67BMgQInIxxnsSyRLFxdkJEJu8r4ngLR56q/4Q5LrbfkFRH27vMTjxEK8Pyz7QfzuZe/G15qQnVRA==", "dev": true, + "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "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/node_modules/@typescript-eslint/typescript-estree": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.5.0.tgz", - "integrity": "sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.45.0.tgz", + "integrity": "sha512-GfE1NfVbLam6XQ0LcERKwdTTPlLvHvXXhOeUGC1OXi4eQBoyy1iVsW+uzJ/J9jtCz6/7GCQ9MtrQ0fml/jWCnA==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/visitor-keys": "7.5.0", + "@typescript-eslint/project-service": "8.45.0", + "@typescript-eslint/tsconfig-utils": "8.45.0", + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/visitor-keys": "8.45.0", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.5.0.tgz", - "integrity": "sha512-3vZl9u0R+/FLQcpy2EHyRGNqAS/ofJ3Ji8aebilfJe+fobK8+LbIFmrHciLVDxjDoONmufDcnVSF38KwMEOjzw==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/project-service": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.45.0.tgz", + "integrity": "sha512-3pcVHwMG/iA8afdGLMuTibGR7pDsn9RjDev6CCB+naRsSYs2pns5QbinF4Xqw6YC/Sj3lMrm/Im0eMfaa61WUg==", "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": "7.5.0", - "@typescript-eslint/types": "7.5.0", - "@typescript-eslint/typescript-estree": "7.5.0", - "semver": "^7.5.4" + "@typescript-eslint/tsconfig-utils": "^8.45.0", + "@typescript-eslint/types": "^8.45.0", + "debug": "^4.3.4" }, "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.56.0" + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.5.0.tgz", - "integrity": "sha512-mcuHM/QircmA6O7fy6nn2w/3ditQkj+SgtOc8DW3uQ10Yfj42amm2i+6F2K4YAOPNNTmE6iM1ynM6lrSwdendA==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.45.0.tgz", + "integrity": "sha512-aFdr+c37sc+jqNMGhH+ajxPXwjv9UtFZk79k8pLoJ6p4y0snmYpPA52GuWHgt2ZF4gRRW6odsEj41uZLojDt5w==", "dev": true, - "dependencies": { - "@typescript-eslint/types": "7.5.0", - "eslint-visitor-keys": "^3.4.1" - }, + "license": "MIT", "engines": { - "node": "^18.18.0 || >=20.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "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, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -7430,207 +8888,185 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "node_modules/@typescript-eslint/utils": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.45.0.tgz", + "integrity": "sha512-bxi1ht+tLYg4+XV2knz/F7RVhU0k6VrSMc9sb8DQ6fyCTrGQLHfo7lDtN0QJjZjKkLA2ThrKuCdHEvLReqtIGg==", "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.45.0", + "@typescript-eslint/types": "8.45.0", + "@typescript-eslint/typescript-estree": "8.45.0" + }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "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 <6.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.45.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.45.0.tgz", + "integrity": "sha512-qsaFBA3e09MIDAGFUrTk+dzqtfv1XPVz8t8d1f0ybTzrCY7BKiMC5cjrl1O/P7UmHsNyW90EYSkU/ZWpmXelag==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "@typescript-eslint/types": "8.45.0", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "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/@vitest/expect": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.5.tgz", + "integrity": "sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==", "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" + "@vitest/spy": "2.0.5", + "@vitest/utils": "2.0.5", + "chai": "^5.1.1", + "tinyrainbow": "^1.2.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://opencollective.com/vitest" } }, - "node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "node_modules/@vitest/expect/node_modules/@vitest/pretty-format": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.5.tgz", + "integrity": "sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==", "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.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" + "tinyrainbow": "^1.2.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "url": "https://opencollective.com/vitest" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "node_modules/@vitest/expect/node_modules/@vitest/utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.5.tgz", + "integrity": "sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" + "@vitest/pretty-format": "2.0.5", + "estree-walker": "^3.0.3", + "loupe": "^3.1.1", + "tinyrainbow": "^1.2.0" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://opencollective.com/vitest" } }, - "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/@vitest/expect/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } }, - "node_modules/@vitest/expect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.0.tgz", - "integrity": "sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==", + "node_modules/@vitest/pretty-format": { + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz", + "integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==", "dev": true, + "license": "MIT", "dependencies": { - "@vitest/spy": "1.6.0", - "@vitest/utils": "1.6.0", - "chai": "^4.3.10" + "tinyrainbow": "^1.2.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/spy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.0.tgz", - "integrity": "sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.5.tgz", + "integrity": "sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==", "dev": true, + "license": "MIT", "dependencies": { - "tinyspy": "^2.2.0" + "tinyspy": "^3.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.0.tgz", - "integrity": "sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==", + "version": "2.1.9", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz", + "integrity": "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==", "dev": true, + "license": "MIT", "dependencies": { - "diff-sequences": "^29.6.3", - "estree-walker": "^3.0.3", - "loupe": "^2.3.7", - "pretty-format": "^29.7.0" + "@vitest/pretty-format": "2.1.9", + "loupe": "^3.1.2", + "tinyrainbow": "^1.2.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/utils/node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true - }, - "node_modules/@vitest/utils/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@vitest/utils/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, + "node_modules/@vscode-elements/elements": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@vscode-elements/elements/-/elements-1.14.0.tgz", + "integrity": "sha512-fUOP8O/Pwy8zbD8hGSy1plBg/764hdM9jIMu8uG7GQJOrOB+uQ/ystYxkiUcN6P7OBHvqkBKO1j6vDrkaOJg6Q==", + "license": "MIT", "dependencies": { - "@types/estree": "^1.0.0" + "lit": "^3.2.1" } }, - "node_modules/@vitest/utils/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, + "node_modules/@vscode-elements/react-elements": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@vscode-elements/react-elements/-/react-elements-0.9.0.tgz", + "integrity": "sha512-pGWp6OBDAZXJ0tZqN+2SCiKhvhW3/cE4XJyiVHXH4Ft6KteuNVg20oexFv0M66U9iAZElQjPF8M9pBBABLaUZg==", + "license": "ISC", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@lit/react": "^1.0.6", + "@vscode-elements/elements": "^1.13.0" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "peerDependencies": { + "react": "^18.0.0" } }, - "node_modules/@vitest/utils/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, "node_modules/@vscode/codicons": { "version": "0.0.36", "resolved": "https://registry.npmjs.org/@vscode/codicons/-/codicons-0.0.36.tgz", @@ -7653,9 +9089,9 @@ "integrity": "sha512-Zhf3KvB+J04M4HPE2yCvEILGVtPixXUQMLBvx4QcAtjhc5lnwlZbbt80LCsZO2B+2BH8RMgVXk3QQ5DEzEne2Q==" }, "node_modules/@vscode/debugprotocol": { - "version": "1.65.0", - "resolved": "https://registry.npmjs.org/@vscode/debugprotocol/-/debugprotocol-1.65.0.tgz", - "integrity": "sha512-ejerrPMBXzYms6Ks+Gb7cdXtdncmT0xwIKNsc0c/SxhEa0HVY5jdvLUegYE91p7CQJpCnXOD/r2CvViN8txLLA==" + "version": "1.68.0", + "resolved": "https://registry.npmjs.org/@vscode/debugprotocol/-/debugprotocol-1.68.0.tgz", + "integrity": "sha512-2J27dysaXmvnfuhFGhfeuxfHRXunqNPxtBoR3koiTOA9rdxWNDTa1zIFLCFMSHJ9MPTPKFcBeblsyaCJCIlQxg==" }, "node_modules/@vscode/test-electron": { "version": "2.3.9", @@ -7673,26 +9109,31 @@ } }, "node_modules/@vscode/vsce": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/@vscode/vsce/-/vsce-2.24.0.tgz", - "integrity": "sha512-p6CIXpH5HXDqmUkgFXvIKTjZpZxy/uDx4d/UsfhS9vQUun43KDNUbYeZocyAHgqcJlPEurgArHz9te1PPiqPyA==", + "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, + "license": "MIT", "dependencies": { - "azure-devops-node-api": "^11.0.1", + "@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", - "glob": "^7.0.6", + "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": "^12.3.2", + "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.1", + "tmp": "^0.2.3", "typed-rest-client": "^1.8.4", "url-join": "^4.0.1", "xml2js": "^0.5.0", @@ -7703,83 +9144,156 @@ "vsce": "vsce" }, "engines": { - "node": ">= 14" + "node": ">= 20" }, "optionalDependencies": { "keytar": "^7.7.0" } }, - "node_modules/@vscode/vsce/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/@vscode/vsce-sign": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vscode/vsce-sign/-/vsce-sign-2.0.5.tgz", + "integrity": "sha512-GfYWrsT/vypTMDMgWDm75iDmAOMe7F71sZECJ+Ws6/xyIfmB3ELVnVN+LwMFAvmXY+e6eWhR2EzNGF/zAhWY3Q==", "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "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-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, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "alpine" + ] }, - "node_modules/@vscode/webview-ui-toolkit": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vscode/webview-ui-toolkit/-/webview-ui-toolkit-1.4.0.tgz", - "integrity": "sha512-modXVHQkZLsxgmd5yoP3ptRC/G8NBDD+ob+ngPiWNQdlrH6H1xR/qgOBD85bfU3BhOB5sZzFWBwwhp9/SfoHww==", - "dependencies": { - "@microsoft/fast-element": "^1.12.0", - "@microsoft/fast-foundation": "^2.49.4", - "@microsoft/fast-react-wrapper": "^0.3.22", - "tslib": "^2.6.2" - }, - "peerDependencies": { - "react": ">=16.9.0" - } + "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, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "alpine" + ] }, - "node_modules/@yarnpkg/fslib": { - "version": "2.10.3", - "resolved": "https://registry.npmjs.org/@yarnpkg/fslib/-/fslib-2.10.3.tgz", - "integrity": "sha512-41H+Ga78xT9sHvWLlFOZLIhtU6mTGZ20pZ29EiZa97vnxdohJD2AF42rCoAoWfqUz486xY6fhjMH+DYEM9r14A==", + "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, - "dependencies": { - "@yarnpkg/libzip": "^2.3.0", - "tslib": "^1.13.0" - }, - "engines": { - "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" - } + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@yarnpkg/fslib/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "node_modules/@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, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "darwin" + ] }, - "node_modules/@yarnpkg/libzip": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@yarnpkg/libzip/-/libzip-2.3.0.tgz", - "integrity": "sha512-6xm38yGVIa6mKm/DUCF2zFFJhERh/QWp1ufm4cNUvxsONBmfPg8uZ9pZBdOmF6qFGr/HlT6ABBkCSx/dlEtvWg==", + "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, - "dependencies": { - "@types/emscripten": "^1.39.6", - "tslib": "^1.13.0" - }, - "engines": { - "node": ">=12 <14 || 14.2 - 14.9 || >14.10.0" - } + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "linux" + ] }, - "node_modules/@yarnpkg/libzip/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "node_modules/@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, + "license": "SEE LICENSE IN LICENSE.txt", + "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, + "license": "SEE LICENSE IN LICENSE.txt", + "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, + "license": "SEE LICENSE IN LICENSE.txt", + "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, + "license": "SEE LICENSE IN LICENSE.txt", + "optional": true, + "os": [ + "win32" + ] }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", @@ -7787,53 +9301,12 @@ "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dev": true, - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", - "dev": true, - "dependencies": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" - } - }, - "node_modules/acorn-globals/node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -7841,15 +9314,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-globals/node_modules/acorn-walk": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", - "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/acorn-import-assertions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", @@ -7864,15 +9328,20 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-walk": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, "engines": { "node": ">=0.4.0" } @@ -8085,9 +9554,10 @@ } }, "node_modules/archiver-utils/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -8186,13 +9656,14 @@ } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" @@ -8210,22 +9681,17 @@ "node": ">=0.10.0" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "dev": true - }, "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", "is-string": "^1.0.7" }, "engines": { @@ -8274,16 +9740,17 @@ } }, "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, "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" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8311,15 +9778,16 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "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" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8328,45 +9796,36 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.toreversed": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/array.prototype.toreversed/-/array.prototype.toreversed-1.1.2.tgz", - "integrity": "sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - } - }, "node_modules/array.prototype.tosorted": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.3.tgz", - "integrity": "sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.1.0", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -8376,12 +9835,13 @@ } }, "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, + "license": "MIT", "engines": { - "node": "*" + "node": ">=12" } }, "node_modules/assign-symbols": { @@ -8398,6 +9858,7 @@ "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", "dev": true, + "license": "MIT", "dependencies": { "tslib": "^2.0.1" }, @@ -8409,7 +9870,8 @@ "version": "0.0.8", "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/async": { "version": "3.2.5", @@ -8431,6 +9893,16 @@ "node": ">= 0.10" } }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/async-hook-jl": { "version": "1.7.6", "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz", @@ -8519,28 +9991,31 @@ } }, "node_modules/axe-core": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.8.2.tgz", - "integrity": "sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz", + "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==", "dev": true, + "license": "MPL-2.0", "engines": { "node": ">=4" } }, "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", "dev": true, - "dependencies": { - "dequal": "^2.0.3" + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" } }, "node_modules/azure-devops-node-api": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.2.0.tgz", - "integrity": "sha512-XdiGPhrpaT5J8wdERRKs5g8E0Zy1pvOYTli7z9E8nmOn3YGp4FhtjhrOyFmX/8veWCwdI69mCHKJw6l+4J/bHA==", + "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, + "license": "MIT", "dependencies": { "tunnel": "0.0.6", "typed-rest-client": "^1.8.4" @@ -8551,15 +10026,6 @@ "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==" }, - "node_modules/babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "dev": true, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/babel-jest": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", @@ -8817,17 +10283,40 @@ ] }, "node_modules/before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-4.0.0.tgz", + "integrity": "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==", + "license": "Apache-2.0" + }, + "node_modules/better-opn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "open": "^8.0.4" + }, + "engines": { + "node": ">=12.0.0" + } }, - "node_modules/big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "node_modules/better-opn/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, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, "engines": { - "node": ">=0.6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/binary-extensions": { @@ -8855,6 +10344,7 @@ "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", @@ -8866,6 +10356,7 @@ "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", @@ -8875,72 +10366,6 @@ "node": ">= 6" } }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", @@ -8952,22 +10377,12 @@ "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" }, - "node_modules/bplist-parser": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.2.0.tgz", - "integrity": "sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==", - "dev": true, - "dependencies": { - "big-integer": "^1.6.44" - }, - "engines": { - "node": ">= 5.10.0" - } - }, "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==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -8991,9 +10406,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "version": "4.25.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.1.tgz", + "integrity": "sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==", "dev": true, "funding": [ { @@ -9009,11 +10424,12 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001726", + "electron-to-chromium": "^1.5.173", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.3" }, "bin": { "browserslist": "cli.js" @@ -9062,6 +10478,7 @@ "url": "https://feross.org/support" } ], + "optional": true, "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -9087,35 +10504,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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, + "license": "BSD-3-Clause" + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, - "node_modules/bundle-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-3.0.0.tgz", - "integrity": "sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==", - "dev": true, - "dependencies": { - "run-applescript": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/cac": { "version": "6.7.14", "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", @@ -9126,16 +10526,47 @@ } }, "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==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, + "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "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" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -9171,9 +10602,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001611", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001611.tgz", - "integrity": "sha512-19NuN1/3PjA3QI8Eki55N8my4LzfkMCRLgCVfrl/slbSAchQfV0+GwjPrK3rq37As4UCLlM/DHajbKkAqbv92Q==", + "version": "1.0.30001731", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001731.tgz", + "integrity": "sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==", "dev": true, "funding": [ { @@ -9188,33 +10619,24 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chai": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.5.0.tgz", - "integrity": "sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", + "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", "dev": true, + "license": "MIT", "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.1.0" + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/chai/node_modules/type-detect": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", - "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", - "dev": true, - "engines": { - "node": ">=4" + "node": ">=12" } }, "node_modules/chalk": { @@ -9240,16 +10662,47 @@ "node": ">=10" } }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", "dev": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, + "license": "MIT", "engines": { - "node": "*" + "node": ">= 16" } }, "node_modules/cheerio": { @@ -9290,16 +10743,6 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/child-process-promise": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/child-process-promise/-/child-process-promise-2.2.1.tgz", - "integrity": "sha512-Fi4aNdqBsr0mv+jgWxcZ/7rAIC2mgihrptyVI4foh/rrjY/3BNjfP9+oaiFx/fzim+1ZyCNBae0DlyfQhSugog==", - "dependencies": { - "cross-spawn": "^4.0.2", - "node-version": "^1.0.0", - "promise-polyfill": "^6.0.1" - } - }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -9323,15 +10766,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/ci-info": { "version": "3.9.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", @@ -9347,15 +10781,6 @@ "node": ">=8" } }, - "node_modules/citty": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", - "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", - "dev": true, - "dependencies": { - "consola": "^3.2.3" - } - }, "node_modules/cjs-module-lexer": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", @@ -9372,26 +10797,15 @@ } }, "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==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, "dependencies": { - "restore-cursor": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "restore-cursor": "^5.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==", "engines": { - "node": ">=6" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9414,9 +10828,9 @@ } }, "node_modules/cli-truncate/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==", + "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" @@ -9426,15 +10840,15 @@ } }, "node_modules/cli-truncate/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==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true }, "node_modules/cli-truncate/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -9467,6 +10881,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "license": "ISC", "engines": { "node": ">= 12" } @@ -9558,32 +10973,6 @@ "node": ">= 0.10" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/clone-stats": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", @@ -9628,8 +11017,18 @@ "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", "dev": true, "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/cockatiel": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/cockatiel/-/cockatiel-3.2.1.tgz", + "integrity": "sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" } }, "node_modules/collect-v8-coverage": { @@ -9681,12 +11080,6 @@ "node": ">= 6" } }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "dev": true - }, "node_modules/compress-commons": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-5.0.1.tgz", @@ -9717,44 +11110,9 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/confbox": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", - "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "node_modules/consola": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", - "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", - "dev": true, - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dev": true, - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/continuation-local-storage": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz", @@ -9771,18 +11129,25 @@ "dev": true }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "engines": { "node": ">= 0.6" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "dev": true + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } }, "node_modules/copy-props": { "version": "4.0.0", @@ -9974,11 +11339,11 @@ "yarn": ">=1" } }, - "node_modules/cross-env/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -9988,11 +11353,11 @@ "node": ">= 8" } }, - "node_modules/cross-env/node_modules/which": { + "node_modules/cross-spawn/node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -10003,56 +11368,6 @@ "node": ">= 8" } }, - "node_modules/cross-spawn": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", - "integrity": "sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA==", - "dependencies": { - "lru-cache": "^4.0.1", - "which": "^1.2.9" - } - }, - "node_modules/cross-spawn/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/cross-spawn/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" - }, - "node_modules/crypto-random-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", - "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", - "dev": true, - "dependencies": { - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/crypto-random-string/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/css-color-keywords": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", @@ -10105,35 +11420,37 @@ "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", "dev": true }, - "node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } }, "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.3.0.tgz", + "integrity": "sha512-6r0NiY0xizYqfBvWp1G7WXJ06/bZyrk7Dc6PHql82C/pKGUTKu4yAX4Y8JPamb1ob9nBKuxWzCGTRuGwU3yxJQ==", "dev": true, + "license": "MIT", "dependencies": { - "cssom": "~0.3.6" + "@asamuzakjp/css-color": "^3.1.1", + "rrweb-cssom": "^0.8.0" }, "engines": { - "node": ">=8" + "node": ">=18" } }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "dev": true - }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/d3": { "version": "7.9.0", @@ -10538,31 +11855,33 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", "dev": true, + "license": "MIT", "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -10572,313 +11891,144 @@ } }, "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decimal.js": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", - "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", - "dev": true - }, - "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/deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "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", - "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", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-browser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-4.0.0.tgz", - "integrity": "sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==", - "dev": true, - "dependencies": { - "bundle-name": "^3.0.0", - "default-browser-id": "^3.0.0", - "execa": "^7.1.1", - "titleize": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser-id": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-3.0.0.tgz", - "integrity": "sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==", - "dev": true, - "dependencies": { - "bplist-parser": "^0.2.0", - "untildify": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-browser/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/default-browser/node_modules/execa": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-7.2.0.tgz", - "integrity": "sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/default-browser/node_modules/human-signals": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-4.3.1.tgz", - "integrity": "sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==", - "dev": true, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/default-browser/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/inspect-js" } }, - "node_modules/default-browser/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, "engines": { - "node": ">=12" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/default-browser/node_modules/npm-run-path": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", - "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, + "license": "MIT", "dependencies": { - "path-key": "^4.0.0" + "ms": "^2.1.3" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/default-browser/node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", "dev": true, - "engines": { - "node": ">=12" + "license": "MIT" + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/default-browser/node_modules/onetime": { + "node_modules/decompress-response": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "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-fn": "^4.0.0" + "mimic-response": "^3.1.0" }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/default-browser/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/default-browser/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", "dev": true, - "engines": { - "node": ">=12" + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } } }, - "node_modules/default-browser/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, + "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=6" } }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "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, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optional": true, + "engines": { + "node": ">=4.0.0" } }, - "node_modules/defaults/node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "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", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", "dev": true, "engines": { - "node": ">=0.8" + "node": ">=0.10.0" } }, "node_modules/define-data-property": { @@ -10899,15 +12049,13 @@ } }, "node_modules/define-lazy-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", - "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, + "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/define-properties": { @@ -10927,12 +12075,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/defu": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", - "dev": true - }, "node_modules/del": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", @@ -10972,20 +12114,6 @@ "node": ">=0.4.0" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - }, "node_modules/dequal": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", @@ -10995,16 +12123,6 @@ "node": ">=6" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "dev": true, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", @@ -11014,15 +12132,6 @@ "node": ">=0.10.0" } }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/detect-libc": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", @@ -11042,6 +12151,20 @@ "node": ">=8" } }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/diagnostic-channel": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/diagnostic-channel/-/diagnostic-channel-1.1.1.tgz", @@ -11134,19 +12257,6 @@ } ] }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "deprecated": "Use your platform's native DOMException instead", - "dev": true, - "dependencies": { - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/domhandler": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", @@ -11176,6 +12286,34 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/dotenv": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com/" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", @@ -11215,17 +12353,37 @@ "node": ">=6.0.0" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "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, + "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.742", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.742.tgz", - "integrity": "sha512-EhE+z1d5RNytAq/qnGAxPR+ie3UzKbv7qqQc0wnEbOh+KDUplgfzkGSCy9d78B+S+nVNTS42BabHXB6Ni+Ud4w==", - "dev": true + "version": "1.5.194", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.194.tgz", + "integrity": "sha512-SdnWJwSUot04UR51I2oPD8kuP2VI37/CADR1OHsFOUzZIvfWJBO6q11k5P/uKNyTT3cdOsnyjkrZ+DDShqYqJA==", + "dev": true, + "license": "ISC" }, "node_modules/emitter-listener": { "version": "1.1.2", @@ -11252,15 +12410,6 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -11304,16 +12453,30 @@ "node": ">=6" } }, - "node_modules/envinfo": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", - "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, "engines": { - "node": ">=4" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" } }, "node_modules/error-ex": { @@ -11326,57 +12489,66 @@ } }, "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "version": "1.24.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", + "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", "dev": true, + "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", + "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -11386,13 +12558,11 @@ } }, "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==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -11407,41 +12577,46 @@ } }, "node_modules/es-iterator-helpers": { - "version": "1.0.18", - "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz", - "integrity": "sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", + "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.7", - "iterator.prototype": "^1.1.2", - "safe-array-concat": "^1.1.2" + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", - "dev": true + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "dev": true, + "license": "MIT" }, "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -11450,14 +12625,16 @@ } }, "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -11473,14 +12650,15 @@ } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, + "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -11490,41 +12668,44 @@ } }, "node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", + "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" + "@esbuild/aix-ppc64": "0.25.0", + "@esbuild/android-arm": "0.25.0", + "@esbuild/android-arm64": "0.25.0", + "@esbuild/android-x64": "0.25.0", + "@esbuild/darwin-arm64": "0.25.0", + "@esbuild/darwin-x64": "0.25.0", + "@esbuild/freebsd-arm64": "0.25.0", + "@esbuild/freebsd-x64": "0.25.0", + "@esbuild/linux-arm": "0.25.0", + "@esbuild/linux-arm64": "0.25.0", + "@esbuild/linux-ia32": "0.25.0", + "@esbuild/linux-loong64": "0.25.0", + "@esbuild/linux-mips64el": "0.25.0", + "@esbuild/linux-ppc64": "0.25.0", + "@esbuild/linux-riscv64": "0.25.0", + "@esbuild/linux-s390x": "0.25.0", + "@esbuild/linux-x64": "0.25.0", + "@esbuild/netbsd-arm64": "0.25.0", + "@esbuild/netbsd-x64": "0.25.0", + "@esbuild/openbsd-arm64": "0.25.0", + "@esbuild/openbsd-x64": "0.25.0", + "@esbuild/sunos-x64": "0.25.0", + "@esbuild/win32-arm64": "0.25.0", + "@esbuild/win32-ia32": "0.25.0", + "@esbuild/win32-x64": "0.25.0" } }, "node_modules/esbuild-register": { @@ -11532,6 +12713,7 @@ "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz", "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4" }, @@ -11540,111 +12722,82 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "dev": true - }, "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==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "dev": true, - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, - "node_modules/escodegen/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">=0.8.0" } }, "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "version": "9.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.32.0.tgz", + "integrity": "sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.0", + "@eslint/core": "^0.15.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.32.0", + "@eslint/plugin-kit": "^0.3.4", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "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", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "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" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-config-prettier": { @@ -11695,17 +12848,18 @@ } }, "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", - "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz", + "integrity": "sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==", "dev": true, "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.3.5", + "enhanced-resolve": "^5.15.0", + "eslint-module-utils": "^2.8.1", + "fast-glob": "^3.3.2", + "get-tsconfig": "^4.7.5", + "is-bun-module": "^1.0.2", "is-glob": "^4.0.3" }, "engines": { @@ -11716,13 +12870,22 @@ }, "peerDependencies": { "eslint": "*", - "eslint-plugin-import": "*" + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "dependencies": { "debug": "^3.2.7" @@ -11745,28 +12908,14 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-deprecation": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-deprecation/-/eslint-plugin-deprecation-2.0.0.tgz", - "integrity": "sha512-OAm9Ohzbj11/ZFyICyR5N6LbOIvQMp7ZU2zI7Ej0jIc8kiGUERXPNMfw2QqqHD1ZHtjMub3yPZILovYEYucgoQ==", - "dev": true, - "dependencies": { - "@typescript-eslint/utils": "^6.0.0", - "tslib": "^2.3.1", - "tsutils": "^3.21.0" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", - "typescript": "^4.2.4 || ^5.0.0" - } - }, "node_modules/eslint-plugin-escompat": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-escompat/-/eslint-plugin-escompat-3.4.0.tgz", - "integrity": "sha512-ufTPv8cwCxTNoLnTZBFTQ5SxU2w7E7wiMIS7PSxsgP1eAxFjtSaoZ80LRn64hI8iYziE6kJG6gX/ZCJVxh48Bg==", + "version": "3.11.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-escompat/-/eslint-plugin-escompat-3.11.4.tgz", + "integrity": "sha512-j0ywwNnIufshOzgAu+PfIig1c7VRClKSNKzpniMT2vXQ4leL5q+e/SpMFQU0nrdL2WFFM44XmhSuwmxb3G0CJg==", "dev": true, + "license": "MIT", "dependencies": { - "browserslist": "^4.21.0" + "browserslist": "^4.23.1" }, "peerDependencies": { "eslint": ">=5.14.1" @@ -11825,34 +12974,54 @@ } }, "node_modules/eslint-plugin-github": { - "version": "4.10.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-github/-/eslint-plugin-github-4.10.2.tgz", - "integrity": "sha512-F1F5aAFgi1Y5hYoTFzGQACBkw5W1hu2Fu5FSTrMlXqrojJnKl1S2pWO/rprlowRQpt+hzHhqSpsfnodJEVd5QA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-github/-/eslint-plugin-github-6.0.0.tgz", + "integrity": "sha512-J8MvUoiR/TU/Y9NnEmg1AnbvMUj9R6IO260z47zymMLLvso7B4c80IKjd8diqmqtSmeXXlbIus4i0SvK84flag==", "dev": true, + "license": "MIT", "dependencies": { + "@eslint/compat": "^1.2.3", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "^9.14.0", "@github/browserslist-config": "^1.0.0", - "@typescript-eslint/eslint-plugin": "^7.0.1", - "@typescript-eslint/parser": "^7.0.1", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", "aria-query": "^5.3.0", "eslint-config-prettier": ">=8.0.0", - "eslint-plugin-escompat": "^3.3.3", + "eslint-plugin-escompat": "^3.11.3", "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-filenames": "^1.3.2", "eslint-plugin-i18n-text": "^1.0.1", - "eslint-plugin-import": "^2.25.2", - "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.10.2", "eslint-plugin-no-only-tests": "^3.0.0", - "eslint-plugin-prettier": "^5.0.0", + "eslint-plugin-prettier": "^5.2.1", "eslint-rule-documentation": ">=1.0.0", + "globals": "^16.0.0", "jsx-ast-utils": "^3.3.2", "prettier": "^3.0.0", - "svg-element-attributes": "^1.3.1" + "svg-element-attributes": "^1.3.1", + "typescript": "^5.7.3", + "typescript-eslint": "^8.14.0" }, "bin": { "eslint-ignore-errors": "bin/eslint-ignore-errors.js" }, "peerDependencies": { - "eslint": "^8.0.1" + "eslint": "^8 || ^9" + } + }, + "node_modules/eslint-plugin-github/node_modules/globals": { + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz", + "integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint-plugin-i18n-text": { @@ -11865,34 +13034,36 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/debug": { @@ -11926,10 +13097,11 @@ } }, "node_modules/eslint-plugin-jest-dom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-5.2.0.tgz", - "integrity": "sha512-ctnCP0MsLmUvbCyhnOQ+/1OmsZj+e7V6kFunazIx5728Yq7TQnuKI8HOsgPTStB+9iYEpiEa+VfKB09Lq7/3fA==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-5.5.0.tgz", + "integrity": "sha512-CRlXfchTr7EgC3tDI7MGHY6QjdJU5Vv2RPaeeGtkXUHnKZf04kgzMPIJUXt4qKCvYWVVIEo9ut9Oq1vgXAykEA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/runtime": "^7.16.3", "requireindex": "^1.2.0" @@ -11940,8 +13112,8 @@ "yarn": ">=1" }, "peerDependencies": { - "@testing-library/dom": "^8.0.0 || ^9.0.0", - "eslint": "^6.8.0 || ^7.0.0 || ^8.0.0" + "@testing-library/dom": "^8.0.0 || ^9.0.0 || ^10.0.0", + "eslint": "^6.8.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" }, "peerDependenciesMeta": { "@testing-library/dom": { @@ -11950,42 +13122,43 @@ } }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz", - "integrity": "sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.2", - "aria-query": "^5.3.0", - "array-includes": "^3.1.7", + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", - "axe-core": "=4.7.0", - "axobject-query": "^3.2.1", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "es-iterator-helpers": "^1.0.15", - "hasown": "^2.0.0", + "hasown": "^2.0.2", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7" + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" }, "engines": { "node": ">=4.0" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/axe-core": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.7.0.tgz", - "integrity": "sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==", + "node_modules/eslint-plugin-jsx-a11y/node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=4" + "node": ">= 0.4" } }, "node_modules/eslint-plugin-no-only-tests": { @@ -11998,13 +13171,14 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", - "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.6.tgz", + "integrity": "sha512-mUcf7QG2Tjk7H055Jk0lGBjbgDnfrvqjhXh9t2xLMSCjZVcw9Rb1V6sVNXO0th3jgeO7zllWPTNRil3JW94TnQ==", "dev": true, + "license": "MIT", "dependencies": { "prettier-linter-helpers": "^1.0.0", - "synckit": "^0.8.6" + "synckit": "^0.11.0" }, "engines": { "node": "^14.18.0 || >=16.0.0" @@ -12012,250 +13186,120 @@ "funding": { "url": "https://opencollective.com/eslint-plugin-prettier" }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": "*", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.34.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.34.1.tgz", - "integrity": "sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlast": "^1.2.4", - "array.prototype.flatmap": "^1.3.2", - "array.prototype.toreversed": "^1.1.2", - "array.prototype.tosorted": "^1.1.3", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.17", - "estraverse": "^5.3.0", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.7", - "object.fromentries": "^2.0.7", - "object.hasown": "^1.1.3", - "object.values": "^1.1.7", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.10" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", - "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", - "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", - "dev": true, - "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/eslint-plugin-react/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-storybook": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.8.0.tgz", - "integrity": "sha512-CZeVO5EzmPY7qghO2t64oaFM+8FTaD4uzOEjHKp516exyTKo+skKAL9GI3QALS2BXhyALJjNtwbmr1XinGE8bA==", - "dev": true, - "dependencies": { - "@storybook/csf": "^0.0.1", - "@typescript-eslint/utils": "^5.62.0", - "requireindex": "^1.2.0", - "ts-dedent": "^2.2.0" - }, - "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "eslint": ">=6" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@storybook/csf": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.0.1.tgz", - "integrity": "sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==", - "dev": true, - "dependencies": { - "lodash": "^4.17.15" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" }, "peerDependenciesMeta": { - "typescript": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { "optional": true } } }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=4" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, - "node_modules/eslint-plugin-storybook/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "esutils": "^2.0.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-storybook/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=8.0.0" + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/eslint-plugin-storybook/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-storybook": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-9.1.1.tgz", + "integrity": "sha512-g4/i9yW6cl4TCEMzYyALNvO3d/jB6TDvSs/Pmye7dHDrra2B7dgZJGzmEWILD62brVrLVHNoXgy2dNPtx80kmw==", "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^8.8.1" + }, "engines": { - "node": ">=4.0" + "node": ">=20.0.0" + }, + "peerDependencies": { + "eslint": ">=8", + "storybook": "^9.1.1" } }, "node_modules/eslint-rule-documentation": { @@ -12268,16 +13312,17 @@ } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "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" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -12342,20 +13387,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/eslint/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -12368,6 +13399,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -12380,21 +13424,6 @@ "node": ">=10.13.0" } }, - "node_modules/eslint/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/eslint/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -12422,60 +13451,35 @@ "node": ">=8" } }, - "node_modules/eslint/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/eslint/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/espree/node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, - "bin": { - "acorn": "bin/acorn" - }, + "license": "Apache-2.0", "engines": { - "node": ">=0.4.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esprima": { @@ -12539,15 +13543,6 @@ "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/event-pubsub": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", @@ -12562,11 +13557,22 @@ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" }, + "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, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -12585,45 +13591,12 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/execa/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/execa/node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/execa/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/exenv-es6": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exenv-es6/-/exenv-es6-1.1.1.tgz", - "integrity": "sha512-vlVu3N8d6yEMpMsEm+7sUBAI81aqYYuEvfK0jNqmdb/OPXzzH7QWDDnVjMvDSY47JdHEqx/dfC/q8WkfoTmpGQ==" + "license": "ISC" }, "node_modules/exit": { "version": "0.1.2", @@ -12634,6 +13607,16 @@ "node": ">= 0.8.0" } }, + "node_modules/exit-x": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/exit-x/-/exit-x-0.2.2.tgz", + "integrity": "sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==", + "dev": true, + "license": "MIT", + "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", @@ -12672,87 +13655,6 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "dev": true, - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/express/node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -12772,6 +13674,22 @@ "node": ">=0.10.0" } }, + "node_modules/fast-content-type-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-3.0.0.tgz", + "integrity": "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -12843,15 +13761,6 @@ "bser": "2.1.1" } }, - "node_modules/fd-package-json": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fd-package-json/-/fd-package-json-1.2.0.tgz", - "integrity": "sha512-45LSPmWf+gC5tdCQMNH4s9Sr00bIkiD9aN7dc5hqkrEw1geRYyDQS1v1oMHAW3ysfxfndqGsrDREHHjNNbKUfA==", - "dev": true, - "dependencies": { - "walk-up-path": "^3.0.1" - } - }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -12860,30 +13769,66 @@ "pend": "~1.2.0" } }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "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, + "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "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/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "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": { @@ -12897,438 +13842,594 @@ "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", + "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", + "dev": true, + "dependencies": { + "micromatch": "^4.0.2" } }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/findup-sync": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", "dev": true, "dependencies": { - "ms": "2.0.0" + "detect-file": "^1.0.0", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 10.13.0" } }, - "node_modules/finalhandler/node_modules/ms": { + "node_modules/fined": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true + "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", + "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^5.0.0", + "object.defaults": "^1.1.0", + "object.pick": "^1.3.0", + "parse-filepath": "^1.0.2" + }, + "engines": { + "node": ">= 10.13.0" + } }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "node_modules/flagged-respawn": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", + "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==", + "dev": true, + "engines": { + "node": ">= 10.13.0" + } + }, + "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, + "license": "MIT", "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, "engines": { - "node": ">=8" + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/find-cache-dir/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "for-in": "^1.0.1" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "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-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fs-mkdirp-stream/node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "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", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/find-cache-dir/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", "dev": true, + "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/find-cache-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/find-cache-dir/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, "engines": { - "node": ">=8" + "node": ">=6.9.0" } }, - "node_modules/find-cache-dir/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "engines": { - "node": ">=8" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/find-yarn-workspace-root": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-yarn-workspace-root/-/find-yarn-workspace-root-2.0.0.tgz", - "integrity": "sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==", - "dev": true, - "dependencies": { - "micromatch": "^4.0.2" - } - }, - "node_modules/findup-sync": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", - "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "dev": true, + "license": "MIT", "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.3", - "micromatch": "^4.0.4", - "resolve-dir": "^1.0.1" + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/fined": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", - "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^5.0.0", - "object.defaults": "^1.1.0", - "object.pick": "^1.3.0", - "parse-filepath": "^1.0.2" + "node": ">= 0.4" }, - "engines": { - "node": ">= 10.13.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/flagged-respawn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", - "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==", + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", "dev": true, "engines": { - "node": ">= 10.13.0" + "node": ">=8.0.0" } }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", "dev": true, + "license": "MIT", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">= 0.4" } }, - "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", - "dev": true - }, - "node_modules/flow-parser": { - "version": "0.243.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.243.0.tgz", - "integrity": "sha512-HCDBfH+kZcY5etWYeAqatjW78gkIryzb9XixRsA8lGI1uyYc7aCpElkkO4H+KIpoyQMiY0VAZPI4cyac3wQe8w==", + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "dev": true, "engines": { - "node": ">=0.4.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, + "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "node_modules/get-tsconfig": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", "dev": true, "dependencies": { - "is-callable": "^1.1.3" + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "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, - "engines": { - "node": ">=0.10.0" - } + "optional": true }, - "node_modules/for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "node_modules/glob": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.1.tgz", + "integrity": "sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==", "dev": true, + "license": "ISC", "dependencies": { - "for-in": "^1.0.1" + "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" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=14" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/foreground-child/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "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==", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "is-glob": "^4.0.1" }, "engines": { - "node": ">= 8" + "node": ">= 6" } }, - "node_modules/foreground-child/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", + "dev": true, "dependencies": { - "isexe": "^2.0.0" + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" }, - "bin": { - "node-which": "bin/node-which" + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glob-stream/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">= 8" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "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==", + "node_modules/glob-stream/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", "dev": true, "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" } }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "node_modules/glob-stream/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/glob-watcher": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-6.0.0.tgz", + "integrity": "sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==", "dev": true, + "dependencies": { + "async-done": "^2.0.0", + "chokidar": "^3.5.3" + }, "engines": { - "node": ">= 0.6" + "node": ">= 10.13.0" } }, - "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==", + "node_modules/glob-watcher/node_modules/async-done": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-2.0.0.tgz", + "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==", "dev": true, - "optional": true - }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "end-of-stream": "^1.4.4", + "once": "^1.4.0", + "stream-exhaust": "^1.0.2" }, "engines": { - "node": ">=14.14" + "node": ">= 10.13.0" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" + "balanced-match": "^1.0.0" } }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "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": { - "yallist": "^4.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/fs-minipass/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/fs-mkdirp-stream": { + "node_modules/global-modules": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=0.10.0" } }, - "node_modules/fs-mkdirp-stream/node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=0.10.0" } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4" } }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -13337,1311 +14438,1350 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "node_modules/glogg": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-2.2.0.tgz", + "integrity": "sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==", "dev": true, + "dependencies": { + "sparkles": "^2.1.0" + }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">= 10.13.0" } }, - "node_modules/get-east-asian-width": { + "node_modules/gopd": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.2.0.tgz", - "integrity": "sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", - "dev": true, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "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/graphql": { + "version": "16.8.1", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", + "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", "engines": { - "node": "*" + "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } }, - "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==", + "node_modules/gulp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-5.0.0.tgz", + "integrity": "sha512-S8Z8066SSileaYw1S2N1I64IUc/myI2bqe2ihOBzO6+nKpvNSg7ZcWJt/AwF8LC/NVN+/QZ560Cb/5OPsyhkhg==", "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" + "glob-watcher": "^6.0.0", + "gulp-cli": "^3.0.0", + "undertaker": "^2.0.0", + "vinyl-fs": "^4.0.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "gulp": "bin/gulp.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, "engines": { - "node": ">=8.0.0" + "node": ">=10.13.0" } }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "node_modules/gulp-cli": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-3.0.0.tgz", + "integrity": "sha512-RtMIitkT8DEMZZygHK2vEuLPqLPAFB4sntSxg4NoDta7ciwGZ18l7JuhCTiS5deOJi2IoK0btE+hs6R4sfj7AA==", "dev": true, - "engines": { - "node": ">=10" + "dependencies": { + "@gulpjs/messages": "^1.1.0", + "chalk": "^4.1.2", + "copy-props": "^4.0.0", + "gulplog": "^2.2.0", + "interpret": "^3.1.1", + "liftoff": "^5.0.0", + "mute-stdout": "^2.0.0", + "replace-homedir": "^2.0.0", + "semver-greatest-satisfied-range": "^2.0.0", + "string-width": "^4.2.3", + "v8flags": "^4.0.0", + "yargs": "^16.2.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "node_modules/gulp-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "node_modules/gulp-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "resolve-pkg-maps": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/giget": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.3.tgz", - "integrity": "sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==", + "node_modules/gulp-cli/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "dependencies": { - "citty": "^0.1.6", - "consola": "^3.2.3", - "defu": "^6.1.4", - "node-fetch-native": "^1.6.3", - "nypm": "^0.3.8", - "ohash": "^1.1.3", - "pathe": "^1.1.2", - "tar": "^6.2.0" - }, - "bin": { - "giget": "dist/cli.mjs" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "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/github-slugger": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", - "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "node_modules/gulp-cli/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "node_modules/glob": { - "version": "10.3.12", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", - "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.6", - "minimatch": "^9.0.1", - "minipass": "^7.0.4", - "path-scurry": "^1.10.2" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, + "node_modules/gulp-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=8" } }, - "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==", - "dependencies": { - "is-glob": "^4.0.1" - }, + "node_modules/gulp-cli/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/glob-promise": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-4.2.2.tgz", - "integrity": "sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==", + "node_modules/gulp-cli/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "@types/glob": "^7.1.3" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/ahmadnassri" - }, - "peerDependencies": { - "glob": "^7.1.6" + "node": ">=8" } }, - "node_modules/glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", + "node_modules/gulp-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/glob-stream/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/gulp-cli/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/glob-stream/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "node_modules/gulp-cli/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "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/glob-stream/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "node_modules/gulp-cli/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/glob-watcher": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-6.0.0.tgz", - "integrity": "sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==", + "node_modules/gulp-esbuild": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/gulp-esbuild/-/gulp-esbuild-0.14.0.tgz", + "integrity": "sha512-8exVnxPSVYQq0RkbaQ0dKLqmmt5k6/U8H6XeC9xqmQkltdyY/iTkAgdPB0uuVSIs2UKnheBA370zC+NaBgssBA==", "dev": true, + "license": "MIT", "dependencies": { - "async-done": "^2.0.0", - "chokidar": "^3.5.3" + "plugin-error": "^2.0.1", + "vinyl": "^3.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">=16" + }, + "peerDependencies": { + "esbuild": ">=0.17" } }, - "node_modules/glob-watcher/node_modules/async-done": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-2.0.0.tgz", - "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==", + "node_modules/gulp-replace": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/gulp-replace/-/gulp-replace-1.1.4.tgz", + "integrity": "sha512-SVSF7ikuWKhpAW4l4wapAqPPSToJoiNKsbDoUnRrSgwZHH7lH8pbPeQj1aOVYQrbZKhfSVBxVW+Py7vtulRktw==", "dev": true, "dependencies": { - "end-of-stream": "^1.4.4", - "once": "^1.4.0", - "stream-exhaust": "^1.0.2" + "@types/node": "*", + "@types/vinyl": "^2.0.4", + "istextorbinary": "^3.0.0", + "replacestream": "^4.0.3", + "yargs-parser": ">=5.0.0-security.0" }, "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" + "node": ">=10" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "node_modules/gulp-typescript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-5.0.1.tgz", + "integrity": "sha512-YuMMlylyJtUSHG1/wuSVTrZp60k1dMEFKYOvDf7OvbAJWrDtxxD4oZon4ancdWwzjj30ztiidhe4VXJniF0pIQ==", + "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "ansi-colors": "^3.0.5", + "plugin-error": "^1.0.1", + "source-map": "^0.7.3", + "through2": "^3.0.0", + "vinyl": "^2.1.0", + "vinyl-fs": "^3.0.3" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">= 8" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "typescript": "~2.7.1 || >=2.8.0-dev || >=2.9.0-dev || ~3.0.0 || >=3.0.0-dev || >=3.1.0-dev || >= 3.2.0-dev || >= 3.3.0-dev" } }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "node_modules/gulp-typescript/node_modules/ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/gulp-typescript/node_modules/plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", "dev": true, "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "node_modules/gulp-typescript/node_modules/plugin-error/node_modules/ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", "dev": true, "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" + "ansi-wrap": "^0.1.0" }, "engines": { "node": ">=0.10.0" } }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "node_modules/gulp-typescript/node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", "dev": true, "engines": { - "node": ">=4" + "node": ">= 0.10" } }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "node_modules/gulp-typescript/node_modules/through2": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", + "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "2 || 3" + } + }, + "node_modules/gulp-typescript/node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", "dev": true, "dependencies": { - "define-properties": "^1.1.3" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.10" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/gulp/node_modules/fs-mkdirp-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", + "integrity": "sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==", "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "graceful-fs": "^4.2.8", + "streamx": "^2.12.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.13.0" } }, - "node_modules/glogg": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-2.2.0.tgz", - "integrity": "sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==", + "node_modules/gulp/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": { - "sparkles": "^2.1.0" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 10.13.0" + "node": ">=10.13.0" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/gulp/node_modules/glob-stream": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-8.0.2.tgz", + "integrity": "sha512-R8z6eTB55t3QeZMmU1C+Gv+t5UnNRkA55c5yo67fAVfxODxieTwsjNG7utxS/73NdP1NbDgCrhVEg2h00y4fFw==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3" + "@gulpjs/to-absolute-glob": "^4.0.0", + "anymatch": "^3.1.3", + "fastq": "^1.13.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "is-negated-glob": "^1.0.0", + "normalize-path": "^3.0.0", + "streamx": "^2.12.5" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10.13.0" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "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/graphql": { - "version": "16.8.1", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz", - "integrity": "sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw==", + "node_modules/gulp/node_modules/lead": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", + "integrity": "sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==", + "dev": true, "engines": { - "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" + "node": ">=10.13.0" } }, - "node_modules/gulp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-5.0.0.tgz", - "integrity": "sha512-S8Z8066SSileaYw1S2N1I64IUc/myI2bqe2ihOBzO6+nKpvNSg7ZcWJt/AwF8LC/NVN+/QZ560Cb/5OPsyhkhg==", + "node_modules/gulp/node_modules/now-and-later": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", + "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", "dev": true, "dependencies": { - "glob-watcher": "^6.0.0", - "gulp-cli": "^3.0.0", - "undertaker": "^2.0.0", - "vinyl-fs": "^4.0.0" + "once": "^1.4.0" }, - "bin": { - "gulp": "bin/gulp.js" + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/gulp/node_modules/resolve-options": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-2.0.0.tgz", + "integrity": "sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==", + "dev": true, + "dependencies": { + "value-or-function": "^4.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">= 10.13.0" } }, - "node_modules/gulp-cli": { + "node_modules/gulp/node_modules/to-through": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-3.0.0.tgz", - "integrity": "sha512-RtMIitkT8DEMZZygHK2vEuLPqLPAFB4sntSxg4NoDta7ciwGZ18l7JuhCTiS5deOJi2IoK0btE+hs6R4sfj7AA==", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-3.0.0.tgz", + "integrity": "sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==", "dev": true, "dependencies": { - "@gulpjs/messages": "^1.1.0", - "chalk": "^4.1.2", - "copy-props": "^4.0.0", - "gulplog": "^2.2.0", - "interpret": "^3.1.1", - "liftoff": "^5.0.0", - "mute-stdout": "^2.0.0", - "replace-homedir": "^2.0.0", - "semver-greatest-satisfied-range": "^2.0.0", - "string-width": "^4.2.3", - "v8flags": "^4.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "gulp": "bin/gulp.js" + "streamx": "^2.12.5" }, "engines": { "node": ">=10.13.0" } }, - "node_modules/gulp-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/gulp/node_modules/value-or-function": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz", + "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", + "dev": true, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/gulp/node_modules/vinyl-fs": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.0.tgz", + "integrity": "sha512-7GbgBnYfaquMk3Qu9g22x000vbYkOex32930rBnc3qByw6HfMEAoELjCjoJv4HuEQxHAurT+nvMHm6MnJllFLw==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "fs-mkdirp-stream": "^2.0.1", + "glob-stream": "^8.0.0", + "graceful-fs": "^4.2.11", + "iconv-lite": "^0.6.3", + "is-valid-glob": "^1.0.0", + "lead": "^4.0.0", + "normalize-path": "3.0.0", + "resolve-options": "^2.0.0", + "stream-composer": "^1.0.2", + "streamx": "^2.14.0", + "to-through": "^3.0.0", + "value-or-function": "^4.0.0", + "vinyl": "^3.0.0", + "vinyl-sourcemap": "^2.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=10.13.0" } }, - "node_modules/gulp-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/gulp/node_modules/vinyl-sourcemap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", + "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "convert-source-map": "^2.0.0", + "graceful-fs": "^4.2.10", + "now-and-later": "^3.0.0", + "streamx": "^2.12.5", + "vinyl": "^3.0.0", + "vinyl-contents": "^2.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=10.13.0" } }, - "node_modules/gulp-cli/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "node_modules/gulplog": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz", + "integrity": "sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==", "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "dependencies": { + "glogg": "^2.2.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "node_modules/gulp-cli/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/gulp-cli/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-cli/node_modules/is-fullwidth-code-point": { + "node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/gulp-cli/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "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": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "es-define-property": "^1.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "dunder-proto": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-cli/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-cli/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "has-symbols": "^1.0.3" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-cli/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "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": ">=10" + "node": ">= 0.4" } }, - "node_modules/gulp-esbuild": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/gulp-esbuild/-/gulp-esbuild-0.12.0.tgz", - "integrity": "sha512-6el2YFJK+Wiip18G4iMl1rNuetSxpEZTLT1e6GuAsi3Q/yaeoNUgTX7nlwpbFkymGXMI4NFXisg5++PMe+fNNA==", + "node_modules/headers-polyfill": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.2.tgz", + "integrity": "sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw==" + }, + "node_modules/hoist-non-react-statics": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", + "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", "dev": true, "dependencies": { - "esbuild": "^0.19.6", - "plugin-error": "^2.0.1", - "vinyl": "^3.0.0" - }, - "engines": { - "node": ">=16" + "react-is": "^16.7.0" } }, - "node_modules/gulp-esbuild/node_modules/@esbuild/android-arm": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.9.tgz", - "integrity": "sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==", - "cpu": [ - "arm" - ], + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "parse-passwd": "^1.0.0" + }, "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/gulp-esbuild/node_modules/@esbuild/android-arm64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.9.tgz", - "integrity": "sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==", - "cpu": [ - "arm64" - ], + "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, - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "lru-cache": "^6.0.0" + }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/gulp-esbuild/node_modules/@esbuild/android-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.9.tgz", - "integrity": "sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==", - "cpu": [ - "x64" - ], + "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, - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/gulp-esbuild/node_modules/@esbuild/darwin-arm64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.9.tgz", - "integrity": "sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==", - "cpu": [ - "arm64" - ], + "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-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/gulp-esbuild/node_modules/@esbuild/darwin-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.9.tgz", - "integrity": "sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==", - "cpu": [ - "x64" - ], + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "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, - "optional": true, - "os": [ - "darwin" + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } ], - "engines": { - "node": ">=12" + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" } }, - "node_modules/gulp-esbuild/node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.9.tgz", - "integrity": "sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==", - "cpu": [ - "arm64" - ], + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, "engines": { - "node": ">=12" + "node": ">= 6" } }, - "node_modules/gulp-esbuild/node_modules/@esbuild/freebsd-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.9.tgz", - "integrity": "sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==", - "cpu": [ - "x64" - ], + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "dependencies": { + "agent-base": "6", + "debug": "4" + }, "engines": { - "node": ">=12" + "node": ">= 6" } }, - "node_modules/gulp-esbuild/node_modules/@esbuild/linux-arm": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.9.tgz", - "integrity": "sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==", - "cpu": [ - "arm" - ], + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "Apache-2.0", "engines": { - "node": ">=12" + "node": ">=10.17.0" } }, - "node_modules/gulp-esbuild/node_modules/@esbuild/linux-arm64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.9.tgz", - "integrity": "sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==", - "cpu": [ - "arm64" - ], + "node_modules/husky": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "bin": { + "husky": "bin.js" + }, "engines": { - "node": ">=12" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" } }, - "node_modules/gulp-esbuild/node_modules/@esbuild/linux-ia32": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.9.tgz", - "integrity": "sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/gulp-esbuild/node_modules/@esbuild/linux-loong64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.9.tgz", - "integrity": "sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==", - "cpu": [ - "loong64" - ], + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "ISC", "engines": { - "node": ">=12" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/gulp-esbuild/node_modules/@esbuild/linux-mips64el": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.9.tgz", - "integrity": "sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==", - "cpu": [ - "mips64el" - ], + "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, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "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/gulp-esbuild/node_modules/@esbuild/linux-ppc64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.9.tgz", - "integrity": "sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==", - "cpu": [ - "ppc64" - ], + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">= 4" } }, - "node_modules/gulp-esbuild/node_modules/@esbuild/linux-riscv64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.9.tgz", - "integrity": "sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==", - "cpu": [ - "riscv64" - ], + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "linux" - ], + "bin": { + "image-size": "bin/image-size.js" + }, "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/gulp-esbuild/node_modules/@esbuild/linux-s390x": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.9.tgz", - "integrity": "sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==", - "cpu": [ - "s390x" - ], + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true + }, + "node_modules/immutable": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.1.tgz", + "integrity": "sha512-3jatXi9ObIsPGr3N5hGw/vWWcTkq6hUYhpQz4k0wLC+owqWi/LiugIw9x0EdNZ2yGedKN/HzePiBvaJRXa0Ujg==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "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": ">=12" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gulp-esbuild/node_modules/@esbuild/linux-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.9.tgz", - "integrity": "sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==", - "cpu": [ - "x64" - ], + "node_modules/import-fresh/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, - "optional": true, - "os": [ - "linux" - ], "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/gulp-esbuild/node_modules/@esbuild/netbsd-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.9.tgz", - "integrity": "sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==", - "cpu": [ - "x64" - ], + "node_modules/import-in-the-middle": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.4.2.tgz", + "integrity": "sha512-9WOz1Yh/cvO/p69sxRmhyQwrIGGSp7EIdcb+fFNVi7CzQGQB8U1/1XrKVSbEd/GNOAeM0peJtmi7+qphe7NvAw==", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" + "license": "Apache-2.0", + "dependencies": { + "acorn": "^8.8.2", + "acorn-import-assertions": "^1.9.0", + "cjs-module-lexer": "^1.2.2", + "module-details-from-path": "^1.0.3" } }, - "node_modules/gulp-esbuild/node_modules/@esbuild/openbsd-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.9.tgz", - "integrity": "sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==", - "cpu": [ - "x64" - ], + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, - "optional": true, - "os": [ - "openbsd" - ], + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, "engines": { - "node": ">=12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gulp-esbuild/node_modules/@esbuild/sunos-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.9.tgz", - "integrity": "sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==", - "cpu": [ - "x64" - ], + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, - "optional": true, - "os": [ - "sunos" - ], "engines": { - "node": ">=12" + "node": ">=0.8.19" } }, - "node_modules/gulp-esbuild/node_modules/@esbuild/win32-arm64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.9.tgz", - "integrity": "sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==", - "cpu": [ - "arm64" - ], + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/gulp-esbuild/node_modules/@esbuild/win32-ia32": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.9.tgz", - "integrity": "sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==", - "cpu": [ - "ia32" - ], + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", "engines": { "node": ">=12" } }, - "node_modules/gulp-esbuild/node_modules/@esbuild/win32-x64": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.9.tgz", - "integrity": "sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==", - "cpu": [ - "x64" - ], + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=12" + "node": ">=10.13.0" } }, - "node_modules/gulp-esbuild/node_modules/esbuild": { - "version": "0.19.9", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.9.tgz", - "integrity": "sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==", + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" }, "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.19.9", - "@esbuild/android-arm64": "0.19.9", - "@esbuild/android-x64": "0.19.9", - "@esbuild/darwin-arm64": "0.19.9", - "@esbuild/darwin-x64": "0.19.9", - "@esbuild/freebsd-arm64": "0.19.9", - "@esbuild/freebsd-x64": "0.19.9", - "@esbuild/linux-arm": "0.19.9", - "@esbuild/linux-arm64": "0.19.9", - "@esbuild/linux-ia32": "0.19.9", - "@esbuild/linux-loong64": "0.19.9", - "@esbuild/linux-mips64el": "0.19.9", - "@esbuild/linux-ppc64": "0.19.9", - "@esbuild/linux-riscv64": "0.19.9", - "@esbuild/linux-s390x": "0.19.9", - "@esbuild/linux-x64": "0.19.9", - "@esbuild/netbsd-x64": "0.19.9", - "@esbuild/openbsd-x64": "0.19.9", - "@esbuild/sunos-x64": "0.19.9", - "@esbuild/win32-arm64": "0.19.9", - "@esbuild/win32-ia32": "0.19.9", - "@esbuild/win32-x64": "0.19.9" + "node": ">=0.10.0" } }, - "node_modules/gulp-replace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/gulp-replace/-/gulp-replace-1.1.4.tgz", - "integrity": "sha512-SVSF7ikuWKhpAW4l4wapAqPPSToJoiNKsbDoUnRrSgwZHH7lH8pbPeQj1aOVYQrbZKhfSVBxVW+Py7vtulRktw==", + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "*", - "@types/vinyl": "^2.0.4", - "istextorbinary": "^3.0.0", - "replacestream": "^4.0.3", - "yargs-parser": ">=5.0.0-security.0" + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" }, - "engines": { - "node": ">=10" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/gulp-typescript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gulp-typescript/-/gulp-typescript-5.0.1.tgz", - "integrity": "sha512-YuMMlylyJtUSHG1/wuSVTrZp60k1dMEFKYOvDf7OvbAJWrDtxxD4oZon4ancdWwzjj30ztiidhe4VXJniF0pIQ==", + "node_modules/is-arguments": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-colors": "^3.0.5", - "plugin-error": "^1.0.1", - "source-map": "^0.7.3", - "through2": "^3.0.0", - "vinyl": "^2.1.0", - "vinyl-fs": "^3.0.3" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">= 8" + "node": ">= 0.4" }, - "peerDependencies": { - "typescript": "~2.7.1 || >=2.8.0-dev || >=2.9.0-dev || ~3.0.0 || >=3.0.0-dev || >=3.1.0-dev || >= 3.2.0-dev || >= 3.3.0-dev" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-typescript/node_modules/ansi-colors": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", - "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-typescript/node_modules/plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">= 0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-typescript/node_modules/plugin-error/node_modules/ansi-colors": { + "node_modules/is-bigint": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-wrap": "^0.1.0" + "has-bigints": "^1.0.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-typescript/node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, "engines": { - "node": ">= 0.10" + "node": ">=8" } }, - "node_modules/gulp-typescript/node_modules/through2": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.2.tgz", - "integrity": "sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ==", + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, + "license": "MIT", "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "2 || 3" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp-typescript/node_modules/vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-bun-module": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.2.1.tgz", + "integrity": "sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==", "dev": true, "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, + "semver": "^7.6.3" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, "engines": { - "node": ">= 0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp/node_modules/fs-mkdirp-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", - "integrity": "sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==", + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, "dependencies": { - "graceful-fs": "^4.2.8", - "streamx": "^2.12.0" + "hasown": "^2.0.2" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp/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==", + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp/node_modules/glob-stream": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-8.0.2.tgz", - "integrity": "sha512-R8z6eTB55t3QeZMmU1C+Gv+t5UnNRkA55c5yo67fAVfxODxieTwsjNG7utxS/73NdP1NbDgCrhVEg2h00y4fFw==", + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, + "license": "MIT", "dependencies": { - "@gulpjs/to-absolute-glob": "^4.0.0", - "anymatch": "^3.1.3", - "fastq": "^1.13.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "is-negated-glob": "^1.0.0", - "normalize-path": "^3.0.0", - "streamx": "^2.12.5" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp/node_modules/lead": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", - "integrity": "sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==", + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "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": ">=10.13.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gulp/node_modules/now-and-later": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", - "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "dependencies": { - "once": "^1.4.0" + "is-plain-object": "^2.0.4" }, "engines": { - "node": ">= 10.13.0" + "node": ">=0.10.0" } }, - "node_modules/gulp/node_modules/resolve-options": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-2.0.0.tgz", - "integrity": "sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==", + "node_modules/is-extendable/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "dependencies": { - "value-or-function": "^4.0.0" + "isobject": "^3.0.1" }, "engines": { - "node": ">= 10.13.0" + "node": ">=0.10.0" } }, - "node_modules/gulp/node_modules/to-through": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-3.0.0.tgz", - "integrity": "sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, + "license": "MIT", "dependencies": { - "streamx": "^2.12.5" + "call-bound": "^1.0.3" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulp/node_modules/value-or-function": { + "node_modules/is-fullwidth-code-point": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz", - "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", "dev": true, "engines": { - "node": ">= 10.13.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gulp/node_modules/vinyl-fs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.0.tgz", - "integrity": "sha512-7GbgBnYfaquMk3Qu9g22x000vbYkOex32930rBnc3qByw6HfMEAoELjCjoJv4HuEQxHAurT+nvMHm6MnJllFLw==", + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", "dev": true, - "dependencies": { - "fs-mkdirp-stream": "^2.0.1", - "glob-stream": "^8.0.0", - "graceful-fs": "^4.2.11", - "iconv-lite": "^0.6.3", - "is-valid-glob": "^1.0.0", - "lead": "^4.0.0", - "normalize-path": "3.0.0", - "resolve-options": "^2.0.0", - "stream-composer": "^1.0.2", - "streamx": "^2.14.0", - "to-through": "^3.0.0", - "value-or-function": "^4.0.0", - "vinyl": "^3.0.0", - "vinyl-sourcemap": "^2.0.0" - }, "engines": { - "node": ">=10.13.0" + "node": ">=6" } }, - "node_modules/gulp/node_modules/vinyl-sourcemap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", - "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", "dev": true, "dependencies": { - "convert-source-map": "^2.0.0", - "graceful-fs": "^4.2.10", - "now-and-later": "^3.0.0", - "streamx": "^2.12.5", - "vinyl": "^3.0.0", - "vinyl-contents": "^2.0.0" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gulplog": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz", - "integrity": "sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==", - "dev": true, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dependencies": { - "glogg": "^2.2.0" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">= 10.13.0" + "node": ">=0.10.0" } }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", "dev": true, + "license": "MIT", "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "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==", + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" - } - }, - "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" + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "node_modules/is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, "engines": { "node": ">= 0.4" @@ -14650,11 +15790,30 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/is-node-process": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", + "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==", + "license": "MIT" + }, + "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==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, "engines": { "node": ">= 0.4" }, @@ -14662,13 +15821,50 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", "dependencies": { - "has-symbols": "^1.0.3" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -14677,1173 +15873,1279 @@ "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==", + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, "dependencies": { - "function-bind": "^1.1.2" + "is-unc-path": "^1.0.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hast-util-heading-rank": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz", - "integrity": "sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==", + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, + "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hast-util-is-element": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", - "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "dev": true, - "dependencies": { - "@types/hast": "^3.0.0" + "license": "MIT", + "engines": { + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hast-util-to-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.0.tgz", - "integrity": "sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==", + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, + "license": "MIT", "dependencies": { - "@types/hast": "^3.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/headers-polyfill": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.2.tgz", - "integrity": "sha512-EWGTfnTqAO2L/j5HZgoM/3z82L7necsJ0pO9Tp0X1wil3PDLrkypTBRgVO2ExehEEvUycejZD3FuRaXpZZc3kw==" - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dev": true, - "dependencies": { - "react-is": "^16.7.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, + "license": "MIT", "dependencies": { - "parse-passwd": "^1.0.0" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "which-typed-array": "^1.1.16" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "unc-path-regex": "^0.1.2" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "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==", + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", "dev": true }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", + "node_modules/is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", "dev": true, - "dependencies": { - "whatwg-encoding": "^2.0.0" - }, "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/html-escaper": { + "node_modules/is-weakmap": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", "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" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, + "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, "engines": { - "node": ">= 6" + "node": ">=0.10.0" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "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": { - "agent-base": "6", - "debug": "4" + "is-docker": "^2.0.0" }, "engines": { - "node": ">= 6" + "node": ">=8" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, "engines": { - "node": ">=10.17.0" + "node": ">=0.10.0" } }, - "node_modules/husky": { - "version": "9.0.11", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.11.tgz", - "integrity": "sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==", + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", "dev": true, - "bin": { - "husky": "bin.mjs" - }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" + "node": ">=8" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "@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": ">=0.10.0" + "node": ">=8" } }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "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" - } - ] + "bin": { + "semver": "bin/semver.js" + } }, - "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">= 4" + "node": ">=8" } }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", - "dev": true - }, - "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==", + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "semver": "^7.5.3" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/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==", + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/import-in-the-middle": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.4.2.tgz", - "integrity": "sha512-9WOz1Yh/cvO/p69sxRmhyQwrIGGSp7EIdcb+fFNVi7CzQGQB8U1/1XrKVSbEd/GNOAeM0peJtmi7+qphe7NvAw==", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, "dependencies": { - "acorn": "^8.8.2", - "acorn-import-assertions": "^1.9.0", - "cjs-module-lexer": "^1.2.2", - "module-details-from-path": "^1.0.3" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" } }, - "node_modules/import-in-the-middle/node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "bin": { - "acorn": "bin/acorn" - }, "engines": { - "node": ">=0.4.0" + "node": ">=0.10.0" } }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", "dev": true, "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-local/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "node_modules/istextorbinary": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-3.3.0.tgz", + "integrity": "sha512-Tvq1W6NAcZeJ8op+Hq7tdZ434rqnMx4CCZ7H0ff83uEloDvVbqAwaMTZcafKGJT0VHkYzuXUiCY4hlXQg6WfoQ==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "binaryextensions": "^2.2.0", + "textextensions": "^3.2.0" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://bevry.me/fund" } }, - "node_modules/import-local/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", "dev": true, + "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/import-local/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "node_modules/jackspeak": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz", + "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": ">=6" + "node": "20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/import-local/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/jake": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "find-up": "^4.0.0" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=0.8.19" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/indent-string": { + "node_modules/jake/node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "node_modules/jest": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest/-/jest-30.0.0-alpha.7.tgz", + "integrity": "sha512-wgecbBctx5wBsRO5WePp5v47H9PX9QGzums9iirHm6qYfvaZ3vk7gYGKP1KiDxm5SjmQ1Ae0eG1kcyW8MrRYgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "30.0.0-alpha.7", + "@jest/types": "30.0.0-alpha.7", + "import-local": "^3.0.2", + "jest-cli": "30.0.0-alpha.7" + }, + "bin": { + "jest": "bin/jest.js" + }, "engines": { - "node": ">=12" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "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": ">=10.13.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "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": ">= 0.10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "node_modules/jest-circus/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, + "license": "MIT", "dependencies": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-absolute-url": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz", - "integrity": "sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==", + "node_modules/jest-circus/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "node_modules/jest-circus/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "node_modules/jest-circus/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-circus/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, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-async-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", - "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "node_modules/jest-circus/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "node_modules/jest-circus/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-circus/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { - "binary-extensions": "^2.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "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": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "@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": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/jest-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "node_modules/jest-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "hasown": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "node_modules/jest-cli/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "is-typed-array": "^1.1.13" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "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": { - "has-tostringtag": "^1.0.0" + "@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": ">= 0.4" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "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==", + "node_modules/jest-config/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "bin": { - "is-docker": "cli.js" + "dependencies": { + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "node_modules/jest-config/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "is-plain-object": "^2.0.4" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-extendable/node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/jest-config/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, "dependencies": { - "isobject": "^3.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=0.10.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/jest-config/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "node_modules/jest-config/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "node_modules/jest-config/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } + "node_modules/jest-config/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true }, - "node_modules/is-generator-function": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", - "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "node_modules/jest-config/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "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": { - "is-extglob": "^2.1.1" + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-inside-container": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", - "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "is-docker": "^3.0.0" - }, - "bin": { - "is-inside-container": "cli.js" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=14.16" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-inside-container/node_modules/is-docker": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", - "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "bin": { - "is-docker": "cli.js" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "node_modules/jest-diff/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/is-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz", - "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "node_modules/jest-diff/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-node-process": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz", - "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==" - }, - "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==", - "engines": { - "node": ">=0.12.0" - } + "node_modules/jest-diff/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" + "has-flag": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, "engines": { "node": ">=8" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "dev": true - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "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": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "detect-newline": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "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": { - "is-unc-path": "^1.0.0" + "@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": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-set": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz", - "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==", + "node_modules/jest-each/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "node_modules/jest-each/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "call-bind": "^1.0.7" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "node_modules/jest-each/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "node_modules/jest-each/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "node_modules/jest-each/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-each/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "which-typed-array": "^1.1.14" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "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": { - "unc-path-regex": "^0.1.2" + "@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": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "node_modules/jest-environment-node/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, - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true - }, - "node_modules/is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", + "node_modules/jest-environment-node/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": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-weakmap": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", - "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "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, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "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": { - "call-bind": "^1.0.2" + "@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" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/is-weakset": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", - "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "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": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "node_modules/jest-leak-detector/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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==", + "node_modules/jest-leak-detector/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "is-docker": "^2.0.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "node_modules/jest-leak-detector/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "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": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "node_modules/jest-matcher-utils/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@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" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "node_modules/jest-matcher-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", + "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { + "node_modules/jest-matcher-utils/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -15852,22 +17154,39 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, "dependencies": { - "semver": "^7.5.3" + "@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/jest-matcher-utils/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { + "node_modules/jest-matcher-utils/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-matcher-utils/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -15879,164 +17198,170 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "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": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" + "@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": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "node_modules/jest-message-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/istextorbinary": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-3.3.0.tgz", - "integrity": "sha512-Tvq1W6NAcZeJ8op+Hq7tdZ434rqnMx4CCZ7H0ff83uEloDvVbqAwaMTZcafKGJT0VHkYzuXUiCY4hlXQg6WfoQ==", + "node_modules/jest-message-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "binaryextensions": "^2.2.0", - "textextensions": "^3.2.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://bevry.me/fund" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/iterator.prototype": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", - "integrity": "sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==", + "node_modules/jest-message-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" + "engines": { + "node": ">=8" } }, - "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "node_modules/jest-message-util/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "dependencies": { - "@isaacs/cliui": "^8.0.2" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=14" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", - "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "node_modules/jest-message-util/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/jest-message-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "@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" + "has-flag": "^4.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" + "node": ">=8" + } + }, + "node_modules/jest-mock": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.0.0-alpha.7.tgz", + "integrity": "sha512-HQc7Uem+l5hzVZNMKpUV5F27AahfgmMuYbyRT5NV9OGD2WGkw9BouKAcV5tFGykcQc2+Rt5kk/hF1l5qi4Iwrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.0-alpha.7", + "@types/node": "*", + "jest-util": "30.0.0-alpha.7" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "engines": { + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "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==", + "node_modules/jest-mock/node_modules/@jest/schemas": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.0-alpha.7.tgz", + "integrity": "sha512-fzJDwdg3E8Gq+Aqo/h+JQc1ZD+Mqbkz7OVqpoUa0A2Btd70zdgu1Hza8AyhJjr83paRQ+ZCHnHepp4/+tpqDFQ==", "dev": true, + "license": "MIT", "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" + "@sinclair/typebox": "^0.34.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.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==", + "node_modules/jest-mock/node_modules/@jest/types": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.0-alpha.7.tgz", + "integrity": "sha512-hrdUqtIjUMpoNlpmo4DQfe6fvD0Rk02kdOv0+AsAbO689llpzNmb+kLcojzKp/H2jVGqcYrUb0wNSRgn4KcuqA==", "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", + "@jest/pattern": "30.0.0-alpha.7", + "@jest/schemas": "30.0.0-alpha.7", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", "@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" + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-circus/node_modules/ansi-styles": { + "node_modules/jest-mock/node_modules/@sinclair/typebox": { + "version": "0.34.31", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.31.tgz", + "integrity": "sha512-qQ71T9DsITbX3dVCrcBERbs11YuSMg3wZPnT472JhqhWGPdiLgyvihJXU8m+ADJtJvRdjATIiACJD22dEknBrQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-mock/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -16047,11 +17372,12 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-circus/node_modules/chalk": { + "node_modules/jest-mock/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -16063,66 +17389,69 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-circus/node_modules/dedent": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", - "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "node_modules/jest-mock/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", "dev": true, - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" } + ], + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/jest-circus/node_modules/has-flag": { + "node_modules/jest-mock/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jest-circus/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/jest-mock/node_modules/jest-util": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.0-alpha.7.tgz", + "integrity": "sha512-8slx+UQVqYE7WgkOyAab//u0YlTKXFIv31+nsHNFpT0boE5E/w4uJ/HSer0SWpUOotcrGLveeWYi2Pyy8gxVfg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@jest/types": "30.0.0-alpha.7", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^4.0.0", + "graceful-fs": "^4.2.9", + "picomatch": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-circus/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/jest-mock/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/jest-circus/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/jest-circus/node_modules/supports-color": { + "node_modules/jest-mock/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -16130,40 +17459,66 @@ "node": ">=8" } }, - "node_modules/jest-cli": { + "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-cli/-/jest-cli-29.7.0.tgz", - "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", "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", + "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", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" + "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" }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-cli/node_modules/ansi-styles": { + "node_modules/jest-resolve/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -16178,7 +17533,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-cli/node_modules/chalk": { + "node_modules/jest-resolve/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -16194,7 +17549,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-cli/node_modules/has-flag": { + "node_modules/jest-resolve/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -16203,7 +17558,7 @@ "node": ">=8" } }, - "node_modules/jest-cli/node_modules/supports-color": { + "node_modules/jest-resolve/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -16215,103 +17570,137 @@ "node": ">=8" } }, - "node_modules/jest-config": { + "node_modules/jest-runner": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", - "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", "dev": true, "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", + "@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", - "babel-jest": "^29.7.0", + "@types/node": "*", "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", + "emittery": "^0.13.1", "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", + "jest-docblock": "^29.7.0", "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", + "jest-runtime": "^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" + "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" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } } }, - "node_modules/jest-config/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/jest-runner-vscode": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jest-runner-vscode/-/jest-runner-vscode-3.0.1.tgz", + "integrity": "sha512-QTiOK2zcI4CLWa8Ejbigz/k8SYQsFLYY1KWNfR5qR2Ajs98P1yHZSBqVLIq+VRnxxT5dqKzTsg/StD8dWfHqHg==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "@achrinza/node-ipc": "^9.2.5", + "@jest/core": "^29.2.1", + "@jest/reporters": "^29.2.1", + "@jest/test-result": "^29.2.1", + "@jest/types": "^29.2.1", + "@vscode/test-electron": "^2.1.5", + "cosmiconfig": "^7.0.1", + "jest-cli": "^29.2.1", + "jest-environment-node": "^29.2.1", + "jest-runner": "^29.2.1", + "js-message": "^1.0.7" }, "engines": { - "node": ">=8" + "node": ">=16.14.2", + "vscode": ">=1.71.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/adalinesimonian" } }, - "node_modules/jest-config/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-runner-vscode/node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" }, "engines": { "node": ">=10" + } + }, + "node_modules/jest-runner-vscode/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/jest-runner/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, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-config/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/jest-runner/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jest-runner/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-config/node_modules/has-flag": { + "node_modules/jest-runner/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -16320,39 +17709,41 @@ "node": ">=8" } }, - "node_modules/jest-config/node_modules/pretty-format": { + "node_modules/jest-runner/node_modules/jest-mock": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@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-config/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/jest-runner/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/jest-config/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "node_modules/jest-runner/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } }, - "node_modules/jest-config/node_modules/supports-color": { + "node_modules/jest-runner/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -16364,22 +17755,56 @@ "node": ">=8" } }, - "node_modules/jest-diff": { + "node_modules/jest-runtime": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "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", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.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-diff/node_modules/ansi-styles": { + "node_modules/jest-runtime/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, + "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-runtime/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -16394,7 +17819,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-diff/node_modules/chalk": { + "node_modules/jest-runtime/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -16410,7 +17835,27 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-diff/node_modules/has-flag": { + "node_modules/jest-runtime/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/jest-runtime/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -16419,39 +17864,21 @@ "node": ">=8" } }, - "node_modules/jest-diff/node_modules/pretty-format": { + "node_modules/jest-runtime/node_modules/jest-mock": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@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-diff/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jest-diff/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/jest-diff/node_modules/supports-color": { + "node_modules/jest-runtime/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -16463,35 +17890,38 @@ "node": ">=8" } }, - "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": { + "node_modules/jest-snapshot": { "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==", + "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", - "pretty-format": "^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-each/node_modules/ansi-styles": { + "node_modules/jest-snapshot/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -16506,7 +17936,7 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-each/node_modules/chalk": { + "node_modules/jest-snapshot/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -16522,7 +17952,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-each/node_modules/has-flag": { + "node_modules/jest-snapshot/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -16531,7 +17961,7 @@ "node": ">=8" } }, - "node_modules/jest-each/node_modules/pretty-format": { + "node_modules/jest-snapshot/node_modules/pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", @@ -16545,7 +17975,7 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-each/node_modules/pretty-format/node_modules/ansi-styles": { + "node_modules/jest-snapshot/node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", @@ -16557,191 +17987,111 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-each/node_modules/react-is": { + "node_modules/jest-snapshot/node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, - "node_modules/jest-each/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-environment-jsdom": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz", - "integrity": "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/jsdom": "^20.0.0", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0", - "jsdom": "^20.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jest-environment-jsdom/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-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==", + "node_modules/jest-snapshot/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "@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" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-environment-node/node_modules/jest-mock": { + "node_modules/jest-util": { "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", - "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "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": "*", - "jest-util": "^29.7.0" + "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-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==", + "node_modules/jest-util/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "@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" + "color-convert": "^2.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "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==", + "node_modules/jest-util/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-leak-detector/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/jest-util/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=8" } }, - "node_modules/jest-leak-detector/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/jest-util/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-leak-detector/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/jest-matcher-utils": { + "node_modules/jest-validate": { "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==", + "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-diff": "^29.7.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-matcher-utils/node_modules/ansi-styles": { + "node_modules/jest-validate/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -16756,7 +18106,19 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-matcher-utils/node_modules/chalk": { + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-validate/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", @@ -16772,7 +18134,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-matcher-utils/node_modules/has-flag": { + "node_modules/jest-validate/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", @@ -16781,7 +18143,7 @@ "node": ">=8" } }, - "node_modules/jest-matcher-utils/node_modules/pretty-format": { + "node_modules/jest-validate/node_modules/pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", @@ -16795,7 +18157,7 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/jest-matcher-utils/node_modules/pretty-format/node_modules/ansi-styles": { + "node_modules/jest-validate/node_modules/pretty-format/node_modules/ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", @@ -16807,13 +18169,13 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-matcher-utils/node_modules/react-is": { + "node_modules/jest-validate/node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", "dev": true }, - "node_modules/jest-matcher-utils/node_modules/supports-color": { + "node_modules/jest-validate/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", @@ -16825,27 +18187,26 @@ "node": ">=8" } }, - "node_modules/jest-message-util": { + "node_modules/jest-watcher": { "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==", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.12.13", + "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", + "@types/node": "*", + "ansi-escapes": "^4.2.1", "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" + "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-message-util/node_modules/ansi-styles": { + "node_modules/jest-watcher/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", @@ -16860,289 +18221,493 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-message-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest-watcher/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jest-watcher/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-watcher/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "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/jest/node_modules/@jest/console": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-30.0.0-alpha.7.tgz", + "integrity": "sha512-6tNcZwg3dJeww2Ne9Y+x0Au4OPtbWwYzOfwh2ecK/Yp3/KNkULp5oNvx0qJUvvGgQWSBbYvLRrgLnoRlRhpZew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.0-alpha.7", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "30.0.0-alpha.7", + "jest-util": "30.0.0-alpha.7", + "slash": "^3.0.0" + }, + "engines": { + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" + } + }, + "node_modules/jest/node_modules/@jest/core": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-30.0.0-alpha.7.tgz", + "integrity": "sha512-c+062gpdgytcBlIucMtjWxQ6ETgkFeVeP+TwTyP9DNtM8iNAO/UhOGIgO95Cd3nSZqH/nPN/PFWfuLwOZ55GOg==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jest/console": "30.0.0-alpha.7", + "@jest/pattern": "30.0.0-alpha.7", + "@jest/reporters": "30.0.0-alpha.7", + "@jest/test-result": "30.0.0-alpha.7", + "@jest/transform": "30.0.0-alpha.7", + "@jest/types": "30.0.0-alpha.7", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^4.0.0", + "exit-x": "^0.2.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "30.0.0-alpha.7", + "jest-config": "30.0.0-alpha.7", + "jest-haste-map": "30.0.0-alpha.7", + "jest-message-util": "30.0.0-alpha.7", + "jest-regex-util": "30.0.0-alpha.7", + "jest-resolve": "30.0.0-alpha.7", + "jest-resolve-dependencies": "30.0.0-alpha.7", + "jest-runner": "30.0.0-alpha.7", + "jest-runtime": "30.0.0-alpha.7", + "jest-snapshot": "30.0.0-alpha.7", + "jest-util": "30.0.0-alpha.7", + "jest-validate": "30.0.0-alpha.7", + "jest-watcher": "30.0.0-alpha.7", + "micromatch": "^4.0.8", + "pretty-format": "30.0.0-alpha.7", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=10" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "node_modules/jest-message-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jest/node_modules/@jest/expect": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-30.0.0-alpha.7.tgz", + "integrity": "sha512-YevyfPQaCyG1SPv+9Zu05Qfds73nxv/exKrfPj0oVzDGaJEBPXAuUYqt0uKu17q8OWCNYaYcAY0szTqa7GnVnQ==", "dev": true, + "license": "MIT", + "dependencies": { + "expect": "30.0.0-alpha.7", + "jest-snapshot": "30.0.0-alpha.7" + }, "engines": { - "node": ">=8" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-message-util/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/jest/node_modules/@jest/expect-utils": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.0.0-alpha.7.tgz", + "integrity": "sha512-lr711aEHiXWM9X0BC/fH+HID5eatdCjluh2PKxKHPZbjmtWA5RiHXC/s16cPFI6voSnofOjDICvzNVxSO87ZrQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "jest-get-type": "30.0.0-alpha.7" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-message-util/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/jest/node_modules/@jest/fake-timers": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-30.0.0-alpha.7.tgz", + "integrity": "sha512-ct29bG+ebuRk1Re8nzxcMJIul1sE1Se0/PRwQwqbrLbInOw5H31q9DnqrhVhqgUgXosx7dyt1dJD8UvBfHBc4A==", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.0-alpha.7", + "@sinonjs/fake-timers": "^13.0.0", + "@types/node": "*", + "jest-message-util": "30.0.0-alpha.7", + "jest-mock": "30.0.0-alpha.7", + "jest-util": "30.0.0-alpha.7" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-message-util/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/jest-message-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest/node_modules/@jest/globals": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-30.0.0-alpha.7.tgz", + "integrity": "sha512-y5CKO76wPQfoqMVN+8DlYCU08mqhvfMDGV58j0XYYQIRWYOeIqvvveVBaq47ePknubsOBQeS0Z0zflQccZUnCg==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@jest/environment": "30.0.0-alpha.7", + "@jest/expect": "30.0.0-alpha.7", + "@jest/types": "30.0.0-alpha.7", + "jest-mock": "30.0.0-alpha.7" }, "engines": { - "node": ">=8" + "node": "^16.10.0 || ^18.12.0 || >=20.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==", + "node_modules/jest/node_modules/@jest/reporters": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-30.0.0-alpha.7.tgz", + "integrity": "sha512-DUDi4oV6Vk0aQEGJCKRZVVxpuCBZkBD/wzV2fXz2X3IVBq1lO27EJzv8BKDqdi3Fwr2J4vocynIp/aPb+XxXlQ==", "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "30.0.0-alpha.7", + "@jest/test-result": "30.0.0-alpha.7", + "@jest/transform": "30.0.0-alpha.7", + "@jest/types": "30.0.0-alpha.7", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit-x": "^0.2.2", + "glob": "^10.3.10", + "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": "^5.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "30.0.0-alpha.7", + "jest-util": "30.0.0-alpha.7", + "jest-worker": "30.0.0-alpha.7", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, "engines": { - "node": ">=6" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "peerDependencies": { - "jest-resolve": "*" + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" }, "peerDependenciesMeta": { - "jest-resolve": { + "node-notifier": { "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==", + "node_modules/jest/node_modules/@jest/schemas": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.0-alpha.7.tgz", + "integrity": "sha512-fzJDwdg3E8Gq+Aqo/h+JQc1ZD+Mqbkz7OVqpoUa0A2Btd70zdgu1Hza8AyhJjr83paRQ+ZCHnHepp4/+tpqDFQ==", "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.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==", + "node_modules/jest/node_modules/@jest/source-map": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-30.0.0-alpha.7.tgz", + "integrity": "sha512-zWk0ZjV2tOBhERTJagxjrRfCxb/X5SecekXJIm0U9vWNuKNKDmK1TQJcQP0SdtqM2aa5bNdjub3lg29l7E8EIw==", "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" + "@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": "^16.10.0 || ^18.12.0 || >=20.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==", + "node_modules/jest/node_modules/@jest/test-result": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-30.0.0-alpha.7.tgz", + "integrity": "sha512-+GUXXq5LocMv3FXddg9MxXcApaX4Jno6qFAz+pL/m3pxTy7nGPQPuEUXZelEEQevMrLP5ds2PxLGd6OVoV565Q==", "dev": true, + "license": "MIT", "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" + "@jest/console": "30.0.0-alpha.7", + "@jest/types": "30.0.0-alpha.7", + "@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": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-resolve/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/jest/node_modules/@jest/test-sequencer": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-30.0.0-alpha.7.tgz", + "integrity": "sha512-X4uXuY0nqg3/4SYrzIwScFs2KBGa0yIr/r4LLmakdrP0BzTOHOXZG+i3nqVlLFCjHwJQInuxDx79dI3UsJOt2A==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@jest/test-result": "30.0.0-alpha.7", + "graceful-fs": "^4.2.9", + "jest-haste-map": "30.0.0-alpha.7", + "slash": "^3.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-resolve/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest/node_modules/@jest/transform": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-30.0.0-alpha.7.tgz", + "integrity": "sha512-uv/gA0QdtnSHJLoQngSzJGXCjTDykJpQFUUuuYN/G9GVPM/aORyNb3ybkkozgjHSV9eC1hJCoQRuraEDJa1pSg==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@babel/core": "^7.11.6", + "@jest/types": "30.0.0-alpha.7", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^7.0.0", + "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": "30.0.0-alpha.7", + "jest-regex-util": "30.0.0-alpha.7", + "jest-util": "30.0.0-alpha.7", + "micromatch": "^4.0.8", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^5.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-resolve/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jest/node_modules/@jest/types": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.0.0-alpha.7.tgz", + "integrity": "sha512-hrdUqtIjUMpoNlpmo4DQfe6fvD0Rk02kdOv0+AsAbO689llpzNmb+kLcojzKp/H2jVGqcYrUb0wNSRgn4KcuqA==", "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.0-alpha.7", + "@jest/schemas": "30.0.0-alpha.7", + "@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": ">=8" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-resolve/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest/node_modules/@sinclair/typebox": { + "version": "0.34.31", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.31.tgz", + "integrity": "sha512-qQ71T9DsITbX3dVCrcBERbs11YuSMg3wZPnT472JhqhWGPdiLgyvihJXU8m+ADJtJvRdjATIiACJD22dEknBrQ==", "dev": true, + "license": "MIT" + }, + "node_modules/jest/node_modules/@sinonjs/fake-timers": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", + "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "has-flag": "^4.0.0" + "@sinonjs/commons": "^3.0.1" + } + }, + "node_modules/jest/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-runner": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", - "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "node_modules/jest/node_modules/babel-jest": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-30.0.0-alpha.7.tgz", + "integrity": "sha512-EGY3n/zQcuR88leKdFAt67DmUSEpc+0xqMhMuYMfT9H1rhVAIJD9hc3JId+vzOnKyhn/iQsDxKoRkNcGDAe0WQ==", "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": "*", + "@jest/transform": "30.0.0-alpha.7", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^7.0.0", + "babel-preset-jest": "30.0.0-alpha.7", "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" + "slash": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0" } }, - "node_modules/jest-runner-vscode": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jest-runner-vscode/-/jest-runner-vscode-3.0.1.tgz", - "integrity": "sha512-QTiOK2zcI4CLWa8Ejbigz/k8SYQsFLYY1KWNfR5qR2Ajs98P1yHZSBqVLIq+VRnxxT5dqKzTsg/StD8dWfHqHg==", + "node_modules/jest/node_modules/babel-plugin-istanbul": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-7.0.0.tgz", + "integrity": "sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@achrinza/node-ipc": "^9.2.5", - "@jest/core": "^29.2.1", - "@jest/reporters": "^29.2.1", - "@jest/test-result": "^29.2.1", - "@jest/types": "^29.2.1", - "@vscode/test-electron": "^2.1.5", - "cosmiconfig": "^7.0.1", - "jest-cli": "^29.2.1", - "jest-environment-node": "^29.2.1", - "jest-runner": "^29.2.1", - "js-message": "^1.0.7" + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-instrument": "^6.0.2", + "test-exclude": "^6.0.0" }, "engines": { - "node": ">=16.14.2", - "vscode": ">=1.71.0" - }, - "funding": { - "url": "https://github.com/sponsors/adalinesimonian" + "node": ">=12" } }, - "node_modules/jest-runner-vscode/node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "node_modules/jest/node_modules/babel-plugin-jest-hoist": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.0.0-alpha.7.tgz", + "integrity": "sha512-1EGEprSFBDxHdQvnkkklxdcmb6+WssLMTQU3FyzrBVUuzXOg5+D+Z909gGPZ4bhZ9VkrDGcNg08m6OjL2jh6Bg==", "dev": true, + "license": "MIT", "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14" }, "engines": { - "node": ">=10" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-runner-vscode/node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "node_modules/jest/node_modules/babel-preset-jest": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-30.0.0-alpha.7.tgz", + "integrity": "sha512-LUWdMJ6mIJhXv56hVe+t3/lxokSd0geN8+TT1FHjJAEdHXi+ye6TRqVggn6fdrL/mxXXg9QusAzHJVjF4vxWEA==", "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "30.0.0-alpha.7", + "babel-preset-current-node-syntax": "^1.0.0" + }, "engines": { - "node": ">= 6" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.11.0" } }, - "node_modules/jest-runner/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/jest/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, + "balanced-match": "^1.0.0" + } + }, + "node_modules/jest/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-runner/node_modules/chalk": { + "node_modules/jest/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17154,526 +18719,760 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-runner/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jest/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/jest-runner/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "node_modules/jest/node_modules/diff-sequences": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-30.0.0-alpha.7.tgz", + "integrity": "sha512-T8qx2cdaE0DW3nMpgf0jxOvSECOIkvPpjEeTs3qVT/+gzhZGLKjex4lc+dNiaLA92hDwmt6AG9WO/j2RUlNQJw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "node_modules/jest/node_modules/expect": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.0.0-alpha.7.tgz", + "integrity": "sha512-tWb6p3Dn1S8GTunR9jfsku6l6dkZrqZQ5smI+UWx0KIk5ugS0QuPo66w40NdWRWcH+JklC9Dk8Elh2S2M4FfSw==", "dev": true, + "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "@jest/expect-utils": "30.0.0-alpha.7", + "jest-get-type": "30.0.0-alpha.7", + "jest-matcher-utils": "30.0.0-alpha.7", + "jest-message-util": "30.0.0-alpha.7", + "jest-mock": "30.0.0-alpha.7", + "jest-util": "30.0.0-alpha.7" + }, + "engines": { + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-runner/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": ">=8" + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "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==", + "node_modules/jest/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "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" - }, + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/jest-runtime/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/jest/node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", + "integrity": "sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "color-convert": "^2.0.1" + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=10" } }, - "node_modules/jest-runtime/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest/node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/jest-runtime/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/jest/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" + "@isaacs/cliui": "^8.0.2" }, "funding": { "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/jest-runtime/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jest/node_modules/jest-changed-files": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-30.0.0-alpha.7.tgz", + "integrity": "sha512-H8LBMHv5FZ+zkSohhq6vYxVlDl4bogTw/8/Cm78Bw+jfTOH+DkrWUESC8GLCDgK2YA12PiczhCrgun9yaBwn0A==", "dev": true, + "license": "MIT", + "dependencies": { + "execa": "^5.0.0", + "jest-util": "30.0.0-alpha.7", + "p-limit": "^3.1.0" + }, "engines": { - "node": ">=8" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-runtime/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==", + "node_modules/jest/node_modules/jest-circus": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-30.0.0-alpha.7.tgz", + "integrity": "sha512-lTd93dNI5zG15AejGuGetIPr9n0BbF6JhaTjtmsENFYOpb0cuNv3supdGp9y+eWW06jbg4PNANHWAyAakNRPqw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", + "@jest/environment": "30.0.0-alpha.7", + "@jest/expect": "30.0.0-alpha.7", + "@jest/test-result": "30.0.0-alpha.7", + "@jest/types": "30.0.0-alpha.7", "@types/node": "*", - "jest-util": "^29.7.0" + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "30.0.0-alpha.7", + "jest-matcher-utils": "30.0.0-alpha.7", + "jest-message-util": "30.0.0-alpha.7", + "jest-runtime": "30.0.0-alpha.7", + "jest-snapshot": "30.0.0-alpha.7", + "jest-util": "30.0.0-alpha.7", + "p-limit": "^3.1.0", + "pretty-format": "30.0.0-alpha.7", + "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": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-runtime/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest/node_modules/jest-cli": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-30.0.0-alpha.7.tgz", + "integrity": "sha512-DemFDFvWPtdHr61L1MSkzY0VbUtjkQeVAulMmtrJOH25xw8mPQAQVD97zmFLbtvzasxTwY8C36C/dHViAM7rpA==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@jest/core": "30.0.0-alpha.7", + "@jest/test-result": "30.0.0-alpha.7", + "@jest/types": "30.0.0-alpha.7", + "chalk": "^4.0.0", + "exit-x": "^0.2.2", + "import-local": "^3.0.2", + "jest-config": "30.0.0-alpha.7", + "jest-util": "30.0.0-alpha.7", + "jest-validate": "30.0.0-alpha.7", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" }, "engines": { - "node": ">=8" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } } }, - "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==", + "node_modules/jest/node_modules/jest-config": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-30.0.0-alpha.7.tgz", + "integrity": "sha512-YTzk8fQ2xwvEfIupwKxDpqHblWxtePTTfCA7Pto1jretggvFtNZnVWiIAqq7/GabsYoTsFl8uj7iKzxTZzXmXg==", "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", + "@jest/pattern": "30.0.0-alpha.7", + "@jest/test-sequencer": "30.0.0-alpha.7", + "@jest/types": "30.0.0-alpha.7", + "babel-jest": "30.0.0-alpha.7", "chalk": "^4.0.0", - "expect": "^29.7.0", + "ci-info": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^10.3.10", "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" + "jest-circus": "30.0.0-alpha.7", + "jest-docblock": "30.0.0-alpha.7", + "jest-environment-node": "30.0.0-alpha.7", + "jest-get-type": "30.0.0-alpha.7", + "jest-regex-util": "30.0.0-alpha.7", + "jest-resolve": "30.0.0-alpha.7", + "jest-runner": "30.0.0-alpha.7", + "jest-util": "30.0.0-alpha.7", + "jest-validate": "30.0.0-alpha.7", + "micromatch": "^4.0.8", + "parse-json": "^5.2.0", + "pretty-format": "30.0.0-alpha.7", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "esbuild-register": ">=3.4.0", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "esbuild-register": { + "optional": true + }, + "ts-node": { + "optional": true + } } }, - "node_modules/jest-snapshot/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/jest/node_modules/jest-diff": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.0.0-alpha.7.tgz", + "integrity": "sha512-a2O+O+qBIhpUtKSwApNDN6zWqNuP1vfSN1maXmm0ix1+GkBezSdNWSGlcQqJNVM1cwSD/oQQo7EzhixpMi6TWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "30.0.0-alpha.7", + "jest-get-type": "30.0.0-alpha.7", + "pretty-format": "30.0.0-alpha.7" + }, + "engines": { + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" + } + }, + "node_modules/jest/node_modules/jest-docblock": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-30.0.0-alpha.7.tgz", + "integrity": "sha512-vAid4aUsBD0yke/NIbmSBi0BuJqcyqX6f4vR//7VADq6ASWzmadfpRPSKrfvOeBy+ElBGVNf9UVaH4+eSPfrcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" + } + }, + "node_modules/jest/node_modules/jest-each": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-30.0.0-alpha.7.tgz", + "integrity": "sha512-+l0iwn3am4WaIk00+r2qt5yA1kD/GfS9ARIfp/SXNb+4ztxgtK4o+/uCDdUWjiowtPbJtSDDcDcNb4l8/2bgyQ==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@jest/types": "30.0.0-alpha.7", + "chalk": "^4.0.0", + "jest-get-type": "30.0.0-alpha.7", + "jest-util": "30.0.0-alpha.7", + "pretty-format": "30.0.0-alpha.7" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-snapshot/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest/node_modules/jest-environment-node": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-30.0.0-alpha.7.tgz", + "integrity": "sha512-d2WEhVIO75wXaSupVUSsn4VF0G9XIXlKPKMrppEJaHLe+EDtt6lBS6TI7CD1YrxS+0Jgs6+b428tKc4xUZlyMA==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jest/environment": "30.0.0-alpha.7", + "@jest/fake-timers": "30.0.0-alpha.7", + "@jest/types": "30.0.0-alpha.7", + "@types/node": "*", + "jest-mock": "30.0.0-alpha.7", + "jest-util": "30.0.0-alpha.7" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-snapshot/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jest/node_modules/jest-get-type": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-30.0.0-alpha.7.tgz", + "integrity": "sha512-0Zt3y51PSw3FZxgRYyoC6TlKnL2Z2wMWS1NCQbs/CrmNEDRNpx9ZMF+UIByQgFcDT+fB3U/gwKeLtmSpNhJRNw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-snapshot/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/jest/node_modules/jest-haste-map": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-30.0.0-alpha.7.tgz", + "integrity": "sha512-Yxxbsm00ne7b1kis8WEkCl1gf+7/TQl8S25iyGp+mDHvhzP8SFpX7Pi1Mi1D+Y0kAO8A0S+6s5UO9QXj9CKCcg==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@jest/types": "30.0.0-alpha.7", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "30.0.0-alpha.7", + "jest-util": "30.0.0-alpha.7", + "jest-worker": "30.0.0-alpha.7", + "micromatch": "^4.0.8", + "walker": "^1.0.8" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" } }, - "node_modules/jest-snapshot/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/jest/node_modules/jest-leak-detector": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-30.0.0-alpha.7.tgz", + "integrity": "sha512-MdS+e4GnipvUsh7WBYz+hFLTiLhn28asqAFugUKL8IDTHJRhwKi0QRaKRFUXDyA/RX3HWuobeQisR/YMjdsgcw==", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "jest-get-type": "30.0.0-alpha.7", + "pretty-format": "30.0.0-alpha.7" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-snapshot/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/jest-snapshot/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest/node_modules/jest-matcher-utils": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.0.0-alpha.7.tgz", + "integrity": "sha512-qD99h6nz8VXD+qimS4BSfFKtWXsDsFtKk10jGBdo5+yiuSViY/plr1MWKA1QpbJswXmqcTiPeoViNmhUKqjefw==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "chalk": "^4.0.0", + "jest-diff": "30.0.0-alpha.7", + "jest-get-type": "30.0.0-alpha.7", + "pretty-format": "30.0.0-alpha.7" }, "engines": { - "node": ">=8" + "node": "^16.10.0 || ^18.12.0 || >=20.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==", + "node_modules/jest/node_modules/jest-message-util": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.0.0-alpha.7.tgz", + "integrity": "sha512-Wzfx5D8SQwdeb4iXex86ddzTMK2QTc0FUIIFEQ7VuQ+RWEcCRgpOPu6QaQqLl9X8q/JZ1yU/6ZIhb7dpJ6TnWw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", + "@babel/code-frame": "^7.12.13", + "@jest/types": "30.0.0-alpha.7", + "@types/stack-utils": "^2.0.0", "chalk": "^4.0.0", - "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" + "micromatch": "^4.0.8", + "pretty-format": "30.0.0-alpha.7", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-util/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/jest/node_modules/jest-regex-util": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.0-alpha.7.tgz", + "integrity": "sha512-EUHpErwer3WQVcX1wKlvGHtIzVnGz5PzFVzp3/PzI+kTGduDvo0JuOnKHWuBYVwc5TADQmrdNiVU3+25swZoug==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-util/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest/node_modules/jest-resolve": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-30.0.0-alpha.7.tgz", + "integrity": "sha512-NukCyDlEv2rw7pM+Tl8tAvxM9di1Svxdx84HM6V2XB9PvPXxxrcfepWpsle09/ypYCRnSPlLpn4j5nQUsVLHZA==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "30.0.0-alpha.7", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "30.0.0-alpha.7", + "jest-validate": "30.0.0-alpha.7", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-util/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jest/node_modules/jest-resolve-dependencies": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-30.0.0-alpha.7.tgz", + "integrity": "sha512-6BbZrjAvJIKmD6gfh1moaAxUnKi7QM9L4y9ciV7OMQmbbPRcRynUs/Pfdh5Z1dcxuyYuSV95Q6XIt77SK6ePCQ==", "dev": true, + "license": "MIT", + "dependencies": { + "jest-regex-util": "30.0.0-alpha.7", + "jest-snapshot": "30.0.0-alpha.7" + }, "engines": { - "node": ">=8" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-util/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest/node_modules/jest-runner": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-30.0.0-alpha.7.tgz", + "integrity": "sha512-UiXWHn55UfPrDH+F1XO027exFyYNkR7dNgmX9L4Lcmpb3oxDl83ITFdUZZFJwQtwVWNWPziKsCQD9aUPJnlx7Q==", "dev": true, + "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "@jest/console": "30.0.0-alpha.7", + "@jest/environment": "30.0.0-alpha.7", + "@jest/test-result": "30.0.0-alpha.7", + "@jest/transform": "30.0.0-alpha.7", + "@jest/types": "30.0.0-alpha.7", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "30.0.0-alpha.7", + "jest-environment-node": "30.0.0-alpha.7", + "jest-haste-map": "30.0.0-alpha.7", + "jest-leak-detector": "30.0.0-alpha.7", + "jest-message-util": "30.0.0-alpha.7", + "jest-resolve": "30.0.0-alpha.7", + "jest-runtime": "30.0.0-alpha.7", + "jest-util": "30.0.0-alpha.7", + "jest-watcher": "30.0.0-alpha.7", + "jest-worker": "30.0.0-alpha.7", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" }, "engines": { - "node": ">=8" + "node": "^16.10.0 || ^18.12.0 || >=20.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==", + "node_modules/jest/node_modules/jest-runtime": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-30.0.0-alpha.7.tgz", + "integrity": "sha512-BRgyqgFRwo+faZDh8LAQ1se+Qu3j9aNtPPm+31Wh+Nrg5On4uEJ3jwqdV5WlRR3A+nGflks3QmRBI/0zeT/3oA==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", + "@jest/environment": "30.0.0-alpha.7", + "@jest/fake-timers": "30.0.0-alpha.7", + "@jest/globals": "30.0.0-alpha.7", + "@jest/source-map": "30.0.0-alpha.7", + "@jest/test-result": "30.0.0-alpha.7", + "@jest/transform": "30.0.0-alpha.7", + "@jest/types": "30.0.0-alpha.7", + "@types/node": "*", "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^10.3.10", + "graceful-fs": "^4.2.9", + "jest-haste-map": "30.0.0-alpha.7", + "jest-message-util": "30.0.0-alpha.7", + "jest-mock": "30.0.0-alpha.7", + "jest-regex-util": "30.0.0-alpha.7", + "jest-resolve": "30.0.0-alpha.7", + "jest-snapshot": "30.0.0-alpha.7", + "jest-util": "30.0.0-alpha.7", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/jest/node_modules/jest-snapshot": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-30.0.0-alpha.7.tgz", + "integrity": "sha512-c9T892KMUTJJp0FtiR/ynFcIWeS5y7bH/DItXUws1aBO4BA6BxU/qG/1CBHCqmuSFPLmYaKy0wGPEdbXmXchEQ==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "@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": "30.0.0-alpha.7", + "@jest/snapshot-utils": "30.0.0-alpha.7", + "@jest/transform": "30.0.0-alpha.7", + "@jest/types": "30.0.0-alpha.7", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "30.0.0-alpha.7", + "graceful-fs": "^4.2.9", + "jest-diff": "30.0.0-alpha.7", + "jest-get-type": "30.0.0-alpha.7", + "jest-matcher-utils": "30.0.0-alpha.7", + "jest-message-util": "30.0.0-alpha.7", + "jest-util": "30.0.0-alpha.7", + "pretty-format": "30.0.0-alpha.7", + "semver": "^7.5.3", + "synckit": "^0.9.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/jest/node_modules/jest-util": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.0.0-alpha.7.tgz", + "integrity": "sha512-8slx+UQVqYE7WgkOyAab//u0YlTKXFIv31+nsHNFpT0boE5E/w4uJ/HSer0SWpUOotcrGLveeWYi2Pyy8gxVfg==", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "@jest/types": "30.0.0-alpha.7", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^4.0.0", + "graceful-fs": "^4.2.9", + "picomatch": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest/node_modules/jest-validate": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-30.0.0-alpha.7.tgz", + "integrity": "sha512-PR7tDiTYSoXQPXatW3L39KyeZaF7/HZ4j41Nq2BhtgO/DCqPvySgCa6Cz++ykZcZ4NMnS+og7TBfri9a7dFmmg==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jest/types": "30.0.0-alpha.7", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "30.0.0-alpha.7", + "leven": "^3.1.0", + "pretty-format": "30.0.0-alpha.7" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-validate/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jest/node_modules/jest-watcher": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-30.0.0-alpha.7.tgz", + "integrity": "sha512-lR8YUEcSJ4x1b8Tr6WpQjkCpwwvtU/YlFaBbg0zZ8gePLAeDWs8WFcn1dYOOOe396mCs0YCqBZtBdBCz945kyA==", "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "30.0.0-alpha.7", + "@jest/types": "30.0.0-alpha.7", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "30.0.0-alpha.7", + "string-length": "^4.0.1" + }, "engines": { - "node": ">=8" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-validate/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/jest/node_modules/jest-worker": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-30.0.0-alpha.7.tgz", + "integrity": "sha512-kL3vimPjBpN1PKymyD1JYJM5SDTzqtkIs4TcaI4nUIktJEVulnZf0j4YjaAtnYflFohJfgmcPKP6IHqPHcn6dw==", "dev": true, + "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "@types/node": "*", + "@ungap/structured-clone": "^1.2.0", + "jest-util": "30.0.0-alpha.7", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" } }, - "node_modules/jest-validate/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/jest/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, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/jest-validate/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "node_modules/jest/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jest/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, + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "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==", + "node_modules/jest/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", "dev": true, + "license": "BlueOak-1.0.0", "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" + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/jest-watcher/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/jest/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/jest-watcher/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/jest/node_modules/pretty-format": { + "version": "30.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.0.0-alpha.7.tgz", + "integrity": "sha512-2gg8UNJxO+v6IiWydXPTM2LvCuIBxT2RC53Ind6IW0Cu9zvxoCMKeAAVV9nfukZyK01GFdYXhoH2zW18PsA6MQ==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@jest/schemas": "30.0.0-alpha.7", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, + "engines": { + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" + } + }, + "node_modules/jest/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/jest-watcher/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jest/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/jest-watcher/node_modules/supports-color": { + "node_modules/jest/node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/jest/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -17681,43 +19480,35 @@ "node": ">=8" } }, - "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==", + "node_modules/jest/node_modules/synckit": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", "dev": true, + "license": "MIT", "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" } }, - "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==", + "node_modules/jest/node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/js-message": { @@ -17745,152 +19536,58 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jscodeshift": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.15.2.tgz", - "integrity": "sha512-FquR7Okgmc4Sd0aEDwqho3rEiKR3BdvuG9jfdHjLJ6JQoWSMpavug3AoIfnfWhxFlf+5pzQh8qjqz0DWFrNQzA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.23.0", - "@babel/parser": "^7.23.0", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.23.0", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", - "@babel/plugin-transform-optional-chaining": "^7.23.0", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/preset-flow": "^7.22.15", - "@babel/preset-typescript": "^7.23.0", - "@babel/register": "^7.22.15", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.23.3", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" - }, - "bin": { - "jscodeshift": "bin/jscodeshift.js" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" - }, - "peerDependenciesMeta": { - "@babel/preset-env": { - "optional": true - } - } - }, - "node_modules/jscodeshift/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jscodeshift/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/jscodeshift/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/jschardet": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/jschardet/-/jschardet-3.1.3.tgz", + "integrity": "sha512-Q1PKVMK/uu+yjdlobgWIYkUOCR1SqUmW9m/eUJNNj4zI2N12i25v8fYpVf+zCakQeaTdBdhnZTFbVIAVZIVVOg==", "dev": true, "engines": { - "node": ">=8" + "node": ">=0.1.90" } }, - "node_modules/jscodeshift/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/jscodeshift/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/jsdoc-type-pratt-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz", + "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==", "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12.0.0" } }, - "node_modules/jscodeshift/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "node_modules/jsdom": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", "dev": true, + "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", - "dev": true, - "dependencies": { - "abab": "^2.0.6", - "acorn": "^8.8.1", - "acorn-globals": "^7.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.4.2", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.5.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.2", - "parse5": "^7.1.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", + "tough-cookie": "^5.1.1", + "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.11.0", - "xml-name-validator": "^4.0.0" + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" }, "peerDependencies": { - "canvas": "^2.5.0" + "canvas": "^3.0.0" }, "peerDependenciesMeta": { "canvas": { @@ -17898,58 +19595,75 @@ } } }, - "node_modules/jsdom/node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "node_modules/jsdom/node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 10" + "node": ">= 14" } }, - "node_modules/jsdom/node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "node_modules/jsdom/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, - "bin": { - "acorn": "bin/acorn" + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">=0.4.0" + "node": ">= 14" } }, - "node_modules/jsdom/node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "node_modules/jsdom/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, + "license": "MIT", "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 14" + } + }, + "node_modules/jsdom/node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "dev": true, "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "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 + "dev": true, + "license": "MIT" }, "node_modules/json-parse-better-errors": { "version": "1.0.2", @@ -18005,29 +19719,76 @@ } }, "node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "dev": true + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.3.1.tgz", + "integrity": "sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==", + "dev": true, + "license": "MIT" }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", + "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "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", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "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/jsonify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", - "integrity": "sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==", + "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, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" } }, "node_modules/jsx-ast-utils": { @@ -18063,6 +19824,56 @@ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, + "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, + "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", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/katex": { + "version": "0.16.21", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.21.tgz", + "integrity": "sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A==", + "dev": true, + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, + "node_modules/katex/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, "node_modules/keytar": { "version": "7.9.0", "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", @@ -18080,19 +19891,11 @@ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/klaw-sync": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", @@ -18111,17 +19914,26 @@ "node": ">=6" } }, + "node_modules/koffi": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/koffi/-/koffi-2.12.0.tgz", + "integrity": "sha512-J886y/bvoGG4ZhMVstB2Nh6/q9tzAYn0kaH7Ss8DWavGIxP5jOLzUY9IZzw9pMuXArj0SLSpl0MYsKRURPAv7g==", + "hasInstallScript": true, + "license": "MIT" + }, "node_modules/language-subtag-registry": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz", - "integrity": "sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==", - "dev": true + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true, + "license": "CC0-1.0" }, "node_modules/language-tags": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", "dev": true, + "license": "MIT", "dependencies": { "language-subtag-registry": "^0.3.20" }, @@ -18161,6 +19973,44 @@ "node": ">= 0.10" } }, + "node_modules/less": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/less/-/less-4.3.0.tgz", + "integrity": "sha512-X9RyH9fvemArzfdP8Pi3irr7lor2Ok4rOttDXBhlwDg+wKQsXOXgHWduAJE1EsF7JJx0w0bcO6BC6tCKKYnXKA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=14" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -18211,12 +20061,16 @@ } }, "node_modules/lilconfig": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", - "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" } }, "node_modules/lines-and-columns": { @@ -18226,30 +20080,32 @@ "dev": true }, "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==", + "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, + "license": "MIT", "dependencies": { - "uc.micro": "^1.0.1" + "uc.micro": "^2.0.0" } }, "node_modules/lint-staged": { - "version": "15.2.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.2.tgz", - "integrity": "sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==", + "version": "15.3.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.3.0.tgz", + "integrity": "sha512-vHFahytLoF2enJklgtOtCtIjZrKD/LoxlaUusd5nh7dWv/dkKQJY74ndFSzxCdv7g0ueGg1ORgTSt4Y9LPZn9A==", "dev": true, + "license": "MIT", "dependencies": { - "chalk": "5.3.0", - "commander": "11.1.0", - "debug": "4.3.4", - "execa": "8.0.1", - "lilconfig": "3.0.0", - "listr2": "8.0.1", - "micromatch": "4.0.5", - "pidtree": "0.6.0", - "string-argv": "0.3.2", - "yaml": "2.3.4" + "chalk": "~5.4.1", + "commander": "~12.1.0", + "debug": "~4.4.0", + "execa": "~8.0.1", + "lilconfig": "~3.1.3", + "listr2": "~8.2.5", + "micromatch": "~4.0.8", + "pidtree": "~0.6.0", + "string-argv": "~0.3.2", + "yaml": "~2.6.1" }, "bin": { "lint-staged": "bin/lint-staged.js" @@ -18262,10 +20118,11 @@ } }, "node_modules/lint-staged/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -18274,26 +20131,12 @@ } }, "node_modules/lint-staged/node_modules/commander": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz", - "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==", - "dev": true, - "engines": { - "node": ">=16" - } - }, - "node_modules/lint-staged/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, "engines": { - "node": ">= 8" + "node": ">=18" } }, "node_modules/lint-staged/node_modules/execa": { @@ -18418,32 +20261,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/listr2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.1.tgz", - "integrity": "sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==", + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz", + "integrity": "sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==", "dev": true, "dependencies": { "cli-truncate": "^4.0.0", "colorette": "^2.0.20", "eventemitter3": "^5.0.1", - "log-update": "^6.0.0", - "rfdc": "^1.3.0", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", "wrap-ansi": "^9.0.0" }, "engines": { @@ -18451,9 +20279,9 @@ } }, "node_modules/listr2/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==", + "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" @@ -18475,15 +20303,15 @@ } }, "node_modules/listr2/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==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true }, "node_modules/listr2/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -18529,6 +20357,37 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/lit": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.2.1.tgz", + "integrity": "sha512-1BBa1E/z0O9ye5fZprPtdqnc0BFzxIxTTOO/tQFmyC/hj1O3jL4TfmLBw0WEwjAokdLwpclkvGgDJwTIh0/22w==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit/reactive-element": "^2.0.4", + "lit-element": "^4.1.0", + "lit-html": "^3.2.0" + } + }, + "node_modules/lit-element": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.1.1.tgz", + "integrity": "sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==", + "license": "BSD-3-Clause", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0", + "@lit/reactive-element": "^2.0.4", + "lit-html": "^3.2.0" + } + }, + "node_modules/lit-html": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.1.tgz", + "integrity": "sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==", + "license": "BSD-3-Clause", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, "node_modules/load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", @@ -18586,6 +20445,13 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", @@ -18598,6 +20464,48 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "dev": true }, + "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, + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "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, + "license": "MIT" + }, "node_modules/lodash.kebabcase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", @@ -18616,6 +20524,13 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "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, + "license": "MIT" + }, "node_modules/lodash.snakecase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", @@ -18628,83 +20543,15 @@ "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", "dev": true }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/log-update": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.0.0.tgz", - "integrity": "sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, "dependencies": { - "ansi-escapes": "^6.2.0", - "cli-cursor": "^4.0.0", - "slice-ansi": "^7.0.0", + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" }, @@ -18716,21 +20563,24 @@ } }, "node_modules/log-update/node_modules/ansi-escapes": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.1.tgz", - "integrity": "sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", "dev": true, + "dependencies": { + "environment": "^1.0.0" + }, "engines": { - "node": ">=14.16" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-update/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==", + "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" @@ -18752,9 +20602,9 @@ } }, "node_modules/log-update/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==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true }, "node_modules/log-update/node_modules/is-fullwidth-code-point": { @@ -18789,9 +20639,9 @@ } }, "node_modules/log-update/node_modules/string-width": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", - "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -18849,13 +20699,11 @@ } }, "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.3.tgz", + "integrity": "sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==", "dev": true, - "dependencies": { - "get-func-name": "^2.0.1" - } + "license": "MIT" }, "node_modules/lru-cache": { "version": "5.1.1", @@ -18876,36 +20724,49 @@ } }, "node_modules/magic-string": { - "version": "0.30.11", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", - "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", + "version": "0.30.12", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", + "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "node_modules/make-dir/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, + "license": "MIT", + "optional": true, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", + "optional": true, "bin": { - "semver": "bin/semver.js" + "semver": "bin/semver" } }, "node_modules/make-error": { @@ -18936,53 +20797,42 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1", - "entities": "~2.1.0", - "linkify-it": "^3.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" + "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.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/markdown-to-jsx": { - "version": "7.4.7", - "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.4.7.tgz", - "integrity": "sha512-0+ls1IQZdU6cwM1yu0ZjjiVWYtkbExSyUIFU2ZeDIFuZM1W42Mh4OlJ4nb4apX4H8smxDHRdFaoIVJGwfv5hkg==", - "dev": true, - "engines": { - "node": ">= 10" - }, - "peerDependencies": { - "react": ">= 0.14.0" + "markdown-it": "bin/markdown-it.mjs" } }, "node_modules/markdownlint": { - "version": "0.34.0", - "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.34.0.tgz", - "integrity": "sha512-qwGyuyKwjkEMOJ10XN6OTKNOVYvOIi35RNvDLNxTof5s8UmyGHlCdpngRHoRGNvQVGuxO3BJ7uNSgdeX166WXw==", + "version": "0.37.2", + "resolved": "https://registry.npmjs.org/markdownlint/-/markdownlint-0.37.2.tgz", + "integrity": "sha512-m8QhYnRA1ptbhIjhVVBUkKQcUelVxuyO/yXyLewnc1+xs4eXhST/+hIy29goO+EYVLmWtknH4SmYQ4s0caoKqw==", "dev": true, + "license": "MIT", "dependencies": { "markdown-it": "14.1.0", - "markdownlint-micromark": "0.1.9" + "micromark": "4.0.1", + "micromark-extension-directive": "3.0.2", + "micromark-extension-gfm-autolink-literal": "2.1.0", + "micromark-extension-gfm-footnote": "2.1.0", + "micromark-extension-gfm-table": "2.1.0", + "micromark-extension-math": "3.1.0", + "micromark-util-types": "2.0.1" }, "engines": { "node": ">=18" @@ -18992,20 +20842,21 @@ } }, "node_modules/markdownlint-cli2": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.13.0.tgz", - "integrity": "sha512-Pg4nF7HlopU97ZXtrcVISWp3bdsuc5M0zXyLp2/sJv2zEMlInrau0ZKK482fQURzVezJzWBpNmu4u6vGAhij+g==", + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/markdownlint-cli2/-/markdownlint-cli2-0.17.0.tgz", + "integrity": "sha512-8Xz7wkkkV4wJTf+pvryU3J/fT3BZWD3ZykcjYBR0GuH0GHvrCbswaCdurbuUuAPDGFZy4cxBGYCJSAOW8jM4aQ==", "dev": true, + "license": "MIT", "dependencies": { - "globby": "14.0.1", + "globby": "14.0.2", "js-yaml": "4.1.0", - "jsonc-parser": "3.2.1", - "markdownlint": "0.34.0", - "markdownlint-cli2-formatter-default": "0.0.4", - "micromatch": "4.0.5" + "jsonc-parser": "3.3.1", + "markdownlint": "0.37.2", + "markdownlint-cli2-formatter-default": "0.0.5", + "micromatch": "4.0.8" }, "bin": { - "markdownlint-cli2": "markdownlint-cli2.js" + "markdownlint-cli2": "markdownlint-cli2-bin.mjs" }, "engines": { "node": ">=18" @@ -19015,18 +20866,22 @@ } }, "node_modules/markdownlint-cli2-formatter-default": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/markdownlint-cli2-formatter-default/-/markdownlint-cli2-formatter-default-0.0.4.tgz", - "integrity": "sha512-xm2rM0E+sWgjpPn1EesPXx5hIyrN2ddUnUwnbCsD/ONxYtw3PX6LydvdH6dciWAoFDpwzbHM1TO7uHfcMd6IYg==", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/markdownlint-cli2-formatter-default/-/markdownlint-cli2-formatter-default-0.0.5.tgz", + "integrity": "sha512-4XKTwQ5m1+Txo2kuQ3Jgpo/KmnG+X90dWt4acufg6HVGadTUG5hzHF/wssp9b5MBYOMCnZ9RMPaU//uHsszF8Q==", "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/DavidAnson" + }, "peerDependencies": { "markdownlint-cli2": ">=0.0.4" } }, "node_modules/markdownlint-cli2-formatter-pretty": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/markdownlint-cli2-formatter-pretty/-/markdownlint-cli2-formatter-pretty-0.0.6.tgz", - "integrity": "sha512-XflT5SV8StfexAZkssgBBXjh7mo/24forKbpRUmnqPWVgDIFnBmt09hPQ1QgNgPrwii9QXx7dhL6VqH/Zq17VQ==", + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/markdownlint-cli2-formatter-pretty/-/markdownlint-cli2-formatter-pretty-0.0.7.tgz", + "integrity": "sha512-Q+F2HCqqRw3w6dd9+U5DA1D3/8em/PzJfeyhON7Zb9o7lDAqTQv77xE+S0eTjsljNVqE72LEHNH2zoxHX/e6QA==", "dev": true, "dependencies": { "chalk": "5.3.0", @@ -19055,10 +20910,11 @@ } }, "node_modules/markdownlint-cli2/node_modules/globby": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.1.tgz", - "integrity": "sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/merge-streams": "^2.1.0", "fast-glob": "^3.3.2", @@ -19074,150 +20930,627 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/markdownlint-cli2/node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "node_modules/markdownlint-cli2/node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/markdownlint-cli2/node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "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, + "license": "MIT" + }, + "node_modules/memoizerific": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", + "integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==", + "dev": true, + "license": "MIT", + "dependencies": { + "map-or-similar": "^1.5.0" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/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/micromark": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", + "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz", + "integrity": "sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-directive": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz", + "integrity": "sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "parse-entities": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz", + "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-math": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-math/-/micromark-extension-math-3.1.0.tgz", + "integrity": "sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/katex": "^0.16.0", + "devlop": "^1.0.0", + "katex": "^0.16.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/markdownlint-cli2/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/markdownlint-micromark": { - "version": "0.1.9", - "resolved": "https://registry.npmjs.org/markdownlint-micromark/-/markdownlint-micromark-0.1.9.tgz", - "integrity": "sha512-5hVs/DzAFa8XqYosbEAEg6ok6MF2smDj89ztn9pKkCtdKHVdPQuGMH7frFfYL9mLkvfFe4pTyAMffLbjf3/EyA==", + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", "dev": true, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/DavidAnson" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/markdownlint/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==", + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "uc.micro": "^2.0.0" + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/markdownlint/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==", + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "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" + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/markdownlint/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/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } }, - "node_modules/markdownlint/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/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "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/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", "dev": true, - "engines": { - "node": ">= 0.6" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/memoizerific": { - "version": "1.11.3", - "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", - "integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==", + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", "dependencies": { - "map-or-similar": "^1.5.0" + "micromark-util-types": "^2.0.0" } }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", "dev": true, - "engines": { - "node": ">= 0.10.0" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "node_modules/micromark-util-subtokenize": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.3.tgz", + "integrity": "sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg==", "dev": true, - "engines": { - "node": ">= 8" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", "dev": true, - "engines": { - "node": ">= 0.6" - } + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz", + "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -19262,10 +21595,23 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mimic-response": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", @@ -19292,6 +21638,7 @@ "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" }, @@ -19305,58 +21652,15 @@ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minizlib/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/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, + "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==", "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" } }, "node_modules/mkdirp-classic": { @@ -19366,30 +21670,6 @@ "dev": true, "optional": true }, - "node_modules/mlly": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.1.tgz", - "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", - "dev": true, - "dependencies": { - "acorn": "^8.11.3", - "pathe": "^1.1.2", - "pkg-types": "^1.1.1", - "ufo": "^1.5.3" - } - }, - "node_modules/mlly/node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/module-details-from-path": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", @@ -19397,33 +21677,35 @@ "dev": true }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "node_modules/msw": { - "version": "2.2.13", - "resolved": "https://registry.npmjs.org/msw/-/msw-2.2.13.tgz", - "integrity": "sha512-ljFf1xZsU0b4zv1l7xzEmC6OZA6yD06hcx0H+dc8V0VypaP3HGYJa1rMLjQbBWl32ptGhcfwcPCWDB1wjmsftw==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.7.4.tgz", + "integrity": "sha512-A2kuMopOjAjNEYkn0AnB1uj+x7oBjLIunFk7Ud4icEnVWFf6iBekn8oXW4zIwcpfEdWP9sLqyVaHVzneWoGEww==", "hasInstallScript": true, + "license": "MIT", "dependencies": { - "@bundled-es-modules/cookie": "^2.0.0", + "@bundled-es-modules/cookie": "^2.0.1", "@bundled-es-modules/statuses": "^1.0.1", - "@inquirer/confirm": "^3.0.0", - "@mswjs/cookies": "^1.1.0", - "@mswjs/interceptors": "^0.26.14", + "@bundled-es-modules/tough-cookie": "^0.1.6", + "@inquirer/confirm": "^5.0.0", + "@mswjs/interceptors": "^0.37.0", + "@open-draft/deferred-promise": "^2.2.0", "@open-draft/until": "^2.1.0", "@types/cookie": "^0.6.0", "@types/statuses": "^2.0.4", - "chalk": "^4.1.2", "graphql": "^16.8.1", "headers-polyfill": "^4.0.2", "is-node-process": "^1.2.0", - "outvariant": "^1.4.2", - "path-to-regexp": "^6.2.0", + "outvariant": "^1.4.3", + "path-to-regexp": "^6.3.0", + "picocolors": "^1.1.1", "strict-event-emitter": "^0.5.1", - "type-fest": "^4.9.0", + "type-fest": "^4.26.1", "yargs": "^17.7.2" }, "bin": { @@ -19436,7 +21718,7 @@ "url": "https://github.com/sponsors/mswjs" }, "peerDependencies": { - "typescript": ">= 4.7.x" + "typescript": ">= 4.8.x" }, "peerDependenciesMeta": { "typescript": { @@ -19444,63 +21726,17 @@ } } }, - "node_modules/msw/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/msw/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "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/msw/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/msw/node_modules/path-to-regexp": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.1.tgz", - "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" - }, - "node_modules/msw/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "license": "MIT" }, "node_modules/msw/node_modules/type-fest": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.15.0.tgz", - "integrity": "sha512-tB9lu0pQpX5KJq54g+oHOLumOx+pMep4RaM6liXh2PKmVRFF+/vAtUP0ZaJ0kOySfVNjF6doBWPHhBhISKdlIA==", + "version": "4.30.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.30.0.tgz", + "integrity": "sha512-G6zXWS1dLj6eagy6sVhOMQiLtJdxQBHIA9Z6HFUNLOlr6MFOgzV8wvmidtPONfPtEUv0uZsy77XJNzTAfwPDaA==", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=16" }, @@ -19524,15 +21760,16 @@ "dev": true }, "node_modules/nanoid": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.7.tgz", - "integrity": "sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.9.tgz", + "integrity": "sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.js" }, @@ -19553,21 +21790,24 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, "engines": { - "node": ">= 0.6" + "node": ">= 4.4.x" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true - }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -19594,62 +21834,6 @@ "dev": true, "optional": true }, - "node_modules/node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.2" - }, - "engines": { - "node": ">= 0.10.5" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch-native": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz", - "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==", - "dev": true - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -19657,18 +21841,11 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true - }, - "node_modules/node-version": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/node-version/-/node-version-1.2.0.tgz", - "integrity": "sha512-ma6oU4Sk0qOoKEAymVoTvk8EdXEobdS7m/mAGhDJ8Rouugho48crHBORAmy5BoOcv8wraPM6xumapQp5hl4iIQ==", - "engines": { - "node": ">=6.0.0" - } + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" }, "node_modules/normalize-package-data": { "version": "2.5.0", @@ -19743,272 +21920,104 @@ } }, "node_modules/npm-run-all/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "dev": true, + "license": "MIT", "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/npm-run-all/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", - "dev": true, - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/npm-run-all/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/npm-run-all/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-all/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/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/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", - "dev": true - }, - "node_modules/nypm": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.9.tgz", - "integrity": "sha512-BI2SdqqTHg2d4wJh8P9A1W+bslg33vOE9IZDY6eR2QC+Pu1iNBVZUqczrd43rJb+fMzHU7ltAYKsEFY/kHMFcw==", - "dev": true, - "dependencies": { - "citty": "^0.1.6", - "consola": "^3.2.3", - "execa": "^8.0.1", - "pathe": "^1.1.2", - "pkg-types": "^1.1.1", - "ufo": "^1.5.3" - }, - "bin": { - "nypm": "dist/cli.mjs" - }, - "engines": { - "node": "^14.16.0 || >=16.10.0" - } - }, - "node_modules/nypm/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/nypm/node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/nypm/node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", - "dev": true, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + }, + "engines": { + "node": ">=4.8" } }, - "node_modules/nypm/node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, "engines": { - "node": ">=16.17.0" + "node": ">=4" } }, - "node_modules/nypm/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "node_modules/npm-run-all/node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "bin": { + "pidtree": "bin/pidtree.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.10" } }, - "node_modules/nypm/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "node_modules/npm-run-all/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, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "semver": "bin/semver" } }, - "node_modules/nypm/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, "dependencies": { - "path-key": "^4.0.0" + "shebang-regex": "^1.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/nypm/node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/nypm/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { - "mimic-fn": "^4.0.0" + "path-key": "^3.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/nypm/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "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, - "engines": { - "node": ">=12" + "dependencies": { + "boolbase": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/nypm/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/nwsapi": { + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz", + "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } + "license": "MIT" }, "node_modules/object-assign": { "version": "4.1.1", @@ -20020,10 +22029,14 @@ } }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -20038,14 +22051,17 @@ } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -20071,28 +22087,31 @@ } }, "node_modules/object.entries": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.7.tgz", - "integrity": "sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==", + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -20102,28 +22121,17 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/object.hasown": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/object.hasown/-/object.hasown-1.1.3.tgz", - "integrity": "sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.4" } }, "node_modules/object.pick": { @@ -20139,14 +22147,16 @@ } }, "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -20155,24 +22165,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ohash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.3.tgz", - "integrity": "sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==", - "dev": true - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dev": true, - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -20186,6 +22178,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -20193,146 +22186,40 @@ "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "7.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", - "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", - "dev": true, - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "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": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "dev": true, - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ora/node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ora/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@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": ">=8" + "node": ">= 0.8.0" } }, "node_modules/ordered-read-streams": { @@ -20354,9 +22241,28 @@ } }, "node_modules/outvariant": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.2.tgz", - "integrity": "sha512-Ou3dJ6bA/UJ5GVHxah4LnqDwZRwAmWxrG3wtrHrbGnP4RnLCtA64A4F+ae7Y8ww660JaddSoArUR5HjipWSHAQ==" + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz", + "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==", + "license": "MIT" + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/p-limit": { "version": "3.1.0", @@ -20438,6 +22344,11 @@ "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -20450,6 +22361,26 @@ "node": ">=6" } }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/parse-filepath": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", @@ -20482,6 +22413,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", @@ -20510,12 +22451,13 @@ } }, "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", "dev": true, + "license": "MIT", "dependencies": { - "entities": "^4.4.0" + "entities": "^4.5.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" @@ -20534,15 +22476,6 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/patch-package": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/patch-package/-/patch-package-8.0.0.tgz", @@ -20604,20 +22537,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/patch-package/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/patch-package/node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -20707,21 +22626,6 @@ "node": ">=0.6.0" } }, - "node_modules/patch-package/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", @@ -20741,6 +22645,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -20781,34 +22686,30 @@ } }, "node_modules/path-scurry": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", - "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "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": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.1.tgz", + "integrity": "sha512-CgeuL5uom6j/ZVrg7G/+1IXqRY8JXX4Hghfy5YE0EhoYQWvndP1kufu58cmZLNIDKnRhZrXfdS9urVWx98AipQ==", + "dev": true, "engines": { - "node": "14 || >=16.14" + "node": "20 || >=22" } }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "dev": true - }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -20819,18 +22720,20 @@ } }, "node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" }, "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "dev": true, + "license": "MIT", "engines": { - "node": "*" + "node": ">= 14.16" } }, "node_modules/pend": { @@ -20839,9 +22742,10 @@ "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -20885,40 +22789,40 @@ } }, "node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "dependencies": { - "find-up": "^3.0.0" + "find-up": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/pkg-dir/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "dependencies": { - "locate-path": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/pkg-dir/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/pkg-dir/node_modules/p-limit": { @@ -20937,65 +22841,47 @@ } }, "node_modules/pkg-dir/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "dependencies": { - "p-limit": "^2.0.0" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/pkg-types": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz", - "integrity": "sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==", - "dev": true, - "dependencies": { - "confbox": "^0.1.7", - "mlly": "^1.7.1", - "pathe": "^1.1.2" + "node": ">=8" } }, "node_modules/playwright": { - "version": "1.40.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.40.1.tgz", - "integrity": "sha512-2eHI7IioIpQ0bS1Ovg/HszsN/XKNwEG1kbzSDDmADpclKc7CyqkHw7Mg2JCz/bbCxg25QUPcjksoMW7JcIFQmw==", + "version": "1.50.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.50.1.tgz", + "integrity": "sha512-G8rwsOQJ63XG6BbKj2w5rHeavFjy5zynBA9zsJMMtBoe/Uf757oG12NXz6e6OirF7RCrTVAKFXbLmn1RbL7Qaw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.40.1" + "playwright-core": "1.50.1" }, "bin": { "playwright": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" }, "optionalDependencies": { "fsevents": "2.3.2" } }, "node_modules/playwright-core": { - "version": "1.40.1", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.40.1.tgz", - "integrity": "sha512-+hkOycxPiV534c4HhpfX6yrlawqVUzITRKwHAmYfmsVreltEl6fAZJ3DPfLMOODw0H3s1Itd6MDCWmP1fl/QvQ==", + "version": "1.50.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.50.1.tgz", + "integrity": "sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==", "dev": true, + "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/playwright/node_modules/fsevents": { @@ -21004,6 +22890,7 @@ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -21029,60 +22916,172 @@ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", "dev": true, - "dependencies": { - "ansi-wrap": "^0.1.0" - }, + "dependencies": { + "ansi-wrap": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/polished": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz", + "integrity": "sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.17.8" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-load-config/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/polished": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/polished/-/polished-4.2.2.tgz", - "integrity": "sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==", + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/runtime": "^7.17.8" + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" }, "engines": { - "node": ">=10" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, "engines": { - "node": ">= 0.4" + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=4" } }, "node_modules/postcss-value-parser": { @@ -21091,9 +23090,9 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, "node_modules/postcss/node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, "funding": [ { @@ -21101,6 +23100,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -21145,10 +23145,11 @@ } }, "node_modules/prettier": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.1.tgz", + "integrity": "sha512-5xGWRa90Sp2+x1dQtNpIpeOQpTDBs9cZDmA/qs2vDNN2i18PdapqY7CmBeyLlMuGqXJRIOPaCaVZTLNQRWUH/A==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -21208,6 +23209,7 @@ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -21217,11 +23219,6 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "node_modules/promise-polyfill": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-6.1.0.tgz", - "integrity": "sha512-g0LWaH0gFsxovsU7R5LrrhHhWAWiHRnh1GPrhXnPgYsDkIqjRYUYSZEsej/wtleDrz5xVSIDbeKfidztp2XHFQ==" - }, "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", @@ -21246,29 +23243,35 @@ "react-is": "^16.13.1" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dev": true, + "node_modules/proper-lockfile": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-4.1.2.tgz", + "integrity": "sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==", + "license": "MIT", "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" + "graceful-fs": "^4.2.4", + "retry": "^0.12.0", + "signal-exit": "^3.0.2" } }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + "node_modules/proper-lockfile/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "license": "MIT", + "optional": true }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" }, "node_modules/pump": { "version": "3.0.0", @@ -21315,6 +23318,7 @@ "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -21336,12 +23340,13 @@ ] }, "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "version": "6.13.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", + "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -21353,8 +23358,7 @@ "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "dev": true + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -21381,42 +23385,6 @@ "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -21454,16 +23422,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-colorful": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", - "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", - "dev": true, - "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" - } - }, "node_modules/react-docgen": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-7.0.3.tgz", @@ -21490,6 +23448,7 @@ "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", "dev": true, + "license": "MIT", "peerDependencies": { "typescript": ">= 4.3.x" } @@ -21512,27 +23471,6 @@ "react": "^18.3.1" } }, - "node_modules/react-element-to-jsx-string": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-15.0.0.tgz", - "integrity": "sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==", - "dev": true, - "dependencies": { - "@base2/pretty-print-object": "1.0.1", - "is-plain-object": "5.0.0", - "react-is": "18.1.0" - }, - "peerDependencies": { - "react": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0", - "react-dom": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0" - } - }, - "node_modules/react-element-to-jsx-string/node_modules/react-is": { - "version": "18.1.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", - "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", - "dev": true - }, "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", @@ -21610,9 +23548,10 @@ } }, "node_modules/readdir-glob/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -21640,10 +23579,11 @@ } }, "node_modules/recast": { - "version": "0.23.9", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz", - "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==", + "version": "0.23.11", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz", + "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==", "dev": true, + "license": "MIT", "dependencies": { "ast-types": "^0.16.1", "esprima": "~4.0.0", @@ -21660,6 +23600,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -21702,17 +23643,20 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.4.tgz", - "integrity": "sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", "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", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -21755,15 +23699,18 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -21810,41 +23757,6 @@ "jsesc": "bin/jsesc" } }, - "node_modules/rehype-external-links": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/rehype-external-links/-/rehype-external-links-3.0.0.tgz", - "integrity": "sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==", - "dev": true, - "dependencies": { - "@types/hast": "^3.0.0", - "@ungap/structured-clone": "^1.0.0", - "hast-util-is-element": "^3.0.0", - "is-absolute-url": "^4.0.0", - "space-separated-tokens": "^2.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-slug": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz", - "integrity": "sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==", - "dev": true, - "dependencies": { - "@types/hast": "^3.0.0", - "github-slugger": "^2.0.0", - "hast-util-heading-rank": "^3.0.0", - "hast-util-to-string": "^3.0.0", - "unist-util-visit": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remove-bom-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", @@ -21959,8 +23871,14 @@ "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "dev": true + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/reserved-words": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/reserved-words/-/reserved-words-0.1.2.tgz", + "integrity": "sha512-0S5SrIUJ9LfpbVl4Yzij6VipUdafHrOTzvmfazSw/jeZrZtQK303OPZW+obtkaw7jQlTQppy0UvZWm9872PbRw==", + "dev": true, + "license": "MIT" }, "node_modules/resolve": { "version": "1.22.8", @@ -22044,26 +23962,44 @@ } }, "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==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "node_modules/restore-cursor/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "license": "MIT", + "engines": { + "node": ">= 4" + } }, "node_modules/reusify": { "version": "1.0.4", @@ -22076,15 +24012,16 @@ } }, "node_modules/rfdc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -22099,6 +24036,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -22120,12 +24058,13 @@ "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==" }, "node_modules/rollup": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", - "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", + "version": "4.50.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.1.tgz", + "integrity": "sha512-78E9voJHwnXQMiQdiqswVLZwJIzdBKJ1GdI5Zx6XwoFKUIk09/sSrr+05QFzvYb8q6Y9pPV45zzDuYa3907TZA==", "dev": true, + "license": "MIT", "dependencies": { - "@types/estree": "1.0.5" + "@types/estree": "1.0.8" }, "bin": { "rollup": "dist/bin/rollup" @@ -22135,42 +24074,36 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.13.0", - "@rollup/rollup-android-arm64": "4.13.0", - "@rollup/rollup-darwin-arm64": "4.13.0", - "@rollup/rollup-darwin-x64": "4.13.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", - "@rollup/rollup-linux-arm64-gnu": "4.13.0", - "@rollup/rollup-linux-arm64-musl": "4.13.0", - "@rollup/rollup-linux-riscv64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-musl": "4.13.0", - "@rollup/rollup-win32-arm64-msvc": "4.13.0", - "@rollup/rollup-win32-ia32-msvc": "4.13.0", - "@rollup/rollup-win32-x64-msvc": "4.13.0", + "@rollup/rollup-android-arm-eabi": "4.50.1", + "@rollup/rollup-android-arm64": "4.50.1", + "@rollup/rollup-darwin-arm64": "4.50.1", + "@rollup/rollup-darwin-x64": "4.50.1", + "@rollup/rollup-freebsd-arm64": "4.50.1", + "@rollup/rollup-freebsd-x64": "4.50.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.50.1", + "@rollup/rollup-linux-arm-musleabihf": "4.50.1", + "@rollup/rollup-linux-arm64-gnu": "4.50.1", + "@rollup/rollup-linux-arm64-musl": "4.50.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.50.1", + "@rollup/rollup-linux-ppc64-gnu": "4.50.1", + "@rollup/rollup-linux-riscv64-gnu": "4.50.1", + "@rollup/rollup-linux-riscv64-musl": "4.50.1", + "@rollup/rollup-linux-s390x-gnu": "4.50.1", + "@rollup/rollup-linux-x64-gnu": "4.50.1", + "@rollup/rollup-linux-x64-musl": "4.50.1", + "@rollup/rollup-openharmony-arm64": "4.50.1", + "@rollup/rollup-win32-arm64-msvc": "4.50.1", + "@rollup/rollup-win32-ia32-msvc": "4.50.1", + "@rollup/rollup-win32-x64-msvc": "4.50.1", "fsevents": "~2.3.2" } }, - "node_modules/rollup/node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true - }, - "node_modules/run-applescript": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-5.0.0.tgz", - "integrity": "sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==", + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", "dev": true, - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, "node_modules/run-parallel": { "version": "1.2.0", @@ -22201,14 +24134,16 @@ "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -22238,37 +24173,106 @@ } ] }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass": { + "version": "1.86.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.86.3.tgz", + "integrity": "sha512-iGtg8kus4GrsGLRDLRBRHY9dNVA78ZaS7xr01cWnS7PEMQyFtTqBiyCrfpTYTZXRWM94akzckYjh8oADfFNTzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass/node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", - "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "readdirp": "^4.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">= 14.16.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://paulmillr.com/funding/" } }, - "node_modules/safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "node_modules/sass/node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, "node_modules/sax": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", @@ -22296,9 +24300,10 @@ } }, "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -22318,66 +24323,6 @@ "node": ">= 10.13.0" } }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dev": true, - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dev": true, - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.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", @@ -22396,43 +24341,41 @@ } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", "dev": true, + "license": "MIT", "dependencies": { - "kind-of": "^6.0.2" + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, "node_modules/shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", @@ -22472,14 +24415,76 @@ "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" }, "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -22587,17 +24592,18 @@ } }, "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "license": "BSD-3-Clause", "engines": { - "node": ">= 8" + "node": ">= 12" } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "engines": { "node": ">=0.10.0" } @@ -22619,16 +24625,6 @@ "node": ">=0.10.0" } }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/sparkles": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-2.1.0.tgz", @@ -22710,174 +24706,56 @@ "node": ">= 0.8" } }, - "node_modules/storybook": { - "version": "8.2.8", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.2.8.tgz", - "integrity": "sha512-sh4CNCXkieVgJ5GXrCOESS0BjRbQ9wG7BVnurQPl6izNnB9zR8rag+aUmjPZWBwbj55V1BFA5A/vEsCov21qjg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.24.4", - "@babel/types": "^7.24.0", - "@storybook/codemod": "8.2.8", - "@storybook/core": "8.2.8", - "@types/semver": "^7.3.4", - "@yarnpkg/fslib": "2.10.3", - "@yarnpkg/libzip": "2.3.0", - "chalk": "^4.1.0", - "commander": "^6.2.1", - "cross-spawn": "^7.0.3", - "detect-indent": "^6.1.0", - "envinfo": "^7.7.3", - "execa": "^5.0.0", - "fd-package-json": "^1.2.0", - "find-up": "^5.0.0", - "fs-extra": "^11.1.0", - "giget": "^1.0.0", - "globby": "^14.0.1", - "jscodeshift": "^0.15.1", - "leven": "^3.1.0", - "ora": "^5.4.1", - "prettier": "^3.1.1", - "prompts": "^2.4.0", - "semver": "^7.3.7", - "strip-json-comments": "^3.0.1", - "tempy": "^3.1.0", - "tiny-invariant": "^1.3.1", - "ts-dedent": "^2.0.0" - }, - "bin": { - "getstorybook": "bin/index.cjs", - "sb": "bin/index.cjs", - "storybook": "bin/index.cjs" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - } - }, - "node_modules/storybook/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/storybook/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 0.4" } }, - "node_modules/storybook/node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/stoppable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", + "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=4", + "npm": ">=6" } }, - "node_modules/storybook/node_modules/globby": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", - "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", + "node_modules/storybook": { + "version": "8.6.14", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.6.14.tgz", + "integrity": "sha512-sVKbCj/OTx67jhmauhxc2dcr1P+yOgz/x3h0krwjyMgdc5Oubvxyg4NYDZmzAw+ym36g/lzH8N0Ccp4dwtdfxw==", "dev": true, + "license": "MIT", "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/storybook/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/storybook/node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", - "dev": true, - "engines": { - "node": ">=12" + "@storybook/core": "8.6.14" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/storybook/node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, - "engines": { - "node": ">=14.16" + "bin": { + "getstorybook": "bin/index.cjs", + "sb": "bin/index.cjs", + "storybook": "bin/index.cjs" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/storybook/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/storybook/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" + "type": "opencollective", + "url": "https://opencollective.com/storybook" }, - "bin": { - "node-which": "bin/node-which" + "peerDependencies": { + "prettier": "^2 || ^3" }, - "engines": { - "node": ">= 8" + "peerDependenciesMeta": { + "prettier": { + "optional": true + } } }, "node_modules/stream-chain": { @@ -22926,7 +24804,8 @@ "node_modules/strict-event-emitter": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz", - "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==" + "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==", + "license": "MIT" }, "node_modules/string_decoder": { "version": "1.1.1", @@ -23007,9 +24886,9 @@ } }, "node_modules/string-width/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==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "engines": { "node": ">=12" }, @@ -23031,21 +24910,44 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/string.prototype.matchall": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz", - "integrity": "sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", "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", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "set-function-name": "^2.0.0", - "side-channel": "^1.0.4" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -23068,16 +24970,30 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -23087,15 +25003,20 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -23154,6 +25075,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -23186,19 +25108,19 @@ } }, "node_modules/styled-components": { - "version": "6.1.9", - "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.9.tgz", - "integrity": "sha512-aBOqs0uMsYufFXSE4q6cA6Ty1fwZuMk4BJRHfiGSna59F1otnxiDelwhN4fEwmBtIymmF0ZqXHnpSigr2ps9Cg==", + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.13.tgz", + "integrity": "sha512-M0+N2xSnAtwcVAQeFEsGWFFxXDftHUD7XrKla06QbpUMmbmtFBMMTcKWvFXtWxuD5qQkB8iU5gk6QASlx2ZRMw==", "dependencies": { - "@emotion/is-prop-valid": "1.2.1", + "@emotion/is-prop-valid": "1.2.2", "@emotion/unitless": "0.8.1", - "@types/stylis": "4.2.0", + "@types/stylis": "4.2.5", "css-to-react-native": "3.2.0", - "csstype": "3.1.2", - "postcss": "8.4.31", + "csstype": "3.1.3", + "postcss": "8.4.38", "shallowequal": "1.1.0", - "stylis": "4.3.1", - "tslib": "2.5.0" + "stylis": "4.3.2", + "tslib": "2.6.2" }, "engines": { "node": ">= 16" @@ -23212,21 +25134,17 @@ "react-dom": ">= 16.8.0" } }, - "node_modules/styled-components/node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" - }, "node_modules/styled-components/node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -23235,9 +25153,9 @@ } }, "node_modules/styled-components/node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "funding": [ { "type": "opencollective", @@ -23253,23 +25171,70 @@ } ], "dependencies": { - "nanoid": "^3.3.6", + "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" } }, - "node_modules/styled-components/node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" - }, "node_modules/stylis": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.1.tgz", - "integrity": "sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==" + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", + "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==" + }, + "node_modules/stylus": { + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.62.0.tgz", + "integrity": "sha512-v3YCf31atbwJQIMtPNX8hcQ+okD4NQaTuKGUWfII8eaqn+3otrbttGL1zSMZAAtiPsBztQnujVBugg/cXFUpyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@adobe/css-tools": "~4.3.1", + "debug": "^4.3.2", + "glob": "^7.1.6", + "sax": "~1.3.0", + "source-map": "^0.7.3" + }, + "bin": { + "stylus": "bin/stylus" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://opencollective.com/stylus" + } + }, + "node_modules/stylus/node_modules/@adobe/css-tools": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz", + "integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/stylus/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/supports-color": { "version": "5.5.0", @@ -23365,25 +25330,41 @@ "dev": true }, "node_modules/synckit": { - "version": "0.8.6", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.8.6.tgz", - "integrity": "sha512-laHF2savN6sMeHCjLRkheIU4wo3Zg9Ln5YOjOo7sZ5dVQW8yF5pPE5SIw1dsPhq3TRp1jisKRCdPhfs/1WMqDA==", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.4.tgz", + "integrity": "sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==", "dev": true, + "license": "MIT", "dependencies": { - "@pkgr/utils": "^2.4.2", - "tslib": "^2.6.2" + "@pkgr/core": "^0.2.3", + "tslib": "^2.8.1" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, "funding": { - "url": "https://opencollective.com/unts" + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/synckit/node_modules/@pkgr/core": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.4.tgz", + "integrity": "sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" } }, - "node_modules/tabbable": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-5.3.3.tgz", - "integrity": "sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==" + "node_modules/synckit/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" }, "node_modules/tapable": { "version": "2.2.1", @@ -23394,28 +25375,12 @@ "node": ">=6" } }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dev": true, - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "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==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "chownr": "^1.1.1", @@ -23473,21 +25438,6 @@ "streamx": "^2.15.0" } }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tar/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/teex": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", @@ -23497,100 +25447,6 @@ "streamx": "^2.12.5" } }, - "node_modules/telejson": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", - "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", - "dev": true, - "dependencies": { - "memoizerific": "^1.11.3" - } - }, - "node_modules/temp": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", - "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", - "dev": true, - "dependencies": { - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/temp-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", - "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", - "dev": true, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/temp/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/temp/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/tempy": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-3.1.0.tgz", - "integrity": "sha512-7jDLIdD2Zp0bDe5r3D2qtkd1QOCacylBuL7oa4udvN6v2pqr4+LcCr67C8DR1zkpaZ8XosF5m1yQSabKAW6f2g==", - "dev": true, - "dependencies": { - "is-stream": "^3.0.0", - "temp-dir": "^3.0.0", - "type-fest": "^2.12.2", - "unique-string": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tempy/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/terminal-link": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-3.0.0.tgz", @@ -23672,7 +25528,8 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/textextensions": { "version": "3.3.0", @@ -23733,38 +25590,86 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/tinyspy": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", - "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, "engines": { - "node": ">=14.0.0" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/titleize": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/titleize/-/titleize-3.0.0.tgz", - "integrity": "sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==", + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "6.1.85", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.85.tgz", + "integrity": "sha512-gBdZ1RjCSevRPFix/hpaUWeak2/RNUZB4/8frF1r5uYMHjFptkiT0JXIebWvgI/0ZHXvxaUDDJshiA0j6GdL3w==", + "dev": true, + "license": "MIT", "dependencies": { - "rimraf": "^3.0.0" + "tldts-core": "^6.1.85" }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.85", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.85.tgz", + "integrity": "sha512-DTjUVvxckL1fIoPSb3KE7ISNtkWSawZdpfxGxwiIrZoO6EbHVDXXUIlIuWympPaeS+BLGyggozX/HTMsRAdsoA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", + "license": "MIT", "engines": { - "node": ">=8.17.0" + "node": ">=14.14" } }, "node_modules/tmp-promise": { @@ -23794,15 +25699,6 @@ "node": ">=0.10.0" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "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", @@ -23836,20 +25732,11 @@ "xtend": "~4.0.1" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dev": true, + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", + "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", + "license": "BSD-3-Clause", "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -23864,21 +25751,21 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, "engines": { "node": ">= 4.0.0" } }, "node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.0.tgz", + "integrity": "sha512-IUWnUK7ADYR5Sl1fZlO1INDUhVhatWl7BtJWsIhwJ0UAK7ilzzIa8uIqOO/aYVWHZPJkKbEL+362wrzoeRF7bw==", "dev": true, + "license": "MIT", "dependencies": { - "punycode": "^2.1.1" + "punycode": "^2.3.1" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/tree-kill": { @@ -23890,15 +25777,16 @@ } }, "node_modules/ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, + "license": "MIT", "engines": { - "node": ">=16.13.0" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, "node_modules/ts-dedent": { @@ -23911,19 +25799,22 @@ } }, "node_modules/ts-jest": { - "version": "29.1.4", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.4.tgz", - "integrity": "sha512-YiHwDhSvCiItoAgsKtoLFCuakDzDsJ1DLDnSouTaTmdOcOwIkSzbLXduaQ6M5DRVhuZC/NYaaZ/mtHbWMv/S6Q==", + "version": "29.3.2", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.3.2.tgz", + "integrity": "sha512-bJJkrWc6PjFVz5g2DGCNUo8z7oFEYaz1xP1NpeDU7KNLMWPpEyV8Chbpkn8xjzgRDpQhnGMyvyldoL7h8JXyug==", "dev": true, + "license": "MIT", "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", + "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.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.1", + "type-fest": "^4.39.1", + "yargs-parser": "^21.1.1" }, "bin": { "ts-jest": "cli.js" @@ -23957,10 +25848,23 @@ } } }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.40.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.40.0.tgz", + "integrity": "sha512-ABHZ2/tS2JkvH1PEjxFDTUWC8dB5OsIGZP4IFLhR293GqT5Y5qB1WwL2kMPYhQW9DVgVD8Hd7I8gjwPIf5GFkw==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ts-json-schema-generator": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ts-json-schema-generator/-/ts-json-schema-generator-2.1.1.tgz", - "integrity": "sha512-ha5/w3A2APOOn9ET2CfunEXdVOnKmjISTGcxhCkDszmrsRWFfG5F+re5U5onLXo665sZ4BuE2g5jZAjC+CUcgA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ts-json-schema-generator/-/ts-json-schema-generator-2.3.0.tgz", + "integrity": "sha512-t4lBQAwZc0sOJq9LJt3NgbznIcslVnm0JeEMFq8qIRklpMRY8jlYD0YmnRWbqBKANxkby91P1XanSSlSOFpUmg==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.15", @@ -23969,6 +25873,7 @@ "json5": "^2.2.3", "normalize-path": "^3.0.0", "safe-stable-stringify": "^2.4.3", + "tslib": "^2.6.2", "typescript": "^5.4.5" }, "bin": { @@ -23978,6 +25883,16 @@ "node": ">=18.0.0" } }, + "node_modules/ts-json-schema-generator/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, "node_modules/ts-json-schema-generator/node_modules/commander": { "version": "12.0.0", "resolved": "https://registry.npmjs.org/commander/-/commander-12.0.0.tgz", @@ -23987,11 +25902,84 @@ "node": ">=18" } }, + "node_modules/ts-json-schema-generator/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ts-json-schema-generator/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/ts-json-schema-generator/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/ts-json-schema-generator/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/ts-json-schema-generator/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/ts-node": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -24030,27 +26018,6 @@ } } }, - "node_modules/ts-node/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/ts-node/node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/ts-unused-exports": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/ts-unused-exports/-/ts-unused-exports-10.1.0.tgz", @@ -24189,208 +26156,511 @@ "@types/yargs": "^17.0.0", "yargs": "^17.0.0" }, - "bin": { - "ts-flags": "bin/ts-flags", - "ts-kind": "bin/ts-kind" + "bin": { + "ts-flags": "bin/ts-flags", + "ts-kind": "bin/ts-kind" + }, + "peerDependencies": { + "tsutils": "^3.0.0", + "typescript": ">=4.0.0" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "dev": true, + "license": "MIT", + "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", + "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", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "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, + "license": "MIT", + "dependencies": { + "qs": "^6.9.1", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + } + }, + "node_modules/typescript": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.38.0.tgz", + "integrity": "sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.38.0", + "@typescript-eslint/parser": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/utils": "8.38.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "tsutils": "^3.0.0", - "typescript": ">=4.0.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.38.0.tgz", + "integrity": "sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==", "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/type-utils": "8.38.0", + "@typescript-eslint/utils": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", + "graphemer": "^1.4.0", + "ignore": "^7.0.0", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.1.0" + }, "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.38.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, - "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==", + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.38.0.tgz", + "integrity": "sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==", "dev": true, - "optional": true, + "license": "MIT", "dependencies": { - "safe-buffer": "^5.0.1" + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0", + "debug": "^4.3.4" }, "engines": { - "node": "*" + "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.9.0" } }, - "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==", + "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.38.0.tgz", + "integrity": "sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==", "dev": true, + "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1" + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.0" }, "engines": { - "node": ">= 0.8.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "node_modules/typescript-eslint/node_modules/@typescript-eslint/type-utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.38.0.tgz", + "integrity": "sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==", "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0", + "@typescript-eslint/utils": "8.38.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.1.0" + }, "engines": { - "node": ">=4" + "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.9.0" } }, - "node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.38.0.tgz", + "integrity": "sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=12.20" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.38.0.tgz", + "integrity": "sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==", "dev": true, + "license": "MIT", "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" + "@typescript-eslint/project-service": "8.38.0", + "@typescript-eslint/tsconfig-utils": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/visitor-keys": "8.38.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": "^2.1.0" }, "engines": { - "node": ">= 0.6" + "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.9.0" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.38.0.tgz", + "integrity": "sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.38.0", + "@typescript-eslint/types": "8.38.0", + "@typescript-eslint/typescript-estree": "8.38.0" }, "engines": { - "node": ">= 0.4" + "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.9.0" } }, - "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.38.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.38.0.tgz", + "integrity": "sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "@typescript-eslint/types": "8.38.0", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "node_modules/typescript-eslint/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, + "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" - }, + "balanced-match": "^1.0.0" + } + }, + "node_modules/typescript-eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">= 0.4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://opencollective.com/eslint" } }, - "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "node_modules/typescript-eslint/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/typescript-eslint/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, + "license": "ISC", "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "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==", + "node_modules/typescript-plugin-css-modules": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/typescript-plugin-css-modules/-/typescript-plugin-css-modules-5.1.0.tgz", + "integrity": "sha512-6h+sLBa4l+XYSTn/31vZHd/1c3SvAbLpobY6FxDiUOHJQG1eD9Gh3eCs12+Eqc+TCOAdxcO+zAPvUq0jBfdciw==", "dev": true, + "license": "MIT", "dependencies": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" + "@types/postcss-modules-local-by-default": "^4.0.2", + "@types/postcss-modules-scope": "^3.0.4", + "dotenv": "^16.4.2", + "icss-utils": "^5.1.0", + "less": "^4.2.0", + "lodash.camelcase": "^4.3.0", + "postcss": "^8.4.35", + "postcss-load-config": "^3.1.4", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.4", + "postcss-modules-scope": "^3.1.1", + "reserved-words": "^0.1.2", + "sass": "^1.70.0", + "source-map-js": "^1.0.2", + "stylus": "^0.62.0", + "tsconfig-paths": "^4.2.0" + }, + "peerDependencies": { + "typescript": ">=4.0.0" } }, - "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "node_modules/typescript-plugin-css-modules/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/typescript-plugin-css-modules/node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" }, "engines": { - "node": ">=14.17" + "node": ">=6" } }, "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/ufo": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", - "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", - "dev": true + "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, + "license": "MIT" }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -24406,10 +26676,11 @@ } }, "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 + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "dev": true, + "license": "MIT" }, "node_modules/undertaker": { "version": "2.0.0", @@ -24445,9 +26716,11 @@ } }, "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==" + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", @@ -24494,6 +26767,7 @@ "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -24511,131 +26785,38 @@ "through2-filter": "^3.0.0" } }, - "node_modules/unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", - "dev": true, - "dependencies": { - "crypto-random-string": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dev": true, - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dev": true, - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dev": true, - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/universal-user-agent": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", - "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==" + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.3.tgz", + "integrity": "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==", + "license": "ISC" }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" + "node": ">= 10.0.0" } }, "node_modules/unplugin": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.10.0.tgz", - "integrity": "sha512-CuZtvvO8ua2Wl+9q2jEaqH6m3DoQ38N7pvBYQbbaeNlWGvK2l6GHiKi29aIHDPoSxdUzQ7Unevf1/ugil5X6Pg==", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", + "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", "dev": true, + "license": "MIT", "dependencies": { - "acorn": "^8.11.3", - "chokidar": "^3.6.0", - "webpack-sources": "^3.2.3", - "webpack-virtual-modules": "^0.6.1" + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/unplugin/node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/unplugin/node_modules/webpack-virtual-modules": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz", - "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==", - "dev": true - }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", "dev": true, "funding": [ { @@ -24651,9 +26832,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -24680,17 +26862,23 @@ "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" } }, + "node_modules/utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", + "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", + "dev": true + }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "is-arguments": "^1.0.4", @@ -24704,15 +26892,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/uuid": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", @@ -24774,15 +26953,6 @@ "node": ">= 0.10" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/vinyl": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", @@ -24988,20 +27158,24 @@ } }, "node_modules/vite": { - "version": "5.2.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", - "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==", + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.5.tgz", + "integrity": "sha512-4cKBO9wR75r0BeIWWWId9XK9Lj6La5X846Zw9dFfzMRw38IlTk2iCcUt6hsyiDRcPidc55ZParFYDXi0nXOeLQ==", "dev": true, + "license": "MIT", "dependencies": { - "esbuild": "^0.20.1", - "postcss": "^8.4.38", - "rollup": "^4.13.0" + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^20.19.0 || >=22.12.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -25010,18 +27184,25 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, + "jiti": { + "optional": true + }, "less": { "optional": true }, @@ -25031,6 +27212,9 @@ "sass": { "optional": true }, + "sass-embedded": { + "optional": true + }, "stylus": { "optional": true }, @@ -25039,31 +27223,139 @@ }, "terser": { "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true } } }, "node_modules/vite-node": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.5.3.tgz", - "integrity": "sha512-axFo00qiCpU/JLd8N1gu9iEYL3xTbMbMrbe5nDp9GL0nb6gurIdZLkkFogZXWnE8Oyy5kfSLwNVIcVsnhE7lgQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.7.tgz", + "integrity": "sha512-2fX0QwX4GkkkpULXdT1Pf4q0tC1i1lFOyseKoonavXUNlQ77KpW2XqBGGNIm/J4Ows4KxgGJzDguYVPKwG/n5A==", "dev": true, + "license": "MIT", "dependencies": { "cac": "^6.7.14", - "debug": "^4.3.4", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "vite": "^5.0.0" + "debug": "^4.4.0", + "es-module-lexer": "^1.6.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0" }, "bin": { "vite-node": "vite-node.mjs" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, + "node_modules/vite-node/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/vite-node/node_modules/vite": { + "version": "6.3.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.6.tgz", + "integrity": "sha512-0msEVHJEScQbhkbVTb/4iHZdJ6SXp/AvxL2sjwYQFfBqleHtnCqv1J3sa9zbWz/6kW1m9Tfzn92vW+kZ1WV6QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/vscode-extension-telemetry": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/vscode-extension-telemetry/-/vscode-extension-telemetry-0.1.7.tgz", @@ -25133,9 +27425,10 @@ } }, "node_modules/vscode-languageclient/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -25174,23 +27467,18 @@ "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==" }, "node_modules/w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", "dev": true, + "license": "MIT", "dependencies": { - "xml-name-validator": "^4.0.0" + "xml-name-validator": "^5.0.0" }, "engines": { - "node": ">=14" + "node": ">=18" } }, - "node_modules/walk-up-path": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", - "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==", - "dev": true - }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -25200,71 +27488,65 @@ "makeerror": "1.0.12" } }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" } }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", "dev": true, - "engines": { - "node": ">=10.13.0" - } + "license": "MIT" }, "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", "dev": true, + "license": "MIT", "dependencies": { "iconv-lite": "0.6.3" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", "dev": true, + "license": "MIT", "dependencies": { - "tr46": "^3.0.0", + "tr46": "^5.1.0", "webidl-conversions": "^7.0.0" }, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -25273,39 +27555,45 @@ } }, "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "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" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-builtin-type": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.3.tgz", - "integrity": "sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, + "license": "MIT", "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -25315,30 +27603,37 @@ } }, "node_modules/which-collection": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", - "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, + "license": "MIT", "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, "engines": { @@ -25422,9 +27717,9 @@ } }, "node_modules/wrap-ansi/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==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "engines": { "node": ">=12" }, @@ -25482,10 +27777,11 @@ "dev": true }, "node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -25503,12 +27799,13 @@ } }, "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/xml2js": { @@ -25563,10 +27860,14 @@ "dev": true }, "node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } @@ -25661,6 +27962,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", + "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/zip-a-folder": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/zip-a-folder/-/zip-a-folder-3.1.6.tgz", @@ -25671,6 +27984,82 @@ "is-glob": "^4.0.3" } }, + "node_modules/zip-a-folder/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/zip-a-folder/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/zip-a-folder/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/zip-a-folder/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/zip-a-folder/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/zip-a-folder/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/zip-stream": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-5.0.1.tgz", diff --git a/extensions/ql-vscode/package.json b/extensions/ql-vscode/package.json index 3283a9ac84a..9f8d3ab41b3 100644 --- a/extensions/ql-vscode/package.json +++ b/extensions/ql-vscode/package.json @@ -4,7 +4,7 @@ "description": "CodeQL for Visual Studio Code", "author": "GitHub", "private": true, - "version": "1.14.1", + "version": "1.17.6", "publisher": "GitHub", "license": "MIT", "icon": "media/VS-marketplace-CodeQL-icon.png", @@ -13,8 +13,8 @@ "url": "https://github.com/github/vscode-codeql" }, "engines": { - "vscode": "^1.82.0", - "node": "^20.14.0", + "vscode": "^1.90.0", + "node": "^22.17.0", "npm": ">=7.20.6" }, "categories": [ @@ -42,13 +42,6 @@ "workspaceContains:.git" ], "main": "./out/extension", - "files": [ - "gen/*.js", - "media/**", - "out/**", - "package.json", - "language-configuration.json" - ], "contributes": { "configurationDefaults": { "[ql]": { @@ -302,8 +295,8 @@ "properties": { "codeQL.queryHistory.format": { "type": "string", - "default": "%q on %d - %s %r [%t]", - "markdownDescription": "Default string for how to label query history items.\n* %t is the time of the query\n* %q is the human-readable query name\n* %f is the query file name\n* %d is the database name\n* %r is the number of results\n* %s is a status string" + "default": "${queryName} on ${databaseName} - ${status} ${resultCount} [${startTime}]", + "markdownDescription": "Default string for how to label query history items.\n\nThe following variables are supported:\n* **${startTime}** - the time of the query\n* **${queryName}** - the human-readable query name\n* **${queryFileBasename}** - the query file's base name\n* **${queryLanguage}** - the query language\n* **${databaseName}** - the database name\n* **${resultCount}** - the number of results\n* **${status}** - a status string" }, "codeQL.queryHistory.ttl": { "type": "number", @@ -497,16 +490,6 @@ "title": "Telemetry", "order": 11, "properties": { - "codeQL.telemetry.enableTelemetry": { - "type": "boolean", - "default": false, - "scope": "application", - "markdownDescription": "Specifies whether to send CodeQL usage telemetry. This setting AND the one of the global telemetry settings (`#telemetry.enableTelemetry#` or `#telemetry.telemetryLevel#`) must be enabled for telemetry to be sent to GitHub. For more information, see the [telemetry documentation](https://codeql.github.com/docs/codeql-for-visual-studio-code/about-telemetry-in-codeql-for-visual-studio-code)", - "tags": [ - "telemetry", - "usesOnlineServices" - ] - }, "codeQL.telemetry.logTelemetry": { "type": "boolean", "default": false, @@ -588,6 +571,10 @@ "command": "codeQL.runQueries", "title": "CodeQL: Run Queries in Selected Files" }, + { + "command": "codeQL.runQuerySuite", + "title": "CodeQL: Run Selected Query Suite" + }, { "command": "codeQL.quickEval", "title": "CodeQL: Quick Evaluation" @@ -803,6 +790,10 @@ "command": "codeQL.trimCache", "title": "CodeQL: Trim Cache" }, + { + "command": "codeQL.trimOverlayBaseCache", + "title": "CodeQL: Trim Overlay Base Cache" + }, { "command": "codeQL.installPackDependencies", "title": "CodeQL: Install Pack Dependencies" @@ -839,6 +830,10 @@ "command": "codeQL.chooseDatabaseFolder", "title": "CodeQL: Choose Database from Folder" }, + { + "command": "codeQL.chooseDatabaseFoldersParent", + "title": "CodeQL: Import All Databases Directly Contained in a Parent Folder" + }, { "command": "codeQL.chooseDatabaseArchive", "title": "CodeQL: Choose Database from Archive" @@ -955,6 +950,10 @@ "command": "codeQLQueryHistory.compareWith", "title": "Compare Results" }, + { + "command": "codeQLQueryHistory.comparePerformanceWith", + "title": "Compare Performance" + }, { "command": "codeQLQueryHistory.openOnGithub", "title": "View Logs" @@ -963,6 +962,10 @@ "command": "codeQLQueryHistory.copyRepoList", "title": "Copy Repository List" }, + { + "command": "codeQLQueryHistory.viewAutofixes", + "title": "View Autofixes" + }, { "command": "codeQLQueryResults.down", "title": "CodeQL: Navigate Down in Local Result Viewer" @@ -1226,6 +1229,11 @@ "group": "3_queryHistory@0", "when": "viewItem == rawResultsItem || viewItem == interpretedResultsItem" }, + { + "command": "codeQLQueryHistory.comparePerformanceWith", + "group": "3_queryHistory@1", + "when": "viewItem == rawResultsItem && config.codeQL.canary || viewItem == interpretedResultsItem && config.codeQL.canary" + }, { "command": "codeQLQueryHistory.showQueryLog", "group": "4_queryHistory@4", @@ -1296,6 +1304,11 @@ "group": "1_queryHistory@1", "when": "viewItem == remoteResultsItem" }, + { + "command": "codeQLQueryHistory.viewAutofixes", + "group": "1_queryHistory@2", + "when": "viewItem == remoteResultsItem && config.codeQL.canary" + }, { "command": "codeQLQueries.runLocalQueryFromQueriesPanel", "group": "inline", @@ -1365,6 +1378,11 @@ "group": "9_qlCommands", "when": "resourceScheme != codeql-zip-archive" }, + { + "command": "codeQL.runQuerySuite", + "group": "9_qlCommands", + "when": "resourceScheme != codeql-zip-archive && resourceExtname == .qls && !explorerResourceIsFolder && !listMultiSelection && config.codeQL.canary" + }, { "command": "codeQL.runVariantAnalysisContextExplorer", "group": "9_qlCommands", @@ -1462,6 +1480,10 @@ "command": "codeQL.runQueries", "when": "false" }, + { + "command": "codeQL.runQuerySuite", + "when": "false" + }, { "command": "codeQL.quickEval", "when": "editorLangId == ql" @@ -1697,6 +1719,10 @@ "command": "codeQLQueryHistory.copyRepoList", "when": "false" }, + { + "command": "codeQLQueryHistory.viewAutofixes", + "when": "false" + }, { "command": "codeQLQueryHistory.showQueryText", "when": "false" @@ -1729,6 +1755,10 @@ "command": "codeQLQueryHistory.compareWith", "when": "false" }, + { + "command": "codeQLQueryHistory.comparePerformanceWith", + "when": "false" + }, { "command": "codeQLQueryHistory.sortByName", "when": "false" @@ -1791,6 +1821,10 @@ }, { "command": "codeQL.trimCache" + }, + { + "command": "codeQL.trimOverlayBaseCache", + "when": "codeQL.cliFeatures.queryServerTrimCacheWithMode" } ], "editor/context": [ @@ -1951,8 +1985,9 @@ "test:cli-integration": "jest --projects test/vscode-tests/cli-integration --verbose", "clean-test-dir": "find . -type d -name .vscode-test -exec rm -r {} +", "update-vscode": "node ./node_modules/vscode/bin/install", - "format": "prettier --write **/*.{ts,tsx} && eslint . --ext .ts,.tsx --fix", - "lint": "eslint . --ext .js,.ts,.tsx --max-warnings=0", + "format": "prettier --write **/*.{ts,tsx} && eslint . --fix", + "lint": "eslint . --max-warnings=0", + "lint-ci": "SARIF_ESLINT_IGNORE_SUPPRESSED=true eslint . --max-warnings=0 --format @microsoft/eslint-formatter-sarif --output-file=build/eslint.sarif", "lint:markdown": "markdownlint-cli2 \"../../**/*.{md,mdx}\" \"!**/node_modules/**\" \"!**/.vscode-test/**\" \"!**/build/cli/v*/**\"", "find-deadcode": "vite-node scripts/find-deadcode.ts", "format-staged": "lint-staged", @@ -1962,38 +1997,38 @@ "generate": "npm-run-all -p generate:*", "generate:schemas": "vite-node scripts/generate-schemas.ts", "generate:chromium-version": "vite-node scripts/generate-chromium-version.ts", - "check-types": "find . -type f -name \"tsconfig.json\" -not -path \"./node_modules/*\" | sed -r 's|/[^/]+$||' | sort | uniq | xargs -I {} sh -c \"echo Checking types in {} && cd {} && npx tsc --noEmit\"", + "check-types": "find . -type f -name \"tsconfig.json\" -not -path \"./node_modules/*\" -not -path \"*/.vscode-test/*\" | sed -r 's|/[^/]+$||' | sort | uniq | xargs -I {} sh -c \"echo Checking types in {} && cd {} && npx tsc --noEmit\"", "postinstall": "patch-package", - "prepare": "cd ../.. && husky install" + "prepare": "cd ../.. && husky" }, "dependencies": { - "@floating-ui/react": "^0.26.12", - "@octokit/plugin-retry": "^6.0.1", - "@octokit/plugin-throttling": "^8.0.0", - "@octokit/rest": "^20.0.2", + "@floating-ui/react": "^0.27.0", + "@octokit/plugin-retry": "^7.2.0", + "@octokit/plugin-throttling": "^9.6.0", + "@octokit/rest": "^22.0.0", + "@vscode-elements/react-elements": "^0.9.0", "@vscode/codicons": "^0.0.36", "@vscode/debugadapter": "^1.59.0", - "@vscode/debugprotocol": "^1.65.0", - "@vscode/webview-ui-toolkit": "^1.0.1", + "@vscode/debugprotocol": "^1.68.0", "ajv": "^8.11.0", - "child-process-promise": "^2.2.1", "chokidar": "^3.6.0", "d3": "^7.9.0", "d3-graphviz": "^5.0.2", "fs-extra": "^11.1.1", "js-yaml": "^4.1.0", - "msw": "^2.2.13", + "koffi": "^2.12.0", + "msw": "^2.7.4", "nanoid": "^5.0.7", - "node-fetch": "^2.6.7", "p-queue": "^8.0.1", + "proper-lockfile": "^4.1.2", "react": "^18.3.1", "react-dom": "^18.3.1", "semver": "^7.6.2", - "source-map": "^0.7.4", + "source-map": "^0.7.6", "source-map-support": "^0.5.21", "stream-json": "^1.7.3", - "styled-components": "^6.1.9", - "tmp": "^0.2.1", + "styled-components": "^6.1.13", + "tmp": "^0.2.5", "tmp-promise": "^3.0.2", "tree-kill": "^1.2.2", "vscode-extension-telemetry": "^0.1.6", @@ -2003,32 +2038,36 @@ "zip-a-folder": "^3.1.6" }, "devDependencies": { - "@babel/core": "^7.24.6", - "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/core": "^7.28.3", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", "@babel/preset-env": "^7.24.4", - "@babel/preset-react": "^7.24.1", - "@babel/preset-typescript": "^7.21.4", - "@faker-js/faker": "^8.4.1", - "@github/markdownlint-github": "^0.6.2", - "@playwright/test": "^1.40.1", - "@storybook/addon-a11y": "^8.2.8", - "@storybook/addon-actions": "^8.2.8", - "@storybook/addon-essentials": "^8.2.8", - "@storybook/addon-interactions": "^8.2.8", - "@storybook/addon-links": "^8.2.8", - "@storybook/blocks": "^8.0.2", - "@storybook/components": "^8.2.8", - "@storybook/csf": "^0.1.11", - "@storybook/icons": "^1.2.10", - "@storybook/manager-api": "^8.2.8", - "@storybook/react": "^8.2.8", - "@storybook/react-vite": "^8.2.8", - "@storybook/theming": "^8.2.4", - "@testing-library/dom": "^10.4.0", - "@testing-library/jest-dom": "^6.4.8", - "@testing-library/react": "^16.0.0", - "@testing-library/user-event": "^14.5.2", - "@types/child-process-promise": "^2.2.1", + "@babel/preset-react": "^7.27.1", + "@babel/preset-typescript": "^7.26.0", + "@eslint/js": "^9.28.0", + "@faker-js/faker": "^9.0.3", + "@github/markdownlint-github": "^0.8.0", + "@jest/environment": "^30.0.0-alpha.7", + "@jest/environment-jsdom-abstract": "^30.0.0-alpha.7", + "@microsoft/eslint-formatter-sarif": "^3.1.0", + "@playwright/test": "^1.50.1", + "@storybook/addon-a11y": "^8.6.14", + "@storybook/addon-actions": "^8.6.14", + "@storybook/addon-essentials": "^8.6.14", + "@storybook/addon-interactions": "^8.6.14", + "@storybook/addon-links": "^8.6.14", + "@storybook/blocks": "^8.6.0", + "@storybook/components": "^8.6.14", + "@storybook/csf": "^0.1.13", + "@storybook/icons": "^1.4.0", + "@storybook/manager-api": "^8.6.14", + "@storybook/react": "^8.6.14", + "@storybook/react-vite": "^8.6.14", + "@storybook/theming": "^8.6.14", + "@testing-library/dom": "^10.4.1", + "@testing-library/jest-dom": "^6.9.1", + "@testing-library/react": "^16.3.0", + "@testing-library/user-event": "^14.6.1", + "@types/cross-spawn": "^6.0.6", "@types/d3": "^7.4.0", "@types/d3-graphviz": "^2.6.6", "@types/del": "^4.0.0", @@ -2037,11 +2076,10 @@ "@types/gulp-replace": "^1.1.0", "@types/jest": "^29.5.12", "@types/js-yaml": "^4.0.6", - "@types/nanoid": "^3.0.0", - "@types/node": "20.14.*", - "@types/node-fetch": "^2.5.2", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.0", + "@types/node": "22.17.*", + "@types/proper-lockfile": "^4.1.4", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", "@types/sarif": "^2.1.2", "@types/semver": "^7.5.8", "@types/stream-json": "^1.7.1", @@ -2049,54 +2087,54 @@ "@types/tar-stream": "^3.1.3", "@types/through2": "^2.0.36", "@types/tmp": "^0.2.6", - "@types/vscode": "^1.82.0", + "@types/vscode": "1.90.0", "@types/yauzl": "^2.10.3", - "@typescript-eslint/eslint-plugin": "^7.5.0", - "@typescript-eslint/parser": "^7.5.0", + "@typescript-eslint/eslint-plugin": "^8.45.0", + "@typescript-eslint/parser": "^8.45.0", "@vscode/test-electron": "^2.3.9", - "@vscode/vsce": "^2.24.0", + "@vscode/vsce": "^3.2.1", "ansi-colors": "^4.1.1", "applicationinsights": "^2.9.5", "cosmiconfig": "^9.0.0", "cross-env": "^7.0.3", + "cross-spawn": "^7.0.6", "del": "^6.0.0", - "eslint": "^8.56.0", + "eslint": "^9.28.0", "eslint-config-prettier": "^9.0.0", - "eslint-import-resolver-typescript": "^3.6.1", - "eslint-plugin-deprecation": "^2.0.0", + "eslint-import-resolver-typescript": "^3.6.3", "eslint-plugin-etc": "^2.0.2", - "eslint-plugin-github": "^4.10.2", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jest-dom": "^5.2.0", - "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-react": "^7.34.1", - "eslint-plugin-react-hooks": "^4.6.2", - "eslint-plugin-storybook": "^0.8.0", - "glob": "^10.0.0", + "eslint-plugin-github": "^6.0.0", + "eslint-plugin-jest-dom": "^5.5.0", + "eslint-plugin-prettier": "^5.2.6", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-storybook": "^9.0.12", + "glob": "^11.0.1", "gulp": "^5.0.0", - "gulp-esbuild": "^0.12.0", + "gulp-esbuild": "^0.14.0", "gulp-replace": "^1.1.3", "gulp-typescript": "^5.0.1", - "husky": "^9.0.11", - "jest": "^29.0.3", - "jest-environment-jsdom": "^29.0.3", + "husky": "^9.1.7", + "jest": "^30.0.0-alpha.7", "jest-runner-vscode": "^3.0.1", - "lint-staged": "^15.2.2", - "markdownlint-cli2": "^0.13.0", - "markdownlint-cli2-formatter-pretty": "^0.0.6", + "jsdom": "^26.1.0", + "lint-staged": "^15.3.0", + "markdownlint-cli2": "^0.17.0", + "markdownlint-cli2-formatter-pretty": "^0.0.7", "npm-run-all": "^4.1.5", "patch-package": "^8.0.0", - "prettier": "^3.2.5", - "storybook": "^8.2.8", + "prettier": "^3.6.1", + "storybook": "^8.6.14", "tar-stream": "^3.1.7", "through2": "^4.0.2", - "ts-jest": "^29.1.4", - "ts-json-schema-generator": "^2.1.1", + "ts-jest": "^29.3.2", + "ts-json-schema-generator": "^2.3.0", "ts-node": "^10.9.2", "ts-unused-exports": "^10.1.0", - "typescript": "^5.0.2", - "vite": "^5.2.11", - "vite-node": "^1.5.3" + "typescript": "^5.6.2", + "typescript-plugin-css-modules": "^5.1.0", + "vite": "^7.1.5", + "vite-node": "^3.0.7" }, "lint-staged": { "./**/*.{json,css,scss}": [ diff --git a/extensions/ql-vscode/patches/jest-runner-vscode+3.0.1.patch b/extensions/ql-vscode/patches/jest-runner-vscode+3.0.1.patch index 155e00635b0..f71e37b268e 100644 --- a/extensions/ql-vscode/patches/jest-runner-vscode+3.0.1.patch +++ b/extensions/ql-vscode/patches/jest-runner-vscode+3.0.1.patch @@ -1,29 +1,3 @@ -diff --git a/node_modules/jest-runner-vscode/dist/child/environment.js b/node_modules/jest-runner-vscode/dist/child/environment.js -index 1ac28d5..f91f216 100644 ---- a/node_modules/jest-runner-vscode/dist/child/environment.js -+++ b/node_modules/jest-runner-vscode/dist/child/environment.js -@@ -10,6 +10,21 @@ const wrap_io_1 = __importDefault(require("./wrap-io")); - const load_pnp_1 = __importDefault(require("./load-pnp")); - const ipc = new ipc_client_1.default('env'); - class VSCodeEnvironment extends jest_environment_node_1.default { -+ constructor(config, context) { -+ super(config, context); -+ // The _VSCODE_NODE_MODULES is a proxy which will require a module if any property -+ // on it is accessed. This is a workaround for the fact that jest will call -+ // _isMockFunction on the module, which will cause that function to be required. -+ this.global._VSCODE_NODE_MODULES = new Proxy(this.global._VSCODE_NODE_MODULES, { -+ get(target, prop) { -+ if (prop === '_isMockFunction') { -+ return undefined; -+ } -+ return target[prop]; -+ }, -+ }); -+ } -+ - async setup() { - await super.setup(); - await (0, load_pnp_1.default)(); diff --git a/node_modules/jest-runner-vscode/dist/child/runner.js b/node_modules/jest-runner-vscode/dist/child/runner.js index 0663c5c..bdf4a8b 100644 --- a/node_modules/jest-runner-vscode/dist/child/runner.js diff --git a/extensions/ql-vscode/scripts/bump-supported-cli-versions.ts b/extensions/ql-vscode/scripts/bump-supported-cli-versions.ts new file mode 100644 index 00000000000..12985cf4bdb --- /dev/null +++ b/extensions/ql-vscode/scripts/bump-supported-cli-versions.ts @@ -0,0 +1,95 @@ +import { spawnSync } from "child_process"; +import { resolve } from "path"; +import { appendFile, outputJson, readJson } from "fs-extra"; +import { SemVer } from "semver"; + +const supportedCliVersionsPath = resolve( + __dirname, + "..", + "supported_cli_versions.json", +); + +async function bumpSupportedCliVersions() { + const existingVersions = (await readJson( + supportedCliVersionsPath, + )) as string[]; + + const release = runGhJSON([ + "release", + "view", + "--json", + "id,name", + "--repo", + "github/codeql-cli-binaries", + ]); + + // There are two cases: + // - Replace the version if it's the same major and minor version + // - Prepend the version if it's a new major or minor version + + const latestSupportedVersion = new SemVer(existingVersions[0]); + const latestReleaseVersion = new SemVer(release.name); + + if (latestSupportedVersion.compare(latestReleaseVersion) === 0) { + console.log("No need to update supported CLI versions"); + return; + } + + if (process.env.GITHUB_OUTPUT) { + await appendFile( + process.env.GITHUB_OUTPUT, + `PREVIOUS_VERSION=${existingVersions[0]}\n`, + { + encoding: "utf-8", + }, + ); + } + + if ( + latestSupportedVersion.major === latestReleaseVersion.major && + latestSupportedVersion.minor === latestReleaseVersion.minor + ) { + existingVersions[0] = release.name; + console.log(`Replaced latest supported CLI version with ${release.name}`); + } else { + existingVersions.unshift(release.name); + console.log(`Added latest supported CLI version ${release.name}`); + } + + await outputJson(supportedCliVersionsPath, existingVersions, { + spaces: 2, + finalEOL: true, + }); + + if (process.env.GITHUB_OUTPUT) { + await appendFile( + process.env.GITHUB_OUTPUT, + `LATEST_VERSION=${existingVersions[0]}\n`, + { + encoding: "utf-8", + }, + ); + } +} + +bumpSupportedCliVersions().catch((e: unknown) => { + console.error(e); + process.exit(2); +}); + +function runGh(args: readonly string[]): string { + const gh = spawnSync("gh", args); + if (gh.status !== 0) { + throw new Error(`Failed to run gh ${args.join(" ")}: ${gh.stderr}`); + } + return gh.stdout.toString("utf-8"); +} + +function runGhJSON(args: readonly string[]): T { + return JSON.parse(runGh(args)); +} + +type Release = { + id: string; + name: string; +}; diff --git a/extensions/ql-vscode/scripts/find-deadcode.ts b/extensions/ql-vscode/scripts/find-deadcode.ts index 9e21286b4a5..14d9d44a1c1 100644 --- a/extensions/ql-vscode/scripts/find-deadcode.ts +++ b/extensions/ql-vscode/scripts/find-deadcode.ts @@ -12,6 +12,7 @@ function ignoreFile(file: string): boolean { join("test", "vscode-tests", "jest-runner-vscode-codeql-cli.ts"), file, ) || + pathsEqual(join("src", "view", "jest-environment-jsdom.ts"), file) || basename(file) === "jest.config.ts" || basename(file) === "index.tsx" || basename(file) === "index.ts" || diff --git a/extensions/ql-vscode/scripts/source-map.ts b/extensions/ql-vscode/scripts/source-map.ts index 62ff6ca06cd..f0e6af88923 100644 --- a/extensions/ql-vscode/scripts/source-map.ts +++ b/extensions/ql-vscode/scripts/source-map.ts @@ -41,6 +41,7 @@ async function extractSourceMap() { const releaseAssetsDirectory = resolve( __dirname, "..", + "artifacts", "release-assets", versionNumber, ); @@ -64,7 +65,9 @@ async function extractSourceMap() { ]); const sourcemapAsset = release.assets.find( - (asset) => asset.name === `vscode-codeql-sourcemaps-${versionNumber}.zip`, + (asset) => + asset.label === `vscode-codeql-sourcemaps-${versionNumber}.zip` || + asset.name === "vscode-codeql-sourcemaps.zip", ); if (sourcemapAsset) { @@ -128,7 +131,7 @@ async function extractSourceMap() { resolve(sourceMapsDirectory, `${basename(file)}.map`), ); rawSourceMaps.set(file, rawSourceMap); - } catch (e: unknown) { + } catch (e) { // If the file is not found, we will not decode it and not try reading this source map again if (e instanceof Error && "code" in e && e.code === "ENOENT") { rawSourceMaps.set(file, null); @@ -213,9 +216,7 @@ extractSourceMap().catch((e: unknown) => { function runGh(args: readonly string[]): string { const gh = spawnSync("gh", args); if (gh.status !== 0) { - throw new Error( - `Failed to get the source map for ${versionNumber}: ${gh.stderr}`, - ); + throw new Error(`Failed to run gh ${args.join(" ")}: ${gh.stderr}`); } return gh.stdout.toString("utf-8"); } @@ -227,6 +228,7 @@ function runGhJSON(args: readonly string[]): T { type ReleaseAsset = { id: string; name: string; + label: string; }; type Release = { diff --git a/extensions/ql-vscode/scripts/update-node-version.ts b/extensions/ql-vscode/scripts/update-node-version.ts index b07cfb88a3d..8f412a3a683 100644 --- a/extensions/ql-vscode/scripts/update-node-version.ts +++ b/extensions/ql-vscode/scripts/update-node-version.ts @@ -1,8 +1,9 @@ import { join, resolve } from "path"; import { execSync } from "child_process"; -import { outputFile, readFile, readJSON } from "fs-extra"; +import { outputFile, readJSON } from "fs-extra"; import { getVersionInformation } from "./util/vscode-versions"; import { fetchJson } from "./util/fetch"; +import { SemVer } from "semver"; const extensionDirectory = resolve(__dirname, ".."); @@ -10,6 +11,29 @@ interface Release { tag_name: string; } +interface NpmViewError { + error: { + code: string; + summary: string; + detail: string; + }; +} + +interface ExecError extends Error { + status: number; + stdout: string; +} + +function isExecError(e: unknown): e is ExecError { + return ( + e instanceof Error && + "status" in e && + typeof e.status === "number" && + "stdout" in e && + typeof e.stdout === "string" + ); +} + async function updateNodeVersion() { const latestVsCodeRelease = await fetchJson( "https://api.github.com/repos/microsoft/vscode/releases/latest", @@ -23,19 +47,7 @@ async function updateNodeVersion() { `VS Code ${versionInformation.vscodeVersion} uses Electron ${versionInformation.electronVersion} and Node ${versionInformation.nodeVersion}`, ); - let currentNodeVersion = ( - await readFile(join(extensionDirectory, ".nvmrc"), "utf8") - ).trim(); - if (currentNodeVersion.startsWith("v")) { - currentNodeVersion = currentNodeVersion.slice(1); - } - - if (currentNodeVersion === versionInformation.nodeVersion) { - console.log("Node version is already up to date"); - return; - } - - console.log("Node version needs to be updated, updating now"); + console.log("Updating files related to the Node version"); await outputFile( join(extensionDirectory, ".nvmrc"), @@ -49,6 +61,8 @@ async function updateNodeVersion() { "utf8", ); + const nodeVersion = new SemVer(versionInformation.nodeVersion); + // The @types/node version needs to match the first two parts of the Node // version, e.g. if the Node version is 18.17.3, the @types/node version // should be 18.17.*. This corresponds with the documentation at @@ -56,13 +70,56 @@ async function updateNodeVersion() { // "The patch version of the type declaration package is unrelated to the library patch version. This allows // Definitely Typed to safely update type declarations for the same major/minor version of a library." // 18.17.* is equivalent to >=18.17.0 <18.18.0 - const typesNodeVersion = versionInformation.nodeVersion - .split(".") - .slice(0, 2) - .join("."); + // In some cases, the @types/node version matching the exact Node version may not exist, in which case we'll try + // the next lower minor version, and so on, until we find a version that exists. + const typesNodeSemver = new SemVer(nodeVersion); + typesNodeSemver.patch = 0; + + // eslint-disable-next-line no-constant-condition + while (true) { + const typesNodeVersion = `${typesNodeSemver.major}.${typesNodeSemver.minor}.*`; + + try { + // Check that this version actually exists + console.log(`Checking if @types/node@${typesNodeVersion} exists`); + + execSync(`npm view --json "@types/node@${typesNodeVersion}"`, { + encoding: "utf-8", + stdio: "pipe", + maxBuffer: 10 * 1024 * 1024, + }); + + console.log(`@types/node@${typesNodeVersion} exists`); + + // If it exists, we can break out of this loop + break; + } catch (e) { + if (!isExecError(e)) { + throw e; + } + + const error = JSON.parse(e.stdout) as NpmViewError; + if (error.error.code !== "E404") { + throw new Error(error.error.detail); + } + + console.log( + `@types/node package doesn't exist for ${typesNodeVersion}, trying a lower version (${error.error.summary})`, + ); + + // This means the version doesn't exist, so we'll try decrementing the minor version + typesNodeSemver.minor -= 1; + if (typesNodeSemver.minor < 0) { + throw new Error( + `Could not find a suitable @types/node version for Node ${nodeVersion.format()}`, + ); + } + } + } packageJson.engines.node = `^${versionInformation.nodeVersion}`; - packageJson.devDependencies["@types/node"] = `${typesNodeVersion}.*`; + packageJson.devDependencies["@types/node"] = + `${typesNodeSemver.major}.${typesNodeSemver.minor}.*`; await outputFile( join(extensionDirectory, "package.json"), diff --git a/extensions/ql-vscode/src/codeql-cli/cli-version.ts b/extensions/ql-vscode/src/codeql-cli/cli-version.ts index 94f1169c30a..ebd30cbdb62 100644 --- a/extensions/ql-vscode/src/codeql-cli/cli-version.ts +++ b/extensions/ql-vscode/src/codeql-cli/cli-version.ts @@ -10,9 +10,7 @@ interface VersionResult { } export interface CliFeatures { - featuresInVersionResult?: boolean; - mrvaPackCreate?: boolean; - generateSummarySymbolMap?: boolean; + queryServerRunQueries?: boolean; } export interface VersionAndFeatures { diff --git a/extensions/ql-vscode/src/codeql-cli/cli.ts b/extensions/ql-vscode/src/codeql-cli/cli.ts index 9ccdd9362b7..6ead0b338fc 100644 --- a/extensions/ql-vscode/src/codeql-cli/cli.ts +++ b/extensions/ql-vscode/src/codeql-cli/cli.ts @@ -1,9 +1,9 @@ import { EOL } from "os"; -import { spawn } from "child-process-promise"; +import { spawn } from "cross-spawn"; import type { ChildProcessWithoutNullStreams } from "child_process"; import { spawn as spawnChildProcess } from "child_process"; import { readFile } from "fs-extra"; -import { delimiter, dirname, join } from "path"; +import { delimiter, join } from "path"; import type { Log } from "sarif"; import { SemVer } from "semver"; import type { Readable } from "stream"; @@ -19,6 +19,7 @@ import type { CliConfig } from "../config"; import type { DistributionProvider } from "./distribution"; import { FindDistributionResultKind } from "./distribution"; import { + asError, assertNever, getErrorMessage, getErrorStack, @@ -37,6 +38,7 @@ import { LOGGING_FLAGS } from "./cli-command"; import type { CliFeatures, VersionAndFeatures } from "./cli-version"; import { ExitCodeError, getCliError } from "./cli-errors"; import { UserCancellationException } from "../common/vscode/progress"; +import type { LanguageClient } from "vscode-languageclient/node"; /** * The version of the SARIF format that we are using. @@ -91,15 +93,6 @@ export type QlpacksInfo = { [name: string]: string[] }; */ type LanguagesInfo = { [name: string]: string[] }; -/** Information about an ML model, as resolved by `codeql resolve ml-models`. */ -type MlModelInfo = { - checksum: string; - path: string; -}; - -/** The expected output of `codeql resolve ml-models`. */ -type MlModelsInfo = { models: MlModelInfo[] }; - /** Information about a data extension predicate, as resolved by `codeql resolve extensions`. */ type DataExtensionResult = { predicate: string; @@ -109,7 +102,6 @@ type DataExtensionResult = { /** The expected output of `codeql resolve extensions`. */ type ResolveExtensionsResult = { - models: MlModelInfo[]; data: { [path: string]: DataExtensionResult[]; }; @@ -287,6 +279,7 @@ export class CodeQLCliServer implements Disposable { constructor( private readonly app: App, + private readonly languageClient: LanguageClient, private distributionProvider: DistributionProvider, private cliConfig: CliConfig, public readonly logger: Logger, @@ -321,7 +314,7 @@ export class CodeQLCliServer implements Disposable { } catch (e) { // We are probably fine here, the process has already closed stdin. void this.logger.log( - `Shutdown request failed: process stdin may have already closed. The error was ${e}`, + `Shutdown request failed: process stdin may have already closed. The error was ${getErrorMessage(e)}`, ); void this.logger.log("Stopping the process anyway."); } @@ -726,13 +719,7 @@ export class CodeQLCliServer implements Disposable { // Spawn the CodeQL process const codeqlPath = await this.getCodeQlPath(); - const childPromise = spawn(codeqlPath, args); - // Avoid a runtime message about unhandled rejection. - childPromise.catch(() => { - /**/ - }); - - const child = childPromise.childProcess; + const child = spawn(codeqlPath, args); let cancellationRegistration: Disposable | undefined = undefined; try { @@ -745,16 +732,28 @@ export class CodeQLCliServer implements Disposable { } if (logger !== undefined) { // The human-readable output goes to stderr. - void logStream(child.stderr!, logger); + void logStream(child.stderr, logger); } - for await (const event of splitStreamAtSeparators(child.stdout!, [ - "\0", - ])) { + for await (const event of splitStreamAtSeparators(child.stdout, ["\0"])) { yield event; } - await childPromise; + await new Promise((resolve, reject) => { + child.on("error", reject); + + child.on("close", (code) => { + if (code === 0) { + resolve(undefined); + } else { + reject( + new Error( + `${command.join(" ")} ${commandArgs.join(" ")} failed with code ${code}`, + ), + ); + } + }); + }); } finally { if (cancellationRegistration !== undefined) { cancellationRegistration.dispose(); @@ -853,7 +852,7 @@ export class CodeQLCliServer implements Disposable { silent, ).then(resolve, reject); } catch (err) { - reject(err); + reject(asError(err)); } }; // If the server is not running a command, then run the given command immediately, @@ -943,7 +942,7 @@ export class CodeQLCliServer implements Disposable { if (line.startsWith("Enter value for --github-auth-stdin")) { try { return await this.app.credentials.getAccessToken(); - } catch (e) { + } catch { // If the user cancels the authentication prompt, we still need to give a value to the CLI. // By giving a potentially invalid value, the user will just get a 401/403 when they try to access a // private package and the access token is invalid. @@ -980,7 +979,7 @@ export class CodeQLCliServer implements Disposable { subcommandArgs, "Resolving query by language", ), - ); + ) as QueryInfoByLanguage; } /** @@ -1097,24 +1096,6 @@ export class CodeQLCliServer implements Disposable { ); } - /** Resolves the ML models that should be available when evaluating a query. */ - async resolveMlModels( - additionalPacks: string[], - queryPath: string, - ): Promise { - const args = - // use the dirname of the path so that we can handle query libraries - [...this.getAdditionalPacksArg(additionalPacks), dirname(queryPath)]; - return await this.runJsonCodeQlCliCommand( - ["resolve", "ml-models"], - args, - "Resolving ML models", - { - addFormat: false, - }, - ); - } - /** * Gets the RAM setting for the query server. * @param queryMemoryMb The maximum amount of RAM to use, in MB. @@ -1211,15 +1192,12 @@ export class CodeQLCliServer implements Disposable { outputPath: string, endSummaryPath: string, ): Promise { - const supportsGenerateSummarySymbolMap = - await this.cliConstraints.supportsGenerateSummarySymbolMap(); const subcommandArgs = [ "--format=text", `--end-summary=${endSummaryPath}`, "--sourcemap", - ...(supportsGenerateSummarySymbolMap - ? ["--summary-symbol-map", "--minify-output"] - : []), + "--summary-symbol-map", + "--minify-output", inputPath, outputPath, ]; @@ -1606,11 +1584,13 @@ export class CodeQLCliServer implements Disposable { async packAdd(dir: string, queryLanguage: QueryLanguage) { const args = ["--dir", dir]; args.push(`codeql/${queryLanguage}-all`); - return this.runCodeQlCliCommand( + const ret = await this.runCodeQlCliCommand( ["pack", "add"], args, `Adding and installing ${queryLanguage} pack dependency.`, ); + await this.notifyPackInstalled(); + return ret; } /** @@ -1645,16 +1625,18 @@ export class CodeQLCliServer implements Disposable { args.push( // Allow prerelease packs from the ql submodule. "--allow-prerelease", - // Allow the use of --additional-packs argument without issueing a warning + // Allow the use of --additional-packs argument without issuing a warning "--no-strict-mode", ...this.getAdditionalPacksArg(workspaceFolders), ); } - return this.runJsonCodeQlCliCommandWithAuthentication( + const ret = await this.runJsonCodeQlCliCommandWithAuthentication( ["pack", "install"], args, "Installing pack dependencies", ); + await this.notifyPackInstalled(); + return ret; } /** @@ -1772,6 +1754,17 @@ export class CodeQLCliServer implements Disposable { this._versionChangedListeners.push(listener); } + /** + * This method should be called after a pack has been installed. + * + * This restarts the language client. Restarting the language client has the + * effect of removing compilation errors in open ql/qll files that are caused + * by the pack not having been installed previously. + */ + private async notifyPackInstalled() { + await this.languageClient.restart(); + } + private async refreshVersion(): Promise { const distribution = await this.distributionProvider.getDistribution(); switch (distribution.kind) { @@ -1842,7 +1835,7 @@ export function spawnServer( } let lastStdout: string | Buffer | undefined = undefined; - child.stdout!.on("data", (data) => { + child.stdout.on("data", (data) => { lastStdout = data; }); // Set up event listeners. @@ -1861,9 +1854,9 @@ export function spawnServer( void logger.log(`Last stdout was "${lastStdout.toString()}"`); } }); - child.stderr!.on("data", stderrListener); + child.stderr.on("data", stderrListener); if (stdoutListener !== undefined) { - child.stdout!.on("data", stdoutListener); + child.stdout.on("data", stdoutListener); } if (progressReporter !== undefined) { @@ -1909,43 +1902,13 @@ function shouldDebugCliServer() { export class CliVersionConstraint { // The oldest version of the CLI that we support. This is used to determine // whether to show a warning about the CLI being too old on startup. - public static OLDEST_SUPPORTED_CLI_VERSION = new SemVer("v2.15.5"); - - public static CLI_VERSION_WITHOUT_MRVA_EXTENSIBLE_PREDICATE_HACK = new SemVer( - "2.16.1", - ); - - /** - * CLI version where there is support for multiple queries on the pack create command. - */ - public static CLI_VERSION_WITH_MULTI_QUERY_PACK_CREATE = new SemVer("2.16.1"); + public static OLDEST_SUPPORTED_CLI_VERSION = new SemVer("2.20.7"); constructor(private readonly cli: CodeQLCliServer) { /**/ } - private async isVersionAtLeast(v: SemVer) { - return (await this.cli.getVersion()).compare(v) >= 0; - } - - async preservesExtensiblePredicatesInMrvaPack() { - // Negated, because we _stopped_ preserving these in 2.16.1. - return !(await this.isVersionAtLeast( - CliVersionConstraint.CLI_VERSION_WITHOUT_MRVA_EXTENSIBLE_PREDICATE_HACK, - )); - } - - async supportsPackCreateWithMultipleQueries() { - return this.isVersionAtLeast( - CliVersionConstraint.CLI_VERSION_WITH_MULTI_QUERY_PACK_CREATE, - ); - } - - async supportsMrvaPackCreate(): Promise { - return (await this.cli.getFeatures()).mrvaPackCreate === true; - } - - async supportsGenerateSummarySymbolMap(): Promise { - return (await this.cli.getFeatures()).generateSummarySymbolMap === true; + async supportsQueryServerRunQueries(): Promise { + return (await this.cli.getFeatures()).queryServerRunQueries === true; } } diff --git a/extensions/ql-vscode/src/codeql-cli/distribution.ts b/extensions/ql-vscode/src/codeql-cli/distribution.ts index 223bf5fe50a..35bbb7acf16 100644 --- a/extensions/ql-vscode/src/codeql-cli/distribution.ts +++ b/extensions/ql-vscode/src/codeql-cli/distribution.ts @@ -1,5 +1,12 @@ import type { WriteStream } from "fs"; -import { createWriteStream, mkdtemp, pathExists, remove } from "fs-extra"; +import { + createWriteStream, + mkdtemp, + outputJson, + pathExists, + readJson, + remove, +} from "fs-extra"; import { tmpdir } from "os"; import { delimiter, dirname, join } from "path"; import { Range, satisfies } from "semver"; @@ -19,7 +26,9 @@ import { InvocationRateLimiter, InvocationRateLimiterResultKind, } from "../common/invocation-rate-limiter"; +import type { NotificationLogger } from "../common/logging"; import { + showAndLogExceptionWithTelemetry, showAndLogErrorMessage, showAndLogWarningMessage, } from "../common/logging"; @@ -28,7 +37,12 @@ import { reportUnzipProgress } from "../common/vscode/unzip-progress"; import type { Release } from "./distribution/release"; import { ReleasesApiConsumer } from "./distribution/releases-api-consumer"; import { createTimeoutSignal } from "../common/fetch-stream"; -import { AbortError } from "node-fetch"; +import { withDistributionUpdateLock } from "./lock"; +import { asError, getErrorMessage } from "../common/helpers-pure"; +import { isIOError } from "../common/files"; +import { telemetryListener } from "../common/vscode/telemetry"; +import { redactableError } from "../common/errors"; +import { ExtensionManagedDistributionCleaner } from "./distribution/cleaner"; /** * distribution.ts @@ -54,6 +68,11 @@ const NIGHTLY_DISTRIBUTION_REPOSITORY_NWO = "dsp-testing/codeql-cli-nightlies"; */ export const DEFAULT_DISTRIBUTION_VERSION_RANGE: Range = new Range("2.x"); +export interface DistributionState { + folderIndex: number; + release: Release | null; +} + export interface DistributionProvider { getCodeQlPathWithoutVersionCheck(): Promise; onDidChangeDistribution?: Event; @@ -65,6 +84,7 @@ export class DistributionManager implements DistributionProvider { public readonly config: DistributionConfig, private readonly versionRange: Range, extensionContext: ExtensionContext, + logger: NotificationLogger, ) { this._onDidChangeDistribution = config.onDidChangeConfiguration; this.extensionSpecificDistributionManager = @@ -72,6 +92,7 @@ export class DistributionManager implements DistributionProvider { config, versionRange, extensionContext, + logger, ); this.updateCheckRateLimiter = new InvocationRateLimiter( extensionContext.globalState, @@ -79,6 +100,16 @@ export class DistributionManager implements DistributionProvider { () => this.extensionSpecificDistributionManager.checkForUpdatesToDistribution(), ); + this.extensionManagedDistributionCleaner = + new ExtensionManagedDistributionCleaner( + extensionContext, + logger, + this.extensionSpecificDistributionManager, + ); + } + + public async initialize(): Promise { + await this.extensionSpecificDistributionManager.initialize(); } /** @@ -256,6 +287,10 @@ export class DistributionManager implements DistributionProvider { ); } + public startCleanup() { + this.extensionManagedDistributionCleaner.start(); + } + public get onDidChangeDistribution(): Event | undefined { return this._onDidChangeDistribution; } @@ -277,18 +312,63 @@ export class DistributionManager implements DistributionProvider { private readonly extensionSpecificDistributionManager: ExtensionSpecificDistributionManager; private readonly updateCheckRateLimiter: InvocationRateLimiter; + private readonly extensionManagedDistributionCleaner: ExtensionManagedDistributionCleaner; private readonly _onDidChangeDistribution: Event | undefined; } class ExtensionSpecificDistributionManager { + private distributionState: DistributionState | undefined; + constructor( private readonly config: DistributionConfig, private readonly versionRange: Range, private readonly extensionContext: ExtensionContext, + private readonly logger: NotificationLogger, ) { /**/ } + public async initialize() { + await this.ensureDistributionStateExists(); + } + + private async ensureDistributionStateExists() { + const distributionStatePath = this.getDistributionStatePath(); + try { + this.distributionState = await readJson(distributionStatePath); + } catch (e) { + if (isIOError(e) && e.code === "ENOENT") { + // If the file doesn't exist, that just means we need to create it + + this.distributionState = { + folderIndex: + this.extensionContext.globalState.get( + "distributionFolderIndex", + 0, + ) ?? 0, + release: + this.extensionContext.globalState.get("distributionRelease") ?? + null, + }; + + // This may result in a race condition, but when this happens both processes should write the same file. + await outputJson(distributionStatePath, this.distributionState); + } else { + void showAndLogExceptionWithTelemetry( + this.logger, + telemetryListener, + redactableError( + asError(e), + )`Failed to read distribution state from ${distributionStatePath}: ${getErrorMessage(e)}`, + ); + this.distributionState = { + folderIndex: 0, + release: null, + }; + } + } + } + public async getCodeQlPathWithoutVersionCheck(): Promise { if (this.getInstalledRelease() !== undefined) { // An extension specific distribution has been installed. @@ -305,7 +385,7 @@ class ExtensionSpecificDistributionManager { } catch (e) { void extLogger.log( "WARNING: Tried to remove corrupted CodeQL CLI at " + - `${this.getDistributionStoragePath()} but encountered an error: ${e}.`, + `${this.getDistributionStoragePath()} but encountered an error: ${getErrorMessage(e)}.`, ); } } @@ -351,9 +431,21 @@ class ExtensionSpecificDistributionManager { release: Release, progressCallback?: ProgressCallback, ): Promise { - await this.downloadDistribution(release, progressCallback); - // Store the installed release within the global extension state. - await this.storeInstalledRelease(release); + if (!this.distributionState) { + await this.ensureDistributionStateExists(); + } + + const distributionStatePath = this.getDistributionStatePath(); + + await withDistributionUpdateLock( + // .lock will be appended to this filename + distributionStatePath, + async () => { + await this.downloadDistribution(release, progressCallback); + // Store the installed release within the global extension state. + await this.storeInstalledRelease(release); + }, + ); } private async downloadDistribution( @@ -365,7 +457,7 @@ class ExtensionSpecificDistributionManager { } catch (e) { void extLogger.log( `Tried to clean up old version of CLI at ${this.getDistributionStoragePath()} ` + - `but encountered an error: ${e}.`, + `but encountered an error: ${getErrorMessage(e)}.`, ); } @@ -404,6 +496,11 @@ class ExtensionSpecificDistributionManager { signal, ); + const body = assetStream.body; + if (!body) { + throw new Error("No body in asset stream"); + } + const archivePath = join(tmpDirectory, "distributionDownload.zip"); archiveFile = createWriteStream(archivePath); @@ -411,27 +508,40 @@ class ExtensionSpecificDistributionManager { const totalNumBytes = contentLength ? parseInt(contentLength, 10) : undefined; - reportStreamProgress( - assetStream.body, + + const reportProgress = reportStreamProgress( `Downloading CodeQL CLI ${release.name}…`, totalNumBytes, progressCallback, ); - assetStream.body.on("data", onData); - - await new Promise((resolve, reject) => { - if (!archiveFile) { - throw new Error("Invariant violation: archiveFile not set"); + const reader = body.getReader(); + for (;;) { + const { done, value } = await reader.read(); + if (done) { + break; } - assetStream.body - .pipe(archiveFile) - .on("finish", resolve) - .on("error", reject); + onData(); + reportProgress(value?.length ?? 0); + + await new Promise((resolve, reject) => { + archiveFile?.write(value, (err) => { + if (err) { + reject(err); + } + resolve(undefined); + }); + }); + } - // If an error occurs on the body, we also want to reject the promise (e.g. during a timeout error). - assetStream.body.on("error", reject); + await new Promise((resolve, reject) => { + archiveFile?.close((err) => { + if (err) { + reject(err); + } + resolve(undefined); + }); }); disposeTimeout(); @@ -452,8 +562,8 @@ class ExtensionSpecificDistributionManager { : undefined, ); } catch (e) { - if (e instanceof AbortError) { - const thrownError = new AbortError("The download timed out."); + if (e instanceof DOMException && e.name === "AbortError") { + const thrownError = new Error("The download timed out."); thrownError.stack = e.stack; throw thrownError; } @@ -547,23 +657,19 @@ class ExtensionSpecificDistributionManager { } private async bumpDistributionFolderIndex(): Promise { - const index = this.extensionContext.globalState.get( - ExtensionSpecificDistributionManager._currentDistributionFolderIndexStateKey, - 0, - ); - await this.extensionContext.globalState.update( - ExtensionSpecificDistributionManager._currentDistributionFolderIndexStateKey, - index + 1, - ); + await this.updateState((oldState) => { + return { + ...oldState, + folderIndex: (oldState.folderIndex ?? 0) + 1, + }; + }); } private getDistributionStoragePath(): string { + const distributionState = this.getDistributionState(); + // Use an empty string for the initial distribution for backwards compatibility. - const distributionFolderIndex = - this.extensionContext.globalState.get( - ExtensionSpecificDistributionManager._currentDistributionFolderIndexStateKey, - 0, - ) || ""; + const distributionFolderIndex = distributionState.folderIndex || ""; return join( this.extensionContext.globalStorageUri.fsPath, ExtensionSpecificDistributionManager._currentDistributionFolderBaseName + @@ -578,26 +684,65 @@ class ExtensionSpecificDistributionManager { ); } - private getInstalledRelease(): Release | undefined { - return this.extensionContext.globalState.get( - ExtensionSpecificDistributionManager._installedReleaseStateKey, + private getDistributionStatePath(): string { + return join( + this.extensionContext.globalStorageUri.fsPath, + ExtensionSpecificDistributionManager._distributionStateFilename, ); } + private getInstalledRelease(): Release | undefined { + return this.getDistributionState().release ?? undefined; + } + private async storeInstalledRelease( release: Release | undefined, ): Promise { - await this.extensionContext.globalState.update( - ExtensionSpecificDistributionManager._installedReleaseStateKey, - release, - ); + await this.updateState((oldState) => ({ + ...oldState, + release: release ?? null, + })); + } + + private getDistributionState(): DistributionState { + const distributionState = this.distributionState; + if (distributionState === undefined) { + throw new Error( + "Invariant violation: distribution state not initialized", + ); + } + return distributionState; + } + + private async updateState( + f: (oldState: DistributionState) => DistributionState, + ) { + const oldState = this.distributionState; + if (oldState === undefined) { + throw new Error( + "Invariant violation: distribution state not initialized", + ); + } + const newState = f(oldState); + this.distributionState = newState; + + const distributionStatePath = this.getDistributionStatePath(); + await outputJson(distributionStatePath, newState); + } + + public get folderIndex() { + const distributionState = this.getDistributionState(); + + return distributionState.folderIndex; + } + + public get distributionFolderPrefix() { + return ExtensionSpecificDistributionManager._currentDistributionFolderBaseName; } private static readonly _currentDistributionFolderBaseName = "distribution"; - private static readonly _currentDistributionFolderIndexStateKey = - "distributionFolderIndex"; - private static readonly _installedReleaseStateKey = "distributionRelease"; private static readonly _codeQlExtractedFolderName = "codeql"; + private static readonly _distributionStateFilename = "distribution.json"; } /* diff --git a/extensions/ql-vscode/src/codeql-cli/distribution/cleaner.ts b/extensions/ql-vscode/src/codeql-cli/distribution/cleaner.ts new file mode 100644 index 00000000000..0b236cf66bd --- /dev/null +++ b/extensions/ql-vscode/src/codeql-cli/distribution/cleaner.ts @@ -0,0 +1,127 @@ +import type { ExtensionContext } from "vscode"; +import { getDirectoryNamesInsidePath, isIOError } from "../../common/files"; +import { sleep } from "../../common/time"; +import type { BaseLogger } from "../../common/logging"; +import { join } from "path"; +import { getErrorMessage } from "../../common/helpers-pure"; +import { pathExists, remove } from "fs-extra"; + +interface ExtensionManagedDistributionManager { + folderIndex: number; + distributionFolderPrefix: string; +} + +interface DistributionDirectory { + directoryName: string; + folderIndex: number; +} + +/** + * This class is responsible for cleaning up old distributions that are no longer needed. In normal operation, this + * should not be necessary as the old distribution is deleted when the distribution is updated. However, in some cases + * the extension may leave behind old distribution which can result in a significant amount of space (> 100 GB) being + * taking up by unused distributions. + */ +export class ExtensionManagedDistributionCleaner { + constructor( + private readonly extensionContext: ExtensionContext, + private readonly logger: BaseLogger, + private readonly manager: ExtensionManagedDistributionManager, + ) {} + + public start() { + // Intentionally starting this without waiting for it + void this.cleanup().catch((e: unknown) => { + void this.logger.log( + `Failed to clean up old versions of the CLI: ${getErrorMessage(e)}`, + ); + }); + } + + public async cleanup() { + if (!(await pathExists(this.extensionContext.globalStorageUri.fsPath))) { + return; + } + + const currentFolderIndex = this.manager.folderIndex; + + const distributionDirectoryRegex = new RegExp( + `^${this.manager.distributionFolderPrefix}(\\d+)$`, + ); + + const existingDirectories = await getDirectoryNamesInsidePath( + this.extensionContext.globalStorageUri.fsPath, + ); + const distributionDirectories = existingDirectories + .map((dir): DistributionDirectory | null => { + const match = dir.match(distributionDirectoryRegex); + if (!match) { + // When the folderIndex is 0, the distributionFolderPrefix is used as the directory name + if (dir === this.manager.distributionFolderPrefix) { + return { + directoryName: dir, + folderIndex: 0, + }; + } + + return null; + } + + return { + directoryName: dir, + folderIndex: parseInt(match[1]), + }; + }) + .filter((dir) => dir !== null); + + // Clean up all directories that are older than the current one + const cleanableDirectories = distributionDirectories.filter( + (dir) => dir.folderIndex < currentFolderIndex, + ); + + if (cleanableDirectories.length === 0) { + return; + } + + // Shuffle the array so that multiple VS Code processes don't all try to clean up the same directory at the same time + for (let i = cleanableDirectories.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [cleanableDirectories[i], cleanableDirectories[j]] = [ + cleanableDirectories[j], + cleanableDirectories[i], + ]; + } + + void this.logger.log( + `Cleaning up ${cleanableDirectories.length} old versions of the CLI.`, + ); + + for (const cleanableDirectory of cleanableDirectories) { + // Wait 10 seconds between each cleanup to avoid overloading the system (even though the remove call should be async) + await sleep(10_000); + + const path = join( + this.extensionContext.globalStorageUri.fsPath, + cleanableDirectory.directoryName, + ); + + // Delete this directory + try { + await remove(path); + } catch (e) { + if (isIOError(e) && e.code === "ENOENT") { + // If the directory doesn't exist, that's fine + continue; + } + + void this.logger.log( + `Tried to clean up an old version of the CLI at ${path} but encountered an error: ${getErrorMessage(e)}.`, + ); + } + } + + void this.logger.log( + `Cleaned up ${cleanableDirectories.length} old versions of the CLI.`, + ); + } +} diff --git a/extensions/ql-vscode/src/codeql-cli/distribution/releases-api-consumer.ts b/extensions/ql-vscode/src/codeql-cli/distribution/releases-api-consumer.ts index ff482a7b2c3..4b28af44423 100644 --- a/extensions/ql-vscode/src/codeql-cli/distribution/releases-api-consumer.ts +++ b/extensions/ql-vscode/src/codeql-cli/distribution/releases-api-consumer.ts @@ -1,5 +1,3 @@ -import type { Response } from "node-fetch"; -import { default as fetch } from "node-fetch"; import type { Range } from "semver"; import { compare, parse, satisfies } from "semver"; import { URL } from "url"; @@ -34,9 +32,9 @@ export class ReleasesApiConsumer { additionalCompatibilityCheck?: (release: GithubRelease) => boolean, ): Promise { const apiPath = `/repos/${this.repositoryNwo}/releases`; - const allReleases: GithubRelease[] = await ( + const allReleases = (await ( await this.makeApiCall(apiPath) - ).json(); + ).json()) as GithubRelease[]; const compatibleReleases = allReleases.filter((release) => { if (release.prerelease && !includePrerelease) { return false; diff --git a/extensions/ql-vscode/src/codeql-cli/lock.ts b/extensions/ql-vscode/src/codeql-cli/lock.ts new file mode 100644 index 00000000000..8dfc84d98d9 --- /dev/null +++ b/extensions/ql-vscode/src/codeql-cli/lock.ts @@ -0,0 +1,22 @@ +import { lock } from "proper-lockfile"; + +export async function withDistributionUpdateLock( + lockFile: string, + f: () => Promise, +) { + const release = await lock(lockFile, { + stale: 60_000, // 1 minute. We can take the lock longer than this because that's based on the update interval. + update: 10_000, // 10 seconds + retries: { + minTimeout: 10_000, + maxTimeout: 60_000, + retries: 100, + }, + }); + + try { + await f(); + } finally { + await release(); + } +} diff --git a/extensions/ql-vscode/src/codeql-cli/query-language.ts b/extensions/ql-vscode/src/codeql-cli/query-language.ts index ba327560dde..d5cef76e697 100644 --- a/extensions/ql-vscode/src/codeql-cli/query-language.ts +++ b/extensions/ql-vscode/src/codeql-cli/query-language.ts @@ -36,7 +36,7 @@ export async function findLanguage( void extLogger.log( "Query language is unsupported. Select language manually.", ); - } catch (e) { + } catch { void extLogger.log( "Could not autodetect query language. Select language manually.", ); @@ -89,7 +89,7 @@ export async function askForLanguage( if (!isQueryLanguage(language)) { void showAndLogErrorMessage( extLogger, - `Language '${language}' is not supported. Only languages ${Object.values( + `Language '${language as string}' is not supported. Only languages ${Object.values( QueryLanguage, ).join(", ")} are supported.`, ); diff --git a/extensions/ql-vscode/src/codeql-cli/query-metadata.ts b/extensions/ql-vscode/src/codeql-cli/query-metadata.ts index 0991bf952d3..88fe52d49ba 100644 --- a/extensions/ql-vscode/src/codeql-cli/query-metadata.ts +++ b/extensions/ql-vscode/src/codeql-cli/query-metadata.ts @@ -1,6 +1,7 @@ import type { CodeQLCliServer } from "./cli"; import type { QueryMetadata } from "../common/interface-types"; import { extLogger } from "../common/logging/vscode"; +import { getErrorMessage } from "../common/helpers-pure"; /** * Gets metadata for a query, if it exists. @@ -16,7 +17,9 @@ export async function tryGetQueryMetadata( return await cliServer.resolveMetadata(queryPath); } catch (e) { // Ignore errors and provide no metadata. - void extLogger.log(`Couldn't resolve metadata for ${queryPath}: ${e}`); + void extLogger.log( + `Couldn't resolve metadata for ${queryPath}: ${getErrorMessage(e)}`, + ); return; } } diff --git a/extensions/ql-vscode/src/common/bqrs-cli-types.ts b/extensions/ql-vscode/src/common/bqrs-cli-types.ts index 2eb565a7215..e9e726957e3 100644 --- a/extensions/ql-vscode/src/common/bqrs-cli-types.ts +++ b/extensions/ql-vscode/src/common/bqrs-cli-types.ts @@ -11,6 +11,7 @@ export namespace BqrsColumnKindCode { export const BOOLEAN = "b"; export const DATE = "d"; export const ENTITY = "e"; + export const BIGINT = "z"; } export type BqrsColumnKind = @@ -19,7 +20,8 @@ export type BqrsColumnKind = | typeof BqrsColumnKindCode.STRING | typeof BqrsColumnKindCode.BOOLEAN | typeof BqrsColumnKindCode.DATE - | typeof BqrsColumnKindCode.ENTITY; + | typeof BqrsColumnKindCode.ENTITY + | typeof BqrsColumnKindCode.BIGINT; export interface BqrsSchemaColumn { name?: string; @@ -79,7 +81,8 @@ export type BqrsKind = | "Integer" | "Boolean" | "Date" - | "Entity"; + | "Entity" + | "BigInt"; interface BqrsColumn { name?: string; diff --git a/extensions/ql-vscode/src/common/bqrs-raw-results-mapper.ts b/extensions/ql-vscode/src/common/bqrs-raw-results-mapper.ts index 1074f9b8979..10bd5fe9e33 100644 --- a/extensions/ql-vscode/src/common/bqrs-raw-results-mapper.ts +++ b/extensions/ql-vscode/src/common/bqrs-raw-results-mapper.ts @@ -76,6 +76,8 @@ function mapColumnKind(kind: BqrsColumnKind): ColumnKind { return ColumnKind.Date; case BqrsColumnKindCode.ENTITY: return ColumnKind.Entity; + case BqrsColumnKindCode.BIGINT: + return ColumnKind.BigInt; default: assertNever(kind); } diff --git a/extensions/ql-vscode/src/common/commands.ts b/extensions/ql-vscode/src/common/commands.ts index 7b1cadcda7b..64585a8c9e8 100644 --- a/extensions/ql-vscode/src/common/commands.ts +++ b/extensions/ql-vscode/src/common/commands.ts @@ -138,6 +138,7 @@ export type LocalQueryCommands = { "codeQLQueries.createQuery": () => Promise; "codeQL.runLocalQueryFromFileTab": (uri: Uri) => Promise; "codeQL.runQueries": ExplorerSelectionCommandFunction; + "codeQL.runQuerySuite": ExplorerSelectionCommandFunction; "codeQL.quickEval": (uri: Uri) => Promise; "codeQL.quickEvalCount": (uri: Uri) => Promise; "codeQL.quickEvalContextEditor": (uri: Uri) => Promise; @@ -180,6 +181,7 @@ export type QueryHistoryCommands = { "codeQLQueryHistory.removeHistoryItemContextInline": TreeViewContextMultiSelectionCommandFunction; "codeQLQueryHistory.renameItem": TreeViewContextMultiSelectionCommandFunction; "codeQLQueryHistory.compareWith": TreeViewContextMultiSelectionCommandFunction; + "codeQLQueryHistory.comparePerformanceWith": TreeViewContextMultiSelectionCommandFunction; "codeQLQueryHistory.showEvalLog": TreeViewContextMultiSelectionCommandFunction; "codeQLQueryHistory.showEvalLogSummary": TreeViewContextMultiSelectionCommandFunction; "codeQLQueryHistory.showEvalLogViewer": TreeViewContextMultiSelectionCommandFunction; @@ -195,6 +197,7 @@ export type QueryHistoryCommands = { "codeQLQueryHistory.itemClicked": TreeViewContextMultiSelectionCommandFunction; "codeQLQueryHistory.openOnGithub": TreeViewContextMultiSelectionCommandFunction; "codeQLQueryHistory.copyRepoList": TreeViewContextMultiSelectionCommandFunction; + "codeQLQueryHistory.viewAutofixes": TreeViewContextMultiSelectionCommandFunction; // Commands in the command palette "codeQL.exportSelectedVariantAnalysisResults": () => Promise; @@ -211,12 +214,14 @@ export type LanguageSelectionCommands = { export type LocalDatabasesCommands = { // Command palette commands "codeQL.chooseDatabaseFolder": () => Promise; + "codeQL.chooseDatabaseFoldersParent": () => Promise; "codeQL.chooseDatabaseArchive": () => Promise; "codeQL.chooseDatabaseInternet": () => Promise; "codeQL.chooseDatabaseGithub": () => Promise; "codeQL.upgradeCurrentDatabase": () => Promise; "codeQL.clearCache": () => Promise; "codeQL.trimCache": () => Promise; + "codeQL.trimOverlayBaseCache": () => Promise; // Explorer context menu "codeQL.setCurrentDatabase": (uri: Uri) => Promise; @@ -348,7 +353,9 @@ export type MockGitHubApiServerCommands = { "codeQL.mockGitHubApiServer.startRecording": () => Promise; "codeQL.mockGitHubApiServer.saveScenario": () => Promise; "codeQL.mockGitHubApiServer.cancelRecording": () => Promise; - "codeQL.mockGitHubApiServer.loadScenario": () => Promise; + "codeQL.mockGitHubApiServer.loadScenario": ( + scenario?: string, + ) => Promise; "codeQL.mockGitHubApiServer.unloadScenario": () => Promise; }; diff --git a/extensions/ql-vscode/src/common/github-url-identifier-helper.ts b/extensions/ql-vscode/src/common/github-url-identifier-helper.ts index 3f5a8e2dbe7..1ea4e327b9d 100644 --- a/extensions/ql-vscode/src/common/github-url-identifier-helper.ts +++ b/extensions/ql-vscode/src/common/github-url-identifier-helper.ts @@ -78,7 +78,7 @@ function getNwoOrOwnerFromGitHubUrl( } const nwo = `${paths[0]}/${paths[1]}`; return paths[1] ? nwo : undefined; - } catch (e) { + } catch { // Ignore the error here, since we catch failures at a higher level. return; } diff --git a/extensions/ql-vscode/src/common/helpers-pure.ts b/extensions/ql-vscode/src/common/helpers-pure.ts index 20c1a780cb3..861e250b93f 100644 --- a/extensions/ql-vscode/src/common/helpers-pure.ts +++ b/extensions/ql-vscode/src/common/helpers-pure.ts @@ -69,7 +69,7 @@ export function getErrorMessage(e: unknown): string { } export function getErrorStack(e: unknown): string { - return e instanceof Error ? e.stack ?? "" : ""; + return e instanceof Error ? (e.stack ?? "") : ""; } export function asError(e: unknown): Error { diff --git a/extensions/ql-vscode/src/common/interface-types.ts b/extensions/ql-vscode/src/common/interface-types.ts index 2188fce86fc..eca0779966a 100644 --- a/extensions/ql-vscode/src/common/interface-types.ts +++ b/extensions/ql-vscode/src/common/interface-types.ts @@ -27,6 +27,7 @@ import type { } from "./raw-result-types"; import type { AccessPathSuggestionOptions } from "../model-editor/suggestions"; import type { ModelEvaluationRunState } from "../model-editor/shared/model-evaluation-run-state"; +import type { PerformanceComparisonDataFromLog } from "../log-insights/performance-comparison"; /** * This module contains types and code that are shared between @@ -162,6 +163,25 @@ interface SetUserSettingsMsg { userSettings: UserSettings; } +export interface VariantAnalysisUserSettings { + /** Whether to display the "View Autofixes" button. */ + shouldShowViewAutofixesButton: boolean; +} + +export const DEFAULT_VARIANT_ANALYSIS_USER_SETTINGS: VariantAnalysisUserSettings = + { + shouldShowViewAutofixesButton: false, + }; + +/** + * Message indicating that the user's variant analysis configuration + * settings have changed. + */ +interface SetVariantAnalysisUserSettingsMsg { + t: "setVariantAnalysisUserSettings"; + variantAnalysisUserSettings: VariantAnalysisUserSettings; +} + /** * Message indicating that the results view should display interpreted * results. @@ -360,6 +380,9 @@ interface ChangeCompareMessage { export type ToCompareViewMessage = | SetComparisonQueryInfoMessage | SetComparisonsMessage + | StreamingComparisonSetupMessage + | StreamingComparisonAddResultsMessage + | StreamingComparisonCompleteMessage | SetUserSettingsMsg; /** @@ -393,6 +416,17 @@ export interface SetComparisonsMessage { readonly message: string | undefined; } +export type ToComparePerformanceViewMessage = SetPerformanceComparisonQueries; + +export interface SetPerformanceComparisonQueries { + readonly t: "setPerformanceComparison"; + readonly from: PerformanceComparisonDataFromLog; + readonly to: PerformanceComparisonDataFromLog; + readonly comparison: boolean; +} + +export type FromComparePerformanceViewMessage = CommonFromViewMessages; + export type QueryCompareResult = | RawQueryCompareResult | InterpretedQueryCompareResult; @@ -419,6 +453,28 @@ export type InterpretedQueryCompareResult = { to: Result[]; }; +export interface StreamingComparisonSetupMessage { + readonly t: "streamingComparisonSetup"; + // The id of this streaming comparison + readonly id: string; + readonly currentResultSetName: string; + readonly message: string | undefined; + // The from and to fields will only contain a chunk of the results + readonly result: QueryCompareResult; +} + +interface StreamingComparisonAddResultsMessage { + readonly t: "streamingComparisonAddResults"; + readonly id: string; + // The from and to fields will only contain a chunk of the results + readonly result: QueryCompareResult; +} + +interface StreamingComparisonCompleteMessage { + readonly t: "streamingComparisonComplete"; + readonly id: string; +} + /** * Extract the name of the default result. Prefer returning * 'alerts', or '#select'. Otherwise return the first in the list. @@ -490,6 +546,11 @@ interface OpenQueryTextMessage { t: "openQueryText"; } +interface ViewAutofixesMessage { + t: "viewAutofixes"; + filterSort?: RepositoriesFilterSortStateWithIds; +} + interface CopyRepositoryListMessage { t: "copyRepositoryList"; filterSort?: RepositoriesFilterSortStateWithIds; @@ -517,13 +578,15 @@ export type ToVariantAnalysisMessage = | SetVariantAnalysisMessage | SetFilterSortStateMessage | SetRepoResultsMessage - | SetRepoStatesMessage; + | SetRepoStatesMessage + | SetVariantAnalysisUserSettingsMsg; export type FromVariantAnalysisMessage = | CommonFromViewMessages | RequestRepositoryResultsMessage | OpenQueryFileMessage | OpenQueryTextMessage + | ViewAutofixesMessage | CopyRepositoryListMessage | ExportResultsMessage | OpenLogsMessage @@ -560,16 +623,6 @@ interface SetModifiedMethodsMessage { methodSignatures: string[]; } -interface SetInProgressMethodsMessage { - t: "setInProgressMethods"; - methods: string[]; -} - -interface SetProcessedByAutoModelMethodsMessage { - t: "setProcessedByAutoModelMethods"; - methods: string[]; -} - interface SwitchModeMessage { t: "switchMode"; mode: Mode; @@ -601,17 +654,6 @@ interface GenerateMethodMessage { t: "generateMethod"; } -interface GenerateMethodsFromLlmMessage { - t: "generateMethodsFromLlm"; - packageName: string; - methodSignatures: string[]; -} - -interface StopGeneratingMethodsFromLlmMessage { - t: "stopGeneratingMethodsFromLlm"; - packageName: string; -} - interface StartModelEvaluationMessage { t: "startModelEvaluation"; } @@ -649,16 +691,6 @@ interface SetInModelingModeMessage { inModelingMode: boolean; } -interface SetInProgressMessage { - t: "setInProgress"; - inProgress: boolean; -} - -interface SetProcessedByAutoModelMessage { - t: "setProcessedByAutoModel"; - processedByAutoModel: boolean; -} - interface RevealMethodMessage { t: "revealMethod"; methodSignature: string; @@ -679,8 +711,6 @@ export type ToModelEditorMessage = | SetMethodsMessage | SetModeledAndModifiedMethodsMessage | SetModifiedMethodsMessage - | SetInProgressMethodsMessage - | SetProcessedByAutoModelMethodsMessage | RevealMethodMessage | SetAccessPathSuggestionsMessage | SetModelEvaluationRunMessage; @@ -694,8 +724,6 @@ export type FromModelEditorMessage = | JumpToMethodMessage | SaveModeledMethods | GenerateMethodMessage - | GenerateMethodsFromLlmMessage - | StopGeneratingMethodsFromLlmMessage | ModelDependencyMessage | HideModeledMethodsMessage | SetMultipleModeledMethodsMessage @@ -738,8 +766,6 @@ interface SetSelectedMethodMessage { method: Method; modeledMethods: ModeledMethod[]; isModified: boolean; - isInProgress: boolean; - processedByAutoModel: boolean; } export type ToMethodModelingMessage = @@ -748,9 +774,7 @@ export type ToMethodModelingMessage = | SetMethodModifiedMessage | SetNoMethodSelectedMessage | SetSelectedMethodMessage - | SetInModelingModeMessage - | SetInProgressMessage - | SetProcessedByAutoModelMessage; + | SetInModelingModeMessage; interface SetModelAlertsViewStateMessage { t: "setModelAlertsViewState"; diff --git a/extensions/ql-vscode/src/common/jsonl-reader.ts b/extensions/ql-vscode/src/common/jsonl-reader.ts index a20488c48d2..cff0dcf0ec2 100644 --- a/extensions/ql-vscode/src/common/jsonl-reader.ts +++ b/extensions/ql-vscode/src/common/jsonl-reader.ts @@ -1,26 +1,62 @@ -import { readFile } from "fs-extra"; +import { stat } from "fs/promises"; +import { createReadStream } from "fs-extra"; +import type { BaseLogger } from "./logging"; +import { asError } from "./helpers-pure"; + +const doubleLineBreakRegexp = /\n\r?\n/; /** * Read a file consisting of multiple JSON objects. Each object is separated from the previous one * by a double newline sequence. This is basically a more human-readable form of JSONL. * - * The current implementation reads the entire text of the document into memory, but in the future - * it will stream the document to improve the performance with large documents. - * * @param path The path to the file. * @param handler Callback to be invoked for each top-level JSON object in order. */ export async function readJsonlFile( path: string, handler: (value: T) => Promise, + logger?: BaseLogger, ): Promise { - const logSummary = await readFile(path, "utf-8"); - - // Remove newline delimiters because summary is in .jsonl format. - const jsonSummaryObjects: string[] = logSummary.split(/\r?\n\r?\n/g); + // Stream the data as large evaluator logs won't fit in memory. + // Also avoid using 'readline' as it is slower than our manual line splitting. + void logger?.log( + `Parsing ${path} (${(await stat(path)).size / 1024 / 1024} MB)...`, + ); + return new Promise((resolve, reject) => { + const stream = createReadStream(path, { encoding: "utf8" }); + let buffer = ""; + stream.on("data", async (chunk: string | Buffer) => { + if (typeof chunk !== "string") { + // This should never happen because we specify the encoding as "utf8". + throw new Error("Invalid chunk"); + } - for (const obj of jsonSummaryObjects) { - const jsonObj = JSON.parse(obj) as T; - await handler(jsonObj); - } + const parts = (buffer + chunk).split(doubleLineBreakRegexp); + buffer = parts.pop()!; + if (parts.length > 0) { + try { + stream.pause(); + for (const part of parts) { + await handler(JSON.parse(part)); + } + stream.resume(); + } catch (e) { + stream.destroy(); + reject(asError(e)); + } + } + }); + stream.on("end", async () => { + try { + if (buffer.trim().length > 0) { + await handler(JSON.parse(buffer)); + } + void logger?.log(`Finished parsing ${path}`); + resolve(); + } catch (e) { + reject(asError(e)); + } + }); + stream.on("error", reject); + }); } diff --git a/extensions/ql-vscode/src/common/mock-gh-api/gh-api-request.ts b/extensions/ql-vscode/src/common/mock-gh-api/gh-api-request.ts index b9c08955cd5..b27533bccd1 100644 --- a/extensions/ql-vscode/src/common/mock-gh-api/gh-api-request.ts +++ b/extensions/ql-vscode/src/common/mock-gh-api/gh-api-request.ts @@ -14,7 +14,6 @@ export enum RequestKind { GetVariantAnalysisRepo = "getVariantAnalysisRepo", GetVariantAnalysisRepoResult = "getVariantAnalysisRepoResult", CodeSearch = "codeSearch", - AutoModel = "autoModel", } export interface BasicErrorResponse { @@ -69,7 +68,7 @@ export interface GetVariantAnalysisRepoResultRequest { }; response: { status: number; - body?: Buffer | string; + body?: ArrayBuffer | string; contentType: string; }; } @@ -92,31 +91,13 @@ interface CodeSearchRequest { }; } -export interface AutoModelResponse { - models: string; -} - -interface AutoModelRequest { - request: { - kind: RequestKind.AutoModel; - body?: { - candidates: string; - }; - }; - response: { - status: number; - body?: AutoModelResponse | BasicErrorResponse; - }; -} - export type GitHubApiRequest = | GetRepoRequest | SubmitVariantAnalysisRequest | GetVariantAnalysisRequest | GetVariantAnalysisRepoRequest | GetVariantAnalysisRepoResultRequest - | CodeSearchRequest - | AutoModelRequest; + | CodeSearchRequest; export const isGetRepoRequest = ( request: GitHubApiRequest, @@ -146,8 +127,3 @@ export const isCodeSearchRequest = ( request: GitHubApiRequest, ): request is CodeSearchRequest => request.request.kind === RequestKind.CodeSearch; - -export const isAutoModelRequest = ( - request: GitHubApiRequest, -): request is AutoModelRequest => - request.request.kind === RequestKind.AutoModel; diff --git a/extensions/ql-vscode/src/common/mock-gh-api/mock-gh-api-server.ts b/extensions/ql-vscode/src/common/mock-gh-api/mock-gh-api-server.ts index 41f19ccb9eb..34f1a954861 100644 --- a/extensions/ql-vscode/src/common/mock-gh-api/mock-gh-api-server.ts +++ b/extensions/ql-vscode/src/common/mock-gh-api/mock-gh-api-server.ts @@ -2,6 +2,7 @@ import { join, resolve } from "path"; import { pathExists } from "fs-extra"; import type { SetupServer } from "msw/node"; import { setupServer } from "msw/node"; +import type { UnhandledRequestStrategy } from "msw/lib/core/utils/request/onUnhandledRequest"; import { DisposableObject } from "../disposable-object"; @@ -26,12 +27,14 @@ export class MockGitHubApiServer extends DisposableObject { this.recorder = this.push(new Recorder(this.server)); } - public startServer(): void { + public startServer( + onUnhandledRequest: UnhandledRequestStrategy = "bypass", + ): void { if (this._isListening) { return; } - this.server.listen({ onUnhandledRequest: "bypass" }); + this.server.listen({ onUnhandledRequest }); this._isListening = true; } @@ -54,8 +57,7 @@ export class MockGitHubApiServer extends DisposableObject { const scenarioPath = join(scenariosPath, scenarioName); const handlers = await createRequestHandlers(scenarioPath); - this.server.resetHandlers(); - this.server.use(...handlers); + this.server.resetHandlers(...handlers); } public async saveScenario( diff --git a/extensions/ql-vscode/src/common/mock-gh-api/recorder.ts b/extensions/ql-vscode/src/common/mock-gh-api/recorder.ts index 234e42a7936..4f82b0f5493 100644 --- a/extensions/ql-vscode/src/common/mock-gh-api/recorder.ts +++ b/extensions/ql-vscode/src/common/mock-gh-api/recorder.ts @@ -1,14 +1,12 @@ import { ensureDir, writeFile } from "fs-extra"; import { join } from "path"; -import fetch from "node-fetch"; import type { SetupServer } from "msw/node"; import { DisposableObject } from "../disposable-object"; import { gzipDecode } from "../zlib"; import type { - AutoModelResponse, BasicErrorResponse, CodeSearchResponse, GetVariantAnalysisRepoResultRequest, @@ -91,7 +89,14 @@ export class Recorder extends DisposableObject { let bodyFileLink = undefined; if (writtenRequest.response.body) { - await writeFile(bodyFilePath, writtenRequest.response.body); + if (typeof writtenRequest.response.body === "string") { + await writeFile(bodyFilePath, writtenRequest.response.body); + } else { + await writeFile( + bodyFilePath, + Buffer.from(writtenRequest.response.body), + ); + } bodyFileLink = `file:${bodyFileName}`; } @@ -226,7 +231,7 @@ async function createGitHubApiRequest( "x-vscode-codeql-msw-bypass": "true", }, }); - const responseBuffer = await response.buffer(); + const responseBuffer = await response.arrayBuffer(); return { request: { @@ -258,23 +263,6 @@ async function createGitHubApiRequest( }; } - const autoModelMatch = url.match( - /\/repos\/github\/codeql\/code-scanning\/codeql\/auto-model/, - ); - if (autoModelMatch) { - return { - request: { - kind: RequestKind.AutoModel, - }, - response: { - status, - body: await jsonResponseBody< - BasicErrorResponse | AutoModelResponse | undefined - >(response), - }, - }; - } - return undefined; } @@ -295,7 +283,7 @@ async function jsonResponseBody(response: Response): Promise { const body = await responseBody(response); const text = new TextDecoder("utf-8").decode(body); - return JSON.parse(text); + return JSON.parse(text) as T; } function shouldWriteBodyToFile( diff --git a/extensions/ql-vscode/src/common/mock-gh-api/request-handlers.ts b/extensions/ql-vscode/src/common/mock-gh-api/request-handlers.ts index d445434a509..b6d3dc8b403 100644 --- a/extensions/ql-vscode/src/common/mock-gh-api/request-handlers.ts +++ b/extensions/ql-vscode/src/common/mock-gh-api/request-handlers.ts @@ -4,7 +4,6 @@ import type { RequestHandler } from "msw"; import { http } from "msw"; import type { GitHubApiRequest } from "./gh-api-request"; import { - isAutoModelRequest, isCodeSearchRequest, isGetRepoRequest, isGetVariantAnalysisRepoRequest, @@ -41,7 +40,6 @@ export async function createRequestHandlers( createGetVariantAnalysisRepoRequestHandler(requests), createGetVariantAnalysisRepoResultRequestHandler(requests), createCodeSearchRequestHandler(requests), - createAutoModelRequestHandler(requests), ]; return handlers; @@ -73,9 +71,10 @@ async function readRequestFiles( typeof request.response.body === "string" && request.response.body.startsWith("file:") ) { - request.response.body = await readFile( + const buffer = await readFile( join(scenarioDirPath, request.response.body.substring(5)), ); + request.response.body = buffer.buffer; } requests.push(request); @@ -230,29 +229,3 @@ function createCodeSearchRequestHandler( }); }); } - -function createAutoModelRequestHandler( - requests: GitHubApiRequest[], -): RequestHandler { - const autoModelRequests = requests.filter(isAutoModelRequest); - let requestIndex = 0; - - // During automodeling there can be multiple API requests for each batch - // of candidates we want to model. We need to return different responses for each request, - // so keep an index of the request and return the appropriate response. - return http.post( - `${baseUrl}/repos/github/codeql/code-scanning/codeql/auto-model`, - () => { - const request = autoModelRequests[requestIndex]; - - if (requestIndex < autoModelRequests.length - 1) { - // If there are more requests to come, increment the index. - requestIndex++; - } - - return jsonResponse(request.response.body, { - status: request.response.status, - }); - }, - ); -} diff --git a/extensions/ql-vscode/src/common/mock-gh-api/scenarios/auto-model-success/0-autoModel.json b/extensions/ql-vscode/src/common/mock-gh-api/scenarios/auto-model-success/0-autoModel.json deleted file mode 100644 index 1aef8ebaceb..00000000000 --- a/extensions/ql-vscode/src/common/mock-gh-api/scenarios/auto-model-success/0-autoModel.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "request": { - "kind": "autoModel" - }, - "response": { - "status": 200, - "body": { - "models": "extensions:\n- addsTo: {extensible: sinkModel, pack: codeql/java-all}\n data:\n - [javax.servlet.http, HttpServletResponse, true, sendRedirect, (String), '', 'Argument[this]',\n request-forgery, ai-generated]\n - [javax.servlet.http, HttpServletResponse, true, sendRedirect, (String), '', 'Argument[0]',\n request-forgery, ai-generated]\n" - } - } -} diff --git a/extensions/ql-vscode/src/common/mock-gh-api/scenarios/auto-model-success/1-autoModel.json b/extensions/ql-vscode/src/common/mock-gh-api/scenarios/auto-model-success/1-autoModel.json deleted file mode 100644 index 44aa6a14f5d..00000000000 --- a/extensions/ql-vscode/src/common/mock-gh-api/scenarios/auto-model-success/1-autoModel.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "request": { - "kind": "autoModel" - }, - "response": { - "status": 200, - "body": { - "models": "extensions:\n- addsTo: {extensible: sinkModel, pack: codeql/java-all}\n data:\n - [javax.servlet, MultipartConfigElement, true, MultipartConfigElement, (String),\n '', 'Argument[0]', request-forgery, ai-generated]\n" - } - } -} diff --git a/extensions/ql-vscode/src/common/mock-gh-api/scenarios/auto-model-success/README.md b/extensions/ql-vscode/src/common/mock-gh-api/scenarios/auto-model-success/README.md deleted file mode 100644 index 02382bce1f9..00000000000 --- a/extensions/ql-vscode/src/common/mock-gh-api/scenarios/auto-model-success/README.md +++ /dev/null @@ -1 +0,0 @@ -This scenario is best when modeling the `javax.servlet-api` package. diff --git a/extensions/ql-vscode/src/common/mock-gh-api/vscode/vscode-mock-gh-api-server.ts b/extensions/ql-vscode/src/common/mock-gh-api/vscode/vscode-mock-gh-api-server.ts index b194bc360ad..8e1e04e9daa 100644 --- a/extensions/ql-vscode/src/common/mock-gh-api/vscode/vscode-mock-gh-api-server.ts +++ b/extensions/ql-vscode/src/common/mock-gh-api/vscode/vscode-mock-gh-api-server.ts @@ -63,26 +63,33 @@ export class VSCodeMockGitHubApiServer extends DisposableObject { ); } - public async loadScenario(): Promise { + public async loadScenario(scenario?: string): Promise { const scenariosPath = await this.getScenariosPath(); if (!scenariosPath) { return; } - const scenarioNames = await this.server.getScenarioNames(scenariosPath); - const scenarioQuickPickItems = scenarioNames.map((s) => ({ label: s })); - const quickPickOptions = { - placeHolder: "Select a scenario to load", - }; - const selectedScenario = await window.showQuickPick( - scenarioQuickPickItems, - quickPickOptions, - ); - if (!selectedScenario) { - return; + let scenarioName = scenario; + if (!scenarioName) { + const scenarioNames = await this.server.getScenarioNames(scenariosPath); + const scenarioQuickPickItems = scenarioNames.map((s) => ({ label: s })); + const quickPickOptions = { + placeHolder: "Select a scenario to load", + }; + const selectedScenario = await window.showQuickPick( + scenarioQuickPickItems, + quickPickOptions, + ); + if (!selectedScenario) { + return; + } + + scenarioName = selectedScenario.label; } - const scenarioName = selectedScenario.label; + if (!this.server.isListening && this.app.mode === AppMode.Test) { + await this.startServer(); + } await this.server.loadScenario(scenarioName, scenariosPath); @@ -94,12 +101,12 @@ export class VSCodeMockGitHubApiServer extends DisposableObject { true, ); - await window.showInformationMessage(`Loaded scenario '${scenarioName}'`); + void window.showInformationMessage(`Loaded scenario '${scenarioName}'`); } public async unloadScenario(): Promise { if (!this.server.isScenarioLoaded) { - await window.showInformationMessage("No scenario currently loaded"); + void window.showInformationMessage("No scenario currently loaded"); } else { await this.server.unloadScenario(); await this.app.commands.execute( @@ -107,7 +114,11 @@ export class VSCodeMockGitHubApiServer extends DisposableObject { "codeQL.mockGitHubApiServer.scenarioLoaded", false, ); - await window.showInformationMessage("Unloaded scenario"); + void window.showInformationMessage("Unloaded scenario"); + } + + if (this.server.isListening && this.app.mode === AppMode.Test) { + await this.stopServer(); } } @@ -139,7 +150,7 @@ export class VSCodeMockGitHubApiServer extends DisposableObject { true, ); - await window.showInformationMessage( + void window.showInformationMessage( 'Recording scenario. To save the scenario, use the "CodeQL Mock GitHub API Server: Save Scenario" command.', ); } @@ -221,7 +232,10 @@ export class VSCodeMockGitHubApiServer extends DisposableObject { return scenariosPath; } - if (this.app.mode === AppMode.Development) { + if ( + this.app.mode === AppMode.Development || + this.app.mode === AppMode.Test + ) { const developmentScenariosPath = path.join( this.app.extensionPath, "src/common/mock-gh-api/scenarios", diff --git a/extensions/ql-vscode/src/common/octokit.ts b/extensions/ql-vscode/src/common/octokit.ts index f0d97f182d4..f3717c5b2e9 100644 --- a/extensions/ql-vscode/src/common/octokit.ts +++ b/extensions/ql-vscode/src/common/octokit.ts @@ -1,10 +1,13 @@ import { Octokit } from "@octokit/rest"; import { retry } from "@octokit/plugin-retry"; -import fetch from "node-fetch"; export const AppOctokit = Octokit.defaults({ request: { - fetch, + // MSW replaces the global fetch object, so we can't just pass a reference to the + // fetch object at initialization time. Instead, we pass a function that will + // always call the global fetch object. + fetch: (input: string | URL | Request, init?: RequestInit) => + fetch(input, init), }, retry, }); diff --git a/extensions/ql-vscode/src/common/query-language.ts b/extensions/ql-vscode/src/common/query-language.ts index 2cf0155b578..03feb4b1353 100644 --- a/extensions/ql-vscode/src/common/query-language.ts +++ b/extensions/ql-vscode/src/common/query-language.ts @@ -1,4 +1,5 @@ export enum QueryLanguage { + Actions = "actions", CSharp = "csharp", Cpp = "cpp", Go = "go", @@ -6,11 +7,14 @@ export enum QueryLanguage { Javascript = "javascript", Python = "python", Ruby = "ruby", + Rust = "rust", Swift = "swift", } export function getLanguageDisplayName(language: string): string { - switch (language) { + switch (language as QueryLanguage) { + case QueryLanguage.Actions: + return "Actions"; case QueryLanguage.CSharp: return "C#"; case QueryLanguage.Cpp: @@ -25,6 +29,8 @@ export function getLanguageDisplayName(language: string): string { return "Python"; case QueryLanguage.Ruby: return "Ruby"; + case QueryLanguage.Rust: + return "Rust"; case QueryLanguage.Swift: return "Swift"; default: @@ -33,6 +39,7 @@ export function getLanguageDisplayName(language: string): string { } export const PACKS_BY_QUERY_LANGUAGE = { + [QueryLanguage.Actions]: ["codeql/actions-queries"], [QueryLanguage.Cpp]: ["codeql/cpp-queries"], [QueryLanguage.CSharp]: [ "codeql/csharp-queries", @@ -43,19 +50,33 @@ export const PACKS_BY_QUERY_LANGUAGE = { [QueryLanguage.Javascript]: ["codeql/javascript-queries"], [QueryLanguage.Python]: ["codeql/python-queries"], [QueryLanguage.Ruby]: ["codeql/ruby-queries"], + [QueryLanguage.Rust]: ["codeql/rust-queries"], }; export const dbSchemeToLanguage: Record = { - "semmlecode.javascript.dbscheme": QueryLanguage.Javascript, + "semmlecode.javascript.dbscheme": QueryLanguage.Javascript, // This can also be QueryLanguage.Actions "semmlecode.cpp.dbscheme": QueryLanguage.Cpp, "semmlecode.dbscheme": QueryLanguage.Java, "semmlecode.python.dbscheme": QueryLanguage.Python, "semmlecode.csharp.dbscheme": QueryLanguage.CSharp, "go.dbscheme": QueryLanguage.Go, "ruby.dbscheme": QueryLanguage.Ruby, + "rust.dbscheme": QueryLanguage.Rust, "swift.dbscheme": QueryLanguage.Swift, }; +export const languageToDbScheme = Object.entries(dbSchemeToLanguage).reduce( + (acc, [k, v]) => { + acc[v] = k; + return acc; + }, + {} as { [k: string]: string }, +); + +// Actions dbscheme is the same as Javascript dbscheme +languageToDbScheme[QueryLanguage.Actions] = + languageToDbScheme[QueryLanguage.Javascript]; + export function isQueryLanguage(language: string): language is QueryLanguage { return Object.values(QueryLanguage).includes(language as QueryLanguage); } diff --git a/extensions/ql-vscode/src/common/raw-result-types.ts b/extensions/ql-vscode/src/common/raw-result-types.ts index 9dbca7fc46f..4b5a03e243d 100644 --- a/extensions/ql-vscode/src/common/raw-result-types.ts +++ b/extensions/ql-vscode/src/common/raw-result-types.ts @@ -5,6 +5,7 @@ export enum ColumnKind { Boolean = "boolean", Date = "date", Entity = "entity", + BigInt = "bigint", } export type Column = { @@ -61,6 +62,11 @@ type CellValueNumber = { value: number; }; +type CellValueBigInt = { + type: "number"; + value: number; +}; + type CellValueString = { type: "string"; value: string; @@ -75,7 +81,8 @@ export type CellValue = | CellValueEntity | CellValueNumber | CellValueString - | CellValueBoolean; + | CellValueBoolean + | CellValueBigInt; export type Row = CellValue[]; diff --git a/extensions/ql-vscode/src/common/readonly.ts b/extensions/ql-vscode/src/common/readonly.ts index 19a4ad963ef..e202bea52bd 100644 --- a/extensions/ql-vscode/src/common/readonly.ts +++ b/extensions/ql-vscode/src/common/readonly.ts @@ -1,14 +1,14 @@ export type DeepReadonly = T extends Array ? DeepReadonlyArray - : // eslint-disable-next-line @typescript-eslint/ban-types + : // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type T extends Function ? T : T extends object ? DeepReadonlyObject : T; -interface DeepReadonlyArray extends ReadonlyArray> {} +type DeepReadonlyArray = ReadonlyArray>; type DeepReadonlyObject = { readonly [P in keyof T]: DeepReadonly; diff --git a/extensions/ql-vscode/src/common/short-paths.ts b/extensions/ql-vscode/src/common/short-paths.ts index 838dac031e1..860544c38d4 100644 --- a/extensions/ql-vscode/src/common/short-paths.ts +++ b/extensions/ql-vscode/src/common/short-paths.ts @@ -1,7 +1,9 @@ -import { platform } from "os"; +import { arch, platform } from "os"; import { basename, dirname, join, normalize, resolve } from "path"; import { lstat, readdir } from "fs/promises"; import type { BaseLogger } from "./logging"; +import type { KoffiFunction } from "koffi"; +import { getErrorMessage } from "./helpers-pure"; /** * Expands a path that potentially contains 8.3 short names (e.g. "C:\PROGRA~1" instead of "C:\Program Files"). @@ -32,7 +34,23 @@ export async function expandShortPaths( return absoluteShortPath; } - return await expandShortPathRecursive(absoluteShortPath, logger); + const longPath = await expandShortPathRecursive(absoluteShortPath, logger); + if (longPath.indexOf("~") < 0) { + return longPath; + } + + void logger.log( + "Short path was not resolved to long path, using native method", + ); + + try { + return await expandShortPathNative(absoluteShortPath, logger); + } catch (e) { + void logger.log( + `Failed to expand short path using native method: ${getErrorMessage(e)}`, + ); + return longPath; + } } /** @@ -74,12 +92,12 @@ async function expandShortPathComponent( } } catch (e) { // Can't read stats for the child, so skip it. - void logger.log(`Error reading stats for child: ${e}`); + void logger.log(`Error reading stats for child: ${getErrorMessage(e)}`); } } } catch (e) { // Can't read the directory, so we won't be able to find this in the directory listing. - void logger.log(`Error reading directory: ${e}`); + void logger.log(`Error reading directory: ${getErrorMessage(e)}`); return shortBase; } @@ -115,3 +133,46 @@ async function expandShortPathRecursive( const longBase = await expandShortPathComponent(dir, shortBase, logger); return join(dir, longBase); } + +let GetLongPathNameW: KoffiFunction | undefined; + +async function expandShortPathNative(shortPath: string, logger: BaseLogger) { + if (platform() !== "win32") { + throw new Error("expandShortPathNative is only supported on Windows"); + } + + if (arch() !== "x64") { + throw new Error( + "expandShortPathNative is only supported on x64 architecture", + ); + } + + if (GetLongPathNameW === undefined) { + // We are using koffi/indirect here to avoid including the native addon for all + // platforms in the bundle since this is only used on Windows. Instead, the + // native addon is included in the Gulpfile. + const koffi = await import("koffi/indirect"); + + const lib = koffi.load("kernel32.dll"); + GetLongPathNameW = lib.func("__stdcall", "GetLongPathNameW", "uint32", [ + "str16", + "str16", + "uint32", + ]); + } + + const MAX_PATH = 32767; + const buffer = Buffer.alloc(MAX_PATH * 2, 0); + + const result = GetLongPathNameW(shortPath, buffer, MAX_PATH); + + if (result === 0) { + throw new Error("Failed to get long path name"); + } + + const longPath = buffer.toString("utf16le", 0, (result - 1) * 2); + + void logger.log(`Expanded short path ${shortPath} to ${longPath}`); + + return longPath; +} diff --git a/extensions/ql-vscode/src/common/unzip.ts b/extensions/ql-vscode/src/common/unzip.ts index 2c8c361f562..9a35eedad38 100644 --- a/extensions/ql-vscode/src/common/unzip.ts +++ b/extensions/ql-vscode/src/common/unzip.ts @@ -5,6 +5,7 @@ import { Transform } from "stream"; import { dirname, join } from "path"; import type { WriteStream } from "fs"; import { createWriteStream, ensureDir } from "fs-extra"; +import { asError } from "./helpers-pure"; // We can't use promisify because it picks up the wrong overload. export function openZip( @@ -47,7 +48,7 @@ export function readZipEntries(zipFile: ZipFile): Promise { }); zipFile.on("error", (err) => { - reject(err); + reject(asError(err)); }); }); } diff --git a/extensions/ql-vscode/src/common/vscode/abstract-webview.ts b/extensions/ql-vscode/src/common/vscode/abstract-webview.ts index c38590e4feb..87c0583af1d 100644 --- a/extensions/ql-vscode/src/common/vscode/abstract-webview.ts +++ b/extensions/ql-vscode/src/common/vscode/abstract-webview.ts @@ -41,6 +41,13 @@ export abstract class AbstractWebview< constructor(protected readonly app: App) {} + public hidePanel() { + if (this.panel !== undefined) { + this.panel.dispose(); + this.panel = undefined; + } + } + public async restoreView(panel: WebviewPanel): Promise { this.panel = panel; const config = await this.getPanelConfig(); diff --git a/extensions/ql-vscode/src/common/vscode/archive-filesystem-provider.ts b/extensions/ql-vscode/src/common/vscode/archive-filesystem-provider.ts index c82225f42f1..1ee61468c36 100644 --- a/extensions/ql-vscode/src/common/vscode/archive-filesystem-provider.ts +++ b/extensions/ql-vscode/src/common/vscode/archive-filesystem-provider.ts @@ -135,7 +135,7 @@ const sourceArchiveUriAuthorityPattern = /^(\d+)-(\d+)$/; class InvalidSourceArchiveUriError extends Error { constructor(uri: Uri) { super( - `Can't decode uri ${uri}: authority should be of the form startIndex-endIndex (where both indices are integers).`, + `Can't decode uri ${uri.toString()}: authority should be of the form startIndex-endIndex (where both indices are integers).`, ); } } diff --git a/extensions/ql-vscode/src/common/vscode/dialog.ts b/extensions/ql-vscode/src/common/vscode/dialog.ts index b6ad555fe0d..f580ea5f340 100644 --- a/extensions/ql-vscode/src/common/vscode/dialog.ts +++ b/extensions/ql-vscode/src/common/vscode/dialog.ts @@ -1,4 +1,4 @@ -import { env, Uri, window } from "vscode"; +import { window } from "vscode"; /** * Opens a modal dialog for the user to make a yes/no choice. @@ -34,50 +34,6 @@ export async function showBinaryChoiceDialog( return chosenItem?.title === yesItem.title; } -/** - * Opens a modal dialog for the user to make a yes/no choice. - * - * @param message The message to show. - * @param modal If true (the default), show a modal dialog box, otherwise dialog is non-modal and can - * be closed even if the user does not make a choice. - * - * @return - * `true` if the user clicks 'Yes', - * `false` if the user clicks 'No' or cancels the dialog, - * `undefined` if the dialog is closed without the user making a choice. - */ -export async function showBinaryChoiceWithUrlDialog( - message: string, - url: string, -): Promise { - const urlItem = { title: "More Information", isCloseAffordance: false }; - const yesItem = { title: "Yes", isCloseAffordance: false }; - const noItem = { title: "No", isCloseAffordance: true }; - let chosenItem; - - // Keep the dialog open as long as the user is clicking the 'more information' option. - // To prevent an infinite loop, if the user clicks 'more information' 5 times, close the dialog and return cancelled - let count = 0; - do { - chosenItem = await window.showInformationMessage( - message, - { modal: true }, - urlItem, - yesItem, - noItem, - ); - if (chosenItem === urlItem) { - await env.openExternal(Uri.parse(url, true)); - } - count++; - } while (chosenItem === urlItem && count < 5); - - if (!chosenItem || chosenItem.title === urlItem.title) { - return undefined; - } - return chosenItem.title === yesItem.title; -} - /** * Show an information message with a customisable action. * @param message The message to show. diff --git a/extensions/ql-vscode/src/common/vscode/progress.ts b/extensions/ql-vscode/src/common/vscode/progress.ts index 7d944cc4b89..baf3b2c4f28 100644 --- a/extensions/ql-vscode/src/common/vscode/progress.ts +++ b/extensions/ql-vscode/src/common/vscode/progress.ts @@ -97,17 +97,15 @@ export function withProgress( * Displays a progress monitor that indicates how much progess has been made * reading from a stream. * - * @param readable The stream to read progress from * @param messagePrefix A prefix for displaying the message * @param totalNumBytes Total number of bytes in this stream * @param progress The progress callback used to set messages */ export function reportStreamProgress( - readable: NodeJS.ReadableStream, messagePrefix: string, totalNumBytes?: number, progress?: ProgressCallback, -) { +): (bytesRead: number) => void { if (progress && totalNumBytes) { let numBytesDownloaded = 0; const updateProgress = () => { @@ -123,10 +121,10 @@ export function reportStreamProgress( // Display the progress straight away rather than waiting for the first chunk. updateProgress(); - readable.on("data", (data) => { - numBytesDownloaded += data.length; + return (bytesRead: number) => { + numBytesDownloaded += bytesRead; updateProgress(); - }); + }; } else if (progress) { progress({ step: 1, @@ -134,4 +132,6 @@ export function reportStreamProgress( message: `${messagePrefix} (Size unknown)`, }); } + + return () => {}; } diff --git a/extensions/ql-vscode/src/common/vscode/selection-commands.ts b/extensions/ql-vscode/src/common/vscode/selection-commands.ts index 93db99584a1..bfe107ff0a3 100644 --- a/extensions/ql-vscode/src/common/vscode/selection-commands.ts +++ b/extensions/ql-vscode/src/common/vscode/selection-commands.ts @@ -18,7 +18,7 @@ type SelectionCommand = CreateSupertypeOf< TreeViewContextMultiSelectionCommandFunction & TreeViewContextSingleSelectionCommandFunction & ExplorerSelectionCommandFunction, - (singleItem: T, multiSelect?: T[] | undefined) => Promise + (singleItem: T, multiSelect?: T[]) => Promise >; export function createSingleSelectionCommand( diff --git a/extensions/ql-vscode/src/common/vscode/telemetry.ts b/extensions/ql-vscode/src/common/vscode/telemetry.ts index 451eff486a2..d8c6f54c6c8 100644 --- a/extensions/ql-vscode/src/common/vscode/telemetry.ts +++ b/extensions/ql-vscode/src/common/vscode/telemetry.ts @@ -1,26 +1,15 @@ -import type { - Extension, - ExtensionContext, - ConfigurationChangeEvent, -} from "vscode"; -import { ConfigurationTarget, env } from "vscode"; +import type { Extension, ExtensionContext } from "vscode"; +import { ConfigurationTarget, env, Uri, window } from "vscode"; import TelemetryReporter from "vscode-extension-telemetry"; -import { - ConfigListener, - CANARY_FEATURES, - ENABLE_TELEMETRY, - LOG_TELEMETRY, - isIntegrationTestMode, - isCanary, -} from "../../config"; +import { ENABLE_TELEMETRY, isCanary, LOG_TELEMETRY } from "../../config"; import type { TelemetryClient } from "applicationinsights"; import { extLogger } from "../logging/vscode"; import { UserCancellationException } from "./progress"; -import { showBinaryChoiceWithUrlDialog } from "./dialog"; import type { RedactableError } from "../errors"; import type { SemVer } from "semver"; import type { AppTelemetry } from "../telemetry"; import type { EnvelopeTelemetry } from "applicationinsights/out/Declarations/Contracts"; +import type { Disposable } from "../disposable-object"; // Key is injected at build time through the APP_INSIGHTS_KEY environment variable. const key = "REPLACE-APP-INSIGHTS-KEY"; @@ -55,80 +44,25 @@ const baseDataPropertiesToRemove = [ const NOT_SET_CLI_VERSION = "not-set"; -export class ExtensionTelemetryListener - extends ConfigListener - implements AppTelemetry -{ - private reporter?: TelemetryReporter; +export class ExtensionTelemetryListener implements AppTelemetry, Disposable { + private readonly reporter: TelemetryReporter; private cliVersionStr = NOT_SET_CLI_VERSION; - constructor( - private readonly id: string, - private readonly version: string, - private readonly key: string, - private readonly ctx: ExtensionContext, - ) { - super(); - - env.onDidChangeTelemetryEnabled(async () => { - await this.initialize(); - }); - } - - /** - * This function handles changes to relevant configuration elements. There are 2 configuration - * ids that this function cares about: - * - * * `codeQL.telemetry.enableTelemetry`: If this one has changed, then we need to re-initialize - * the reporter and the reporter may wind up being removed. - * * `codeQL.canary`: A change here could possibly re-trigger a dialog popup. - * - * Note that the global telemetry setting also gate-keeps whether or not to send telemetry events - * to Application Insights. However, this gatekeeping happens inside of the vscode-extension-telemetry - * package. So, this does not need to be handled here. - * - * @param e the configuration change event - */ - async handleDidChangeConfiguration( - e: ConfigurationChangeEvent, - ): Promise { - if (e.affectsConfiguration(ENABLE_TELEMETRY.qualifiedName)) { - await this.initialize(); - } - - // Re-request telemetry so that users can see the dialog again. - // Re-request if codeQL.canary is being set to `true` and telemetry - // is not currently enabled. - if ( - e.affectsConfiguration(CANARY_FEATURES.qualifiedName) && - CANARY_FEATURES.getValue() && - !ENABLE_TELEMETRY.getValue() - ) { - await this.setTelemetryRequested(false); - await this.requestTelemetryPermission(); - } - } - - async initialize() { - await this.requestTelemetryPermission(); - - this.disposeReporter(); - - if (ENABLE_TELEMETRY.getValue()) { - this.createReporter(); - } - } - - private createReporter() { + constructor(id: string, version: string, key: string) { + // We can always initialize this and send events using it because the vscode-extension-telemetry will check + // whether the `telemetry.telemetryLevel` setting is enabled. this.reporter = new TelemetryReporter( - this.id, - this.version, - this.key, + id, + version, + key, /* anonymize stack traces */ true, ); - this.push(this.reporter); + this.addTelemetryProcessor(); + } + + private addTelemetryProcessor() { // The appInsightsClient field is private but we want to access it anyway const client = this.reporter["appInsightsClient"] as TelemetryClient; if (client) { @@ -151,14 +85,10 @@ export class ExtensionTelemetryListener } dispose() { - super.dispose(); - void this.reporter?.dispose(); + void this.reporter.dispose(); } sendCommandUsage(name: string, executionTime: number, error?: Error): void { - if (!this.reporter) { - return; - } const status = !error ? CommandCompletion.Success : error instanceof UserCancellationException @@ -178,10 +108,6 @@ export class ExtensionTelemetryListener } sendUIInteraction(name: string): void { - if (!this.reporter) { - return; - } - this.reporter.sendTelemetryEvent( "ui-interaction", { @@ -197,10 +123,6 @@ export class ExtensionTelemetryListener error: RedactableError, extraProperties?: { [key: string]: string }, ): void { - if (!this.reporter) { - return; - } - const properties: { [key: string]: string } = { isCanary: isCanary().toString(), cliVersion: this.cliVersionStr, @@ -215,10 +137,6 @@ export class ExtensionTelemetryListener } sendConfigInformation(config: Record): void { - if (!this.reporter) { - return; - } - this.reporter.sendTelemetryEvent( "config", { @@ -230,37 +148,6 @@ export class ExtensionTelemetryListener ); } - /** - * Displays a popup asking the user if they want to enable telemetry - * for this extension. - */ - async requestTelemetryPermission() { - if (!this.wasTelemetryRequested()) { - // if global telemetry is disabled, avoid showing the dialog or making any changes - let result = undefined; - if ( - env.isTelemetryEnabled && - // Avoid showing the dialog if we are in integration test mode. - !isIntegrationTestMode() - ) { - // Extension won't start until this completes. - result = await showBinaryChoiceWithUrlDialog( - "Does the CodeQL Extension by GitHub have your permission to collect usage data and metrics to help us improve CodeQL for VSCode?", - "https://codeql.github.com/docs/codeql-for-visual-studio-code/about-telemetry-in-codeql-for-visual-studio-code", - ); - } - if (result !== undefined) { - await Promise.all([ - this.setTelemetryRequested(true), - ENABLE_TELEMETRY.updateValue( - result, - ConfigurationTarget.Global, - ), - ]); - } - } - } - /** * Exposed for testing */ @@ -271,21 +158,45 @@ export class ExtensionTelemetryListener set cliVersion(version: SemVer | undefined) { this.cliVersionStr = version ? version.toString() : NOT_SET_CLI_VERSION; } +} - private disposeReporter() { - if (this.reporter) { - void this.reporter.dispose(); - this.reporter = undefined; +async function notifyTelemetryChange() { + const continueItem = { title: "Continue", isCloseAffordance: false }; + const vsCodeTelemetryItem = { + title: "More Information about VS Code Telemetry", + isCloseAffordance: false, + }; + const codeqlTelemetryItem = { + title: "More Information about CodeQL Telemetry", + isCloseAffordance: false, + }; + let chosenItem; + + do { + chosenItem = await window.showInformationMessage( + "The CodeQL extension now follows VS Code's telemetry settings. VS Code telemetry is currently enabled. Learn how to update your telemetry settings by clicking the links below.", + { modal: true }, + continueItem, + vsCodeTelemetryItem, + codeqlTelemetryItem, + ); + if (chosenItem === vsCodeTelemetryItem) { + await env.openExternal( + Uri.parse( + "https://code.visualstudio.com/docs/getstarted/telemetry", + true, + ), + ); } - } - - private wasTelemetryRequested(): boolean { - return !!this.ctx.globalState.get("telemetry-request-viewed"); - } - - private async setTelemetryRequested(newValue: boolean): Promise { - await this.ctx.globalState.update("telemetry-request-viewed", newValue); - } + if (chosenItem === codeqlTelemetryItem) { + await env.openExternal( + Uri.parse( + "https://docs.github.com/en/code-security/codeql-for-vs-code/using-the-advanced-functionality-of-the-codeql-for-vs-code-extension/telemetry-in-codeql-for-visual-studio-code", + true, + ), + ); + } + } while (chosenItem !== continueItem); } /** @@ -301,15 +212,28 @@ export async function initializeTelemetry( if (telemetryListener !== undefined) { throw new Error("Telemetry is already initialized"); } + + if (ENABLE_TELEMETRY.getValue() === false) { + if (env.isTelemetryEnabled) { + // Await this so that the user is notified before any telemetry is sent + await notifyTelemetryChange(); + } + + // Remove the deprecated telemetry setting + ENABLE_TELEMETRY.updateValue(undefined, ConfigurationTarget.Global); + ENABLE_TELEMETRY.updateValue(undefined, ConfigurationTarget.Workspace); + ENABLE_TELEMETRY.updateValue( + undefined, + ConfigurationTarget.WorkspaceFolder, + ); + } + telemetryListener = new ExtensionTelemetryListener( extension.id, extension.packageJSON.version, key, - ctx, ); - // do not await initialization, since doing so will sometimes cause a modal popup. - // this is a particular problem during integration tests, which will hang if a modal popup is displayed. - void telemetryListener.initialize(); ctx.subscriptions.push(telemetryListener); + return telemetryListener; } diff --git a/extensions/ql-vscode/src/common/vscode/webview-html.ts b/extensions/ql-vscode/src/common/vscode/webview-html.ts index 7ad1f5d08e4..e1eac40024c 100644 --- a/extensions/ql-vscode/src/common/vscode/webview-html.ts +++ b/extensions/ql-vscode/src/common/vscode/webview-html.ts @@ -7,6 +7,7 @@ import type { App } from "../app"; export type WebviewKind = | "results" | "compare" + | "compare-performance" | "variant-analysis" | "data-flow-paths" | "model-editor" @@ -88,7 +89,7 @@ export function getHtmlForWebview(
- `; @@ -100,9 +101,9 @@ function getNonce(): string { } function createStylesLinkWithNonce(nonce: string, uri: Uri): string { - return ``; + return ``; } function createStylesLinkWithoutNonce(uri: Uri): string { - return ``; + return ``; } diff --git a/extensions/ql-vscode/src/common/zlib.ts b/extensions/ql-vscode/src/common/zlib.ts index 4f9f9b00bf0..deb0ecf6518 100644 --- a/extensions/ql-vscode/src/common/zlib.ts +++ b/extensions/ql-vscode/src/common/zlib.ts @@ -1,10 +1,5 @@ import { promisify } from "util"; -import { gzip, gunzip } from "zlib"; - -/** - * Promisified version of zlib.gzip - */ -export const gzipEncode = promisify(gzip); +import { gunzip } from "zlib"; /** * Promisified version of zlib.gunzip diff --git a/extensions/ql-vscode/src/compare-performance/compare-performance-view.ts b/extensions/ql-vscode/src/compare-performance/compare-performance-view.ts new file mode 100644 index 00000000000..a59367ea135 --- /dev/null +++ b/extensions/ql-vscode/src/compare-performance/compare-performance-view.ts @@ -0,0 +1,121 @@ +import { statSync } from "fs"; +import { ViewColumn } from "vscode"; + +import type { App } from "../common/app"; +import { redactableError } from "../common/errors"; +import type { + FromComparePerformanceViewMessage, + ToComparePerformanceViewMessage, +} from "../common/interface-types"; +import type { Logger } from "../common/logging"; +import { showAndLogExceptionWithTelemetry } from "../common/logging"; +import { extLogger } from "../common/logging/vscode"; +import type { WebviewPanelConfig } from "../common/vscode/abstract-webview"; +import { AbstractWebview } from "../common/vscode/abstract-webview"; +import { withProgress } from "../common/vscode/progress"; +import { telemetryListener } from "../common/vscode/telemetry"; +import type { HistoryItemLabelProvider } from "../query-history/history-item-label-provider"; +import { PerformanceOverviewScanner } from "../log-insights/performance-comparison"; +import type { ResultsView } from "../local-queries"; +import { readJsonlFile } from "../common/jsonl-reader"; +import type { SummaryEvent } from "../log-insights/log-summary"; + +export class ComparePerformanceView extends AbstractWebview< + ToComparePerformanceViewMessage, + FromComparePerformanceViewMessage +> { + constructor( + app: App, + public logger: Logger, + public labelProvider: HistoryItemLabelProvider, + private resultsView: ResultsView, + ) { + super(app); + } + + async showResults(fromJsonLog: string, toJsonLog: string) { + const panel = await this.getPanel(); + panel.reveal(undefined, false); + + // Close the results viewer as it will have opened when the user clicked the query in the history view + // (which they must do as part of the UI interaction for opening the performance view). + // The performance view generally needs a lot of width so it's annoying to have the result viewer open. + this.resultsView.hidePanel(); + + await this.waitForPanelLoaded(); + + function scanLogWithProgress(log: string, logDescription: string) { + const bytes = statSync(log).size; + return withProgress( + async (progress) => { + progress?.({ + // all scans have step 1 - the backing progress tracker allows increments instead of + // steps - but for now we are happy with a tiny UI that says what is happening + message: `Scanning ...`, + step: 1, + maxStep: 2, + }); + const scanner = new PerformanceOverviewScanner(); + await readJsonlFile(log, async (obj) => { + scanner.onEvent(obj); + }); + return scanner; + }, + + { + title: `Scanning evaluator log ${logDescription} (${(bytes / 1024 / 1024).toFixed(1)} MB)`, + }, + ); + } + + const [fromPerf, toPerf] = await Promise.all([ + fromJsonLog === "" + ? new PerformanceOverviewScanner() + : scanLogWithProgress(fromJsonLog, "1/2"), + scanLogWithProgress(toJsonLog, fromJsonLog === "" ? "1/1" : "2/2"), + ]); + + await this.postMessage({ + t: "setPerformanceComparison", + from: fromPerf.getData(), + to: toPerf.getData(), + comparison: fromJsonLog !== "", + }); + } + + protected getPanelConfig(): WebviewPanelConfig { + return { + viewId: "comparePerformanceView", + title: "Compare CodeQL Performance", + viewColumn: ViewColumn.Active, + preserveFocus: true, + view: "compare-performance", + }; + } + + protected onPanelDispose(): void {} + + protected async onMessage( + msg: FromComparePerformanceViewMessage, + ): Promise { + switch (msg.t) { + case "viewLoaded": + this.onWebViewLoaded(); + break; + + case "telemetry": + telemetryListener?.sendUIInteraction(msg.action); + break; + + case "unhandledError": + void showAndLogExceptionWithTelemetry( + extLogger, + telemetryListener, + redactableError( + msg.error, + )`Unhandled error in performance comparison view: ${msg.error.message}`, + ); + break; + } + } +} diff --git a/extensions/ql-vscode/src/compare/compare-view.ts b/extensions/ql-vscode/src/compare/compare-view.ts index 8b762e29882..93538f52e6b 100644 --- a/extensions/ql-vscode/src/compare/compare-view.ts +++ b/extensions/ql-vscode/src/compare/compare-view.ts @@ -34,6 +34,7 @@ import { } from "./result-set-names"; import { compareInterpretedResults } from "./interpreted-results"; import { isCanary } from "../config"; +import { nanoid } from "nanoid"; interface ComparePair { from: CompletedLocalQueryInfo; @@ -69,22 +70,20 @@ export class CompareView extends AbstractWebview< selectedResultSetName?: string, ) { const [fromSchemas, toSchemas] = await Promise.all([ - this.cliServer.bqrsInfo( - from.completedQuery.query.resultsPaths.resultsPath, - ), - this.cliServer.bqrsInfo(to.completedQuery.query.resultsPaths.resultsPath), + this.cliServer.bqrsInfo(from.completedQuery.query.resultsPath), + this.cliServer.bqrsInfo(to.completedQuery.query.resultsPath), ]); const [fromSchemaNames, toSchemaNames] = await Promise.all([ getResultSetNames( fromSchemas, from.completedQuery.query.metadata, - from.completedQuery.query.resultsPaths.interpretedResultsPath, + from.completedQuery.query.interpretedResultsPath, ), getResultSetNames( toSchemas, to.completedQuery.query.metadata, - to.completedQuery.query.resultsPaths.interpretedResultsPath, + to.completedQuery.query.interpretedResultsPath, ), ]); @@ -100,15 +99,14 @@ export class CompareView extends AbstractWebview< schemaNames: fromSchemaNames, metadata: from.completedQuery.query.metadata, interpretedResultsPath: - from.completedQuery.query.resultsPaths.interpretedResultsPath, + from.completedQuery.query.interpretedResultsPath, }, to, toInfo: { schemas: toSchemas, schemaNames: toSchemaNames, metadata: to.completedQuery.query.metadata, - interpretedResultsPath: - to.completedQuery.query.resultsPaths.interpretedResultsPath, + interpretedResultsPath: to.completedQuery.query.interpretedResultsPath, }, commonResultSetNames, }; @@ -183,13 +181,97 @@ export class CompareView extends AbstractWebview< message = getErrorMessage(e); } + await this.streamResults(result, currentResultSetDisplayName, message); + } + } + + private async streamResults( + result: QueryCompareResult | undefined, + currentResultSetName: string, + message: string | undefined, + ) { + // Since there is a string limit of 1GB in Node.js, the comparison is send as a JSON.stringified string to the webview + // and some comparisons may be larger than that, we sometimes need to stream results. This uses a heuristic of 2,000 results + // to determine if we should stream results. + + if (!this.shouldStreamResults(result)) { await this.postMessage({ t: "setComparisons", result, - currentResultSetName: currentResultSetDisplayName, + currentResultSetName, message, }); + return; } + + const id = nanoid(); + + // Streaming itself is implemented like this: + // - 1 setup message which contains the first 1,000 results + // - n "add results" messages which contain 1,000 results each + // - 1 complete message which just tells the webview that we're done + + await this.postMessage({ + t: "streamingComparisonSetup", + id, + result: this.chunkResults(result, 0, 1000), + currentResultSetName, + message, + }); + + const { from, to } = result; + + const maxResults = Math.max(from.length, to.length); + for (let i = 1000; i < maxResults; i += 1000) { + const chunk = this.chunkResults(result, i, i + 1000); + + await this.postMessage({ + t: "streamingComparisonAddResults", + id, + result: chunk, + }); + } + + await this.postMessage({ + t: "streamingComparisonComplete", + id, + }); + } + + private shouldStreamResults( + result: QueryCompareResult | undefined, + ): result is QueryCompareResult { + if (result === undefined) { + return false; + } + + // We probably won't run into limits if we have less than 2,000 total results + const totalResults = result.from.length + result.to.length; + return totalResults > 2000; + } + + private chunkResults( + result: QueryCompareResult, + start: number, + end: number, + ): QueryCompareResult { + if (result.kind === "raw") { + return { + ...result, + from: result.from.slice(start, end), + to: result.to.slice(start, end), + }; + } + + if (result.kind === "interpreted") { + return { + ...result, + from: result.from.slice(start, end), + to: result.to.slice(start, end), + }; + } + + assertNever(result); } protected getPanelConfig(): WebviewPanelConfig { @@ -307,12 +389,12 @@ export class CompareView extends AbstractWebview< this.getResultSet( fromInfo.schemas, fromResultSetName, - from.completedQuery.query.resultsPaths.resultsPath, + from.completedQuery.query.resultsPath, ), this.getResultSet( toInfo.schemas, toResultSetName, - to.completedQuery.query.resultsPaths.resultsPath, + to.completedQuery.query.resultsPath, ), ]); diff --git a/extensions/ql-vscode/src/compare/interpreted-results.ts b/extensions/ql-vscode/src/compare/interpreted-results.ts index d5ca255ca4d..f98913a15e8 100644 --- a/extensions/ql-vscode/src/compare/interpreted-results.ts +++ b/extensions/ql-vscode/src/compare/interpreted-results.ts @@ -36,11 +36,9 @@ export async function compareInterpretedResults( const [fromResultSet, toResultSet, sourceLocationPrefix] = await Promise.all([ getInterpretedResults( - fromQuery.completedQuery.query.resultsPaths.interpretedResultsPath, - ), - getInterpretedResults( - toQuery.completedQuery.query.resultsPaths.interpretedResultsPath, + fromQuery.completedQuery.query.interpretedResultsPath, ), + getInterpretedResults(toQuery.completedQuery.query.interpretedResultsPath), database.getSourceLocationPrefix(cliServer), ]); diff --git a/extensions/ql-vscode/src/compare/sarif-diff.ts b/extensions/ql-vscode/src/compare/sarif-diff.ts index 67e8e2ed976..158c63ae487 100644 --- a/extensions/ql-vscode/src/compare/sarif-diff.ts +++ b/extensions/ql-vscode/src/compare/sarif-diff.ts @@ -1,4 +1,4 @@ -import type { Location, Result } from "sarif"; +import type { Location, Result, ThreadFlowLocation } from "sarif"; function toCanonicalLocation(location: Location): Location { if (location.physicalLocation?.artifactLocation?.index !== undefined) { @@ -25,6 +25,19 @@ function toCanonicalLocation(location: Location): Location { return location; } +function toCanonicalThreadFlowLocation( + threadFlowLocation: ThreadFlowLocation, +): ThreadFlowLocation { + if (threadFlowLocation.location) { + return { + ...threadFlowLocation, + location: toCanonicalLocation(threadFlowLocation.location), + }; + } + + return threadFlowLocation; +} + function toCanonicalResult(result: Result): Result { const canonicalResult = { ...result, @@ -40,37 +53,30 @@ function toCanonicalResult(result: Result): Result { canonicalResult.relatedLocations.map(toCanonicalLocation); } - if (canonicalResult.codeFlows) { - canonicalResult.codeFlows = canonicalResult.codeFlows.map((codeFlow) => { - if (codeFlow.threadFlows) { - return { - ...codeFlow, - threadFlows: codeFlow.threadFlows.map((threadFlow) => { - if (threadFlow.locations) { - return { - ...threadFlow, - locations: threadFlow.locations.map((threadFlowLocation) => { - if (threadFlowLocation.location) { - return { - ...threadFlowLocation, - location: toCanonicalLocation( - threadFlowLocation.location, - ), - }; - } - - return threadFlowLocation; - }), - }; - } - - return threadFlow; - }), - }; - } - - return codeFlow; - }); + if (canonicalResult.codeFlows && canonicalResult.codeFlows.length > 0) { + // If there are codeFlows, we don't want to compare the full codeFlows. Instead, we just want to compare the + // source and the sink (i.e. the first and last item). CodeQL should guarantee that the first and last threadFlow + // of every codeFlow is the same (i.e. every codeFlow has the same source and sink). Therefore, we just compare the + // first codeFlow and ignore the other codeFlows completely. + // If the codeFlow has a length of 1, this doesn't change the result. + + const source = { + ...canonicalResult.codeFlows[0].threadFlows[0], + }; + const sink = { + ...canonicalResult.codeFlows[0].threadFlows[ + canonicalResult.codeFlows[0].threadFlows.length - 1 + ], + }; + source.locations = source.locations.map(toCanonicalThreadFlowLocation); + sink.locations = sink.locations.map(toCanonicalThreadFlowLocation); + + canonicalResult.codeFlows = [ + { + ...canonicalResult.codeFlows[0], + threadFlows: [source, sink], + }, + ]; } return canonicalResult; @@ -79,11 +85,9 @@ function toCanonicalResult(result: Result): Result { /** * Compare the alerts of two queries. Use deep equality to determine if * results have been added or removed across two invocations of a query. - * - * Assumptions: - * - * 1. Queries have the same sort order - * 2. Results are not changed or re-ordered, they are only added or removed + * It first canonicalizes the results to ensure that when small changes + * to the query are made, the results are still considered the same. This + * includes the removal of all paths except for the source and sink. * * @param fromResults the source query * @param toResults the target query @@ -104,19 +108,30 @@ export function sarifDiff(fromResults: Result[], toResults: Result[]) { const canonicalFromResults = fromResults.map(toCanonicalResult); const canonicalToResults = toResults.map(toCanonicalResult); - const results = { + const diffResults = { from: arrayDiff(canonicalFromResults, canonicalToResults), to: arrayDiff(canonicalToResults, canonicalFromResults), }; if ( - fromResults.length === results.from.length && - toResults.length === results.to.length + fromResults.length === diffResults.from.length && + toResults.length === diffResults.to.length ) { throw new Error("CodeQL Compare: No overlap between the selected queries."); } - return results; + // We don't want to return the canonical results, we want to return the original results. + // We can retrieve this by finding the index of the canonical result in the canonical results + // and then using that index to find the original result. This is possible because we know that + // we did a 1-to-1 map between the canonical results and the original results. + return { + from: diffResults.from.map( + (result) => fromResults[canonicalFromResults.indexOf(result)], + ), + to: diffResults.to.map( + (result) => toResults[canonicalToResults.indexOf(result)], + ), + }; } function arrayDiff(source: readonly T[], toRemove: readonly T[]): T[] { diff --git a/extensions/ql-vscode/src/config.ts b/extensions/ql-vscode/src/config.ts index 377199da766..7e24fe26c5c 100644 --- a/extensions/ql-vscode/src/config.ts +++ b/extensions/ql-vscode/src/config.ts @@ -165,6 +165,8 @@ const ROOT_SETTING = new Setting("codeQL"); const TELEMETRY_SETTING = new Setting("telemetry", ROOT_SETTING); export const LOG_TELEMETRY = new Setting("logTelemetry", TELEMETRY_SETTING); + +// Legacy setting that is no longer used, but is used for showing a message when the user upgrades. export const ENABLE_TELEMETRY = new Setting( "enableTelemetry", TELEMETRY_SETTING, @@ -404,7 +406,7 @@ export class QueryServerConfigListener ): Promise { const codeQlPath = await distributionManager.getCodeQlPathWithoutVersionCheck(); - const config = new QueryServerConfigListener(codeQlPath!); + const config = new QueryServerConfigListener(codeQlPath); if (distributionManager.onDidChangeDistribution) { config.push( distributionManager.onDidChangeDistribution(async () => { @@ -828,15 +830,6 @@ export async function setAutogenerateQlPacks(choice: AutogenerateQLPacks) { const MODEL_SETTING = new Setting("model", ROOT_SETTING); const FLOW_GENERATION = new Setting("flowGeneration", MODEL_SETTING); -const LLM_GENERATION = new Setting("llmGeneration", MODEL_SETTING); -const LLM_GENERATION_BATCH_SIZE = new Setting( - "llmGenerationBatchSize", - MODEL_SETTING, -); -const LLM_GENERATION_DEV_ENDPOINT = new Setting( - "llmGenerationDevEndpoint", - MODEL_SETTING, -); const MODEL_EVALUATION = new Setting("evaluation", MODEL_SETTING); const MODEL_PACK_LOCATION = new Setting("packLocation", MODEL_SETTING); const MODEL_PACK_NAME = new Setting("packName", MODEL_SETTING); @@ -850,7 +843,6 @@ export type ModelConfigPackVariables = { export interface ModelConfig { flowGeneration: boolean; - llmGeneration: boolean; getPackLocation( languageId: string, variables: ModelConfigPackVariables, @@ -870,26 +862,6 @@ export class ModelConfigListener extends ConfigListener implements ModelConfig { return !!FLOW_GENERATION.getValue(); } - public get llmGeneration(): boolean { - return !!LLM_GENERATION.getValue() && !hasEnterpriseUri(); - } - - /** - * Limits the number of candidates we send to the model in each request to avoid long requests. - * Note that the model may return fewer than this number of candidates. - */ - public get llmGenerationBatchSize(): number { - return LLM_GENERATION_BATCH_SIZE.getValue() || 5; - } - - /** - * The URL of the endpoint to use for LLM generation. This should only be set - * if you want to test against a dev server. - */ - public get llmGenerationDevEndpoint(): string | undefined { - return LLM_GENERATION_DEV_ENDPOINT.getValue(); - } - public get modelEvaluation(): boolean { return !!MODEL_EVALUATION.getValue(); } @@ -982,3 +954,17 @@ export class GitHubDatabaseConfigListener await GITHUB_DATABASE_UPDATE.updateValue(value, target); } } + +const AUTOFIX_SETTING = new Setting("autofix", ROOT_SETTING); + +export const AUTOFIX_PATH = new Setting("path", AUTOFIX_SETTING); + +export function getAutofixPath(): string | undefined { + return AUTOFIX_PATH.getValue() || undefined; +} + +export const AUTOFIX_MODEL = new Setting("model", AUTOFIX_SETTING); + +export function getAutofixModel(): string | undefined { + return AUTOFIX_MODEL.getValue() || undefined; +} diff --git a/extensions/ql-vscode/src/databases/config/db-config-store.ts b/extensions/ql-vscode/src/databases/config/db-config-store.ts index 9d69567da94..b08406c9764 100644 --- a/extensions/ql-vscode/src/databases/config/db-config-store.ts +++ b/extensions/ql-vscode/src/databases/config/db-config-store.ts @@ -298,7 +298,7 @@ export class DbConfigStore extends DisposableObject { let newConfig: DbConfig | undefined = undefined; try { newConfig = await readJSON(this.configPath); - } catch (e) { + } catch { this.configErrors = [ { kind: DbConfigValidationErrorKind.InvalidJson, @@ -332,7 +332,7 @@ export class DbConfigStore extends DisposableObject { let newConfig: DbConfig | undefined = undefined; try { newConfig = readJSONSync(this.configPath); - } catch (e) { + } catch { this.configErrors = [ { kind: DbConfigValidationErrorKind.InvalidJson, diff --git a/extensions/ql-vscode/src/databases/database-fetcher.ts b/extensions/ql-vscode/src/databases/database-fetcher.ts index 9e3c7321304..6f7f1356648 100644 --- a/extensions/ql-vscode/src/databases/database-fetcher.ts +++ b/extensions/ql-vscode/src/databases/database-fetcher.ts @@ -1,5 +1,3 @@ -import type { Response } from "node-fetch"; -import fetch, { AbortError } from "node-fetch"; import type { InputBoxOptions } from "vscode"; import { Uri, window } from "vscode"; import type { CodeQLCliServer } from "../codeql-cli/cli"; @@ -30,11 +28,8 @@ import { allowHttp, downloadTimeout, getGitHubInstanceUrl, - hasGhecDrUri, - isCanary, } from "../config"; import { showAndLogInformationMessage } from "../common/logging"; -import { AppOctokit } from "../common/octokit"; import type { DatabaseOrigin } from "./local-databases/database-origin"; import { createTimeoutSignal } from "../common/fetch-stream"; import type { App } from "../common/app"; @@ -189,12 +184,7 @@ export class DatabaseFetcher { throw new Error(`Invalid GitHub repository: ${githubRepo}`); } - const credentials = - isCanary() || hasGhecDrUri() ? this.app.credentials : undefined; - - const octokit = credentials - ? await credentials.getOctokit() - : new AppOctokit(); + const octokit = await this.app.credentials.getOctokit(); const result = await convertGithubNwoToDatabaseUrl( nwo, @@ -454,7 +444,7 @@ export class DatabaseFetcher { let uri; try { uri = Uri.parse(databaseUrl, true); - } catch (e) { + } catch { throw new Error(`Invalid url: ${databaseUrl}`); } @@ -536,8 +526,8 @@ export class DatabaseFetcher { } catch (e) { disposeTimeout(); - if (e instanceof AbortError) { - const thrownError = new AbortError("The request timed out."); + if (e instanceof DOMException && e.name === "AbortError") { + const thrownError = new Error("The request timed out."); thrownError.stack = e.stack; throw thrownError; } @@ -545,30 +535,52 @@ export class DatabaseFetcher { throw e; } + const body = response.body; + if (!body) { + throw new Error("No response body found"); + } + const archiveFileStream = createWriteStream(archivePath); const contentLength = response.headers.get("content-length"); const totalNumBytes = contentLength ? parseInt(contentLength, 10) : undefined; - reportStreamProgress( - response.body, + + const reportProgress = reportStreamProgress( "Downloading database", totalNumBytes, progress, ); - response.body.on("data", onData); - try { - await new Promise((resolve, reject) => { - response.body - .pipe(archiveFileStream) - .on("finish", resolve) - .on("error", reject); + const reader = body.getReader(); + for (;;) { + const { done, value } = await reader.read(); + if (done) { + break; + } + + onData(); + reportProgress(value?.length ?? 0); + + await new Promise((resolve, reject) => { + archiveFileStream.write(value, (err) => { + if (err) { + reject(err); + } + resolve(undefined); + }); + }); + } - // If an error occurs on the body, we also want to reject the promise (e.g. during a timeout error). - response.body.on("error", reject); + await new Promise((resolve, reject) => { + archiveFileStream.close((err) => { + if (err) { + reject(err); + } + resolve(undefined); + }); }); } catch (e) { // Close and remove the file if an error occurs @@ -576,8 +588,8 @@ export class DatabaseFetcher { void remove(archivePath); }); - if (e instanceof AbortError) { - const thrownError = new AbortError("The download timed out."); + if (e instanceof DOMException && e.name === "AbortError") { + const thrownError = new Error("The download timed out."); thrownError.stack = e.stack; throw thrownError; } @@ -600,7 +612,7 @@ export class DatabaseFetcher { private async checkForFailingResponse( response: Response, errorMessage: string, - ): Promise { + ): Promise { if (response.ok) { return response; } @@ -612,7 +624,7 @@ export class DatabaseFetcher { const obj = JSON.parse(text); msg = obj.error || obj.message || obj.reason || JSON.stringify(obj, null, 2); - } catch (e) { + } catch { msg = text; } throw new Error(`${errorMessage}.\n\nReason: ${msg}`); diff --git a/extensions/ql-vscode/src/databases/local-databases-ui.ts b/extensions/ql-vscode/src/databases/local-databases-ui.ts index 8a12983951c..823093bfe49 100644 --- a/extensions/ql-vscode/src/databases/local-databases-ui.ts +++ b/extensions/ql-vscode/src/databases/local-databases-ui.ts @@ -16,6 +16,7 @@ import { ThemeIcon, ThemeColor, workspace, + FileType, } from "vscode"; import { pathExists, stat, readdir, remove } from "fs-extra"; @@ -36,6 +37,7 @@ import { import { showAndLogExceptionWithTelemetry, showAndLogErrorMessage, + showAndLogInformationMessage, } from "../common/logging"; import type { DatabaseFetcher } from "./database-fetcher"; import { asError, asyncFilter, getErrorMessage } from "../common/helpers-pure"; @@ -267,6 +269,8 @@ export class DatabaseUI extends DisposableObject { "codeQL.getCurrentDatabase": this.handleGetCurrentDatabase.bind(this), "codeQL.chooseDatabaseFolder": this.handleChooseDatabaseFolderFromPalette.bind(this), + "codeQL.chooseDatabaseFoldersParent": + this.handleChooseDatabaseFoldersParentFromPalette.bind(this), "codeQL.chooseDatabaseArchive": this.handleChooseDatabaseArchiveFromPalette.bind(this), "codeQL.chooseDatabaseInternet": @@ -280,6 +284,7 @@ export class DatabaseUI extends DisposableObject { this.handleUpgradeCurrentDatabase.bind(this), "codeQL.clearCache": this.handleClearCache.bind(this), "codeQL.trimCache": this.handleTrimCache.bind(this), + "codeQL.trimOverlayBaseCache": this.handleTrimOverlayBaseCache.bind(this), "codeQLDatabases.chooseDatabaseFolder": this.handleChooseDatabaseFolder.bind(this), "codeQLDatabases.chooseDatabaseArchive": @@ -359,6 +364,12 @@ export class DatabaseUI extends DisposableObject { ); } + private async handleChooseDatabaseFoldersParentFromPalette(): Promise { + return withProgress(async (progress) => { + await this.chooseDatabasesParentFolder(progress); + }); + } + private async handleSetDefaultTourDatabase(): Promise { return withProgress( async () => { @@ -369,7 +380,7 @@ export class DatabaseUI extends DisposableObject { // This specifically refers to the database folder in // https://github.com/github/codespaces-codeql const uri = Uri.parse( - `${workspace.workspaceFolders[0].uri}/.tours/codeql-tutorial-database`, + `${workspace.workspaceFolders[0].uri.toString()}/.tours/codeql-tutorial-database`, ); const databaseItem = this.databaseManager.findDatabaseItem(uri); @@ -495,7 +506,7 @@ export class DatabaseUI extends DisposableObject { ): Promise { try { await this.chooseAndSetDatabase(false, progress); - } catch (e: unknown) { + } catch (e) { void showAndLogExceptionWithTelemetry( this.app.logger, this.app.telemetry, @@ -678,6 +689,25 @@ export class DatabaseUI extends DisposableObject { ); } + private async handleTrimOverlayBaseCache(): Promise { + return withProgress( + async () => { + if ( + this.queryServer !== undefined && + this.databaseManager.currentDatabaseItem !== undefined + ) { + await this.queryServer.trimCacheWithModeInDatabase( + this.databaseManager.currentDatabaseItem, + "overlay", + ); + } + }, + { + title: "Removing all overlay-dependent data from cache", + }, + ); + } + private async handleGetCurrentDatabase(): Promise { const dbItem = await this.getDatabaseItemInternal(undefined); return dbItem?.databaseUri.fsPath; @@ -957,26 +987,22 @@ export class DatabaseUI extends DisposableObject { } /** - * Ask the user for a database directory. Returns the chosen database, or `undefined` if the - * operation was canceled. + * Import database from uri. Returns the imported database, or `undefined` if the + * operation was unsuccessful or canceled. */ - private async chooseAndSetDatabase( + private async importDatabase( + uri: Uri, byFolder: boolean, progress: ProgressCallback, ): Promise { - const uri = await chooseDatabaseDir(byFolder); - if (!uri) { - return undefined; - } - - if (byFolder && !uri.fsPath.endsWith("testproj")) { + if (byFolder && !uri.fsPath.endsWith(".testproj")) { const fixedUri = await this.fixDbUri(uri); // we are selecting a database folder return await this.databaseManager.openDatabase(fixedUri, { type: "folder", }); } else { - // we are selecting a database archive or a testproj. + // we are selecting a database archive or a .testproj. // Unzip archives (if an archive) and copy into a workspace-controlled area // before importing. return await this.databaseFetcher.importLocalDatabase( @@ -986,6 +1012,104 @@ export class DatabaseUI extends DisposableObject { } } + /** + * Ask the user for a database directory. Returns the chosen database, or `undefined` if the + * operation was canceled. + */ + private async chooseAndSetDatabase( + byFolder: boolean, + progress: ProgressCallback, + ): Promise { + const uri = await chooseDatabaseDir(byFolder); + if (!uri) { + return undefined; + } + + return await this.importDatabase(uri, byFolder, progress); + } + + /** + * Ask the user for a parent directory that contains all databases. + * Returns all valid databases, or `undefined` if the operation was canceled. + */ + private async chooseDatabasesParentFolder( + progress: ProgressCallback, + ): Promise { + const uri = await chooseDatabaseDir(true); + if (!uri) { + return undefined; + } + + const databases: DatabaseItem[] = []; + const failures: string[] = []; + const entries = await workspace.fs.readDirectory(uri); + const validFileTypes = [FileType.File, FileType.Directory]; + + for (const [index, entry] of entries.entries()) { + progress({ + step: index + 1, + maxStep: entries.length, + message: `Importing '${entry[0]}'`, + }); + + const subProgress: ProgressCallback = (p) => { + progress({ + step: index + 1, + maxStep: entries.length, + message: `Importing '${entry[0]}': (${p.step}/${p.maxStep}) ${p.message}`, + }); + }; + + if (!validFileTypes.includes(entry[1])) { + void this.app.logger.log( + `Skipping import for '${entry[0]}', invalid file type: ${entry[1]}`, + ); + continue; + } + + try { + const databaseUri = Uri.joinPath(uri, entry[0]); + void this.app.logger.log(`Importing from ${databaseUri.toString()}`); + + const database = await this.importDatabase( + databaseUri, + entry[1] === FileType.Directory, + subProgress, + ); + if (database) { + databases.push(database); + } else { + failures.push(entry[0]); + } + } catch (e) { + failures.push(`${entry[0]}: ${getErrorMessage(e)}`.trim()); + } + } + + if (failures.length) { + void showAndLogErrorMessage( + this.app.logger, + `Failed to import ${failures.length} database(s), successfully imported ${databases.length} database(s).`, + { + fullMessage: `Failed to import ${failures.length} database(s), successfully imported ${databases.length} database(s).\nFailed databases:\n - ${failures.join("\n - ")}`, + }, + ); + } else if (databases.length === 0) { + void showAndLogErrorMessage( + this.app.logger, + `No database folder to import.`, + ); + return undefined; + } else { + void showAndLogInformationMessage( + this.app.logger, + `Successfully imported ${databases.length} database(s).`, + ); + } + + return databases; + } + /** * Perform some heuristics to ensure a proper database location is chosen. * diff --git a/extensions/ql-vscode/src/databases/local-databases/database-manager.ts b/extensions/ql-vscode/src/databases/local-databases/database-manager.ts index 7b4eb482fbc..5685f5f997a 100644 --- a/extensions/ql-vscode/src/databases/local-databases/database-manager.ts +++ b/extensions/ql-vscode/src/databases/local-databases/database-manager.ts @@ -64,12 +64,13 @@ const DB_LIST = "databaseList"; */ function eventFired( event: vscode.Event, + eventName: string, timeoutMs = 1000, ): Promise { return new Promise((res, _rej) => { const timeout = setTimeout(() => { void extLogger.log( - `Waiting for event ${event} timed out after ${timeoutMs}ms`, + `Waiting for event '${eventName}' timed out after ${timeoutMs}ms`, ); res(undefined); dispose(); @@ -231,7 +232,7 @@ export class DatabaseManager extends DisposableObject { let originStat; try { originStat = await stat(originDbYml); - } catch (e) { + } catch { // if there is an error here, assume that the origin database // is no longer available. Safely ignore and do not try to re-import. return false; @@ -240,7 +241,7 @@ export class DatabaseManager extends DisposableObject { try { const importedStat = await stat(importedDbYml); return originStat.mtimeMs > importedStat.mtimeMs; - } catch (e) { + } catch { // If either of the files does not exist, we assume the origin is newer. // This shouldn't happen unless the user manually deleted one of the files. return true; @@ -256,7 +257,7 @@ export class DatabaseManager extends DisposableObject { private async reimportTestDatabase(databaseUri: vscode.Uri): Promise { const dbItem = this.findDatabaseItem(databaseUri); if (dbItem === undefined || dbItem.origin?.type !== "testproj") { - throw new Error(`Database ${databaseUri} is not a testproj.`); + throw new Error(`Database ${databaseUri.toString()} is not a testproj.`); } await this.removeDatabaseItem(dbItem); @@ -411,7 +412,7 @@ export class DatabaseManager extends DisposableObject { qlpackStoragePath, ); await qlPackGenerator.generate(); - } catch (e: unknown) { + } catch (e) { void this.logger.log( `Could not create skeleton QL pack: ${getErrorMessage(e)}`, ); @@ -474,7 +475,10 @@ export class DatabaseManager extends DisposableObject { }); // vscode api documentation says we must to wait for this event // between multiple `updateWorkspaceFolders` calls. - await eventFired(vscode.workspace.onDidChangeWorkspaceFolders); + await eventFired( + vscode.workspace.onDidChangeWorkspaceFolders, + "vscode.workspace.onDidChangeWorkspaceFolders", + ); } } @@ -561,7 +565,7 @@ export class DatabaseManager extends DisposableObject { // When loading from persisted state, leave invalid databases in the list. They will be // marked as invalid, and cannot be set as the current database. void this.logger.log( - `Error loading database ${database.uri}: ${e}.`, + `Error loading database ${database.uri}: ${getErrorMessage(e)}.`, ); } } diff --git a/extensions/ql-vscode/src/databases/ui/db-panel.ts b/extensions/ql-vscode/src/databases/ui/db-panel.ts index 0605721d3ea..dbc61469d5a 100644 --- a/extensions/ql-vscode/src/databases/ui/db-panel.ts +++ b/extensions/ql-vscode/src/databases/ui/db-panel.ts @@ -432,7 +432,7 @@ export class DbPanel extends DisposableObject { try { // This will also validate that the controller repository is valid await getControllerRepo(this.app.credentials); - } catch (e: unknown) { + } catch (e) { if (e instanceof UserCancellationException) { return; } diff --git a/extensions/ql-vscode/src/debugger/debug-protocol.ts b/extensions/ql-vscode/src/debugger/debug-protocol.ts index d50bcee2221..c24d72e412b 100644 --- a/extensions/ql-vscode/src/debugger/debug-protocol.ts +++ b/extensions/ql-vscode/src/debugger/debug-protocol.ts @@ -39,6 +39,7 @@ export interface EvaluationCompletedEvent extends Event { resultType: QueryResultType; message: string | undefined; evaluationTime: number; + outputBaseName: string; }; } @@ -96,7 +97,7 @@ export type Response = DebugProtocol.Response & { type: "response" }; export type InitializeResponse = DebugProtocol.InitializeResponse & Response & { command: "initialize" }; -export interface QuickEvalResponse extends Response {} +export type QuickEvalResponse = Response; export type AnyResponse = InitializeResponse | QuickEvalResponse; diff --git a/extensions/ql-vscode/src/debugger/debug-session.ts b/extensions/ql-vscode/src/debugger/debug-session.ts index 1a51df30a30..64100a7831f 100644 --- a/extensions/ql-vscode/src/debugger/debug-session.ts +++ b/extensions/ql-vscode/src/debugger/debug-session.ts @@ -16,7 +16,7 @@ import type { BaseLogger, LogOptions } from "../common/logging"; import { queryServerLogger } from "../common/logging/vscode"; import { QueryResultType } from "../query-server/messages"; import type { - CoreQueryResults, + CoreQueryResult, CoreQueryRun, QueryRunner, } from "../query-server"; @@ -25,6 +25,7 @@ import type * as CodeQLProtocol from "./debug-protocol"; import type { QuickEvalContext } from "../run-queries-shared"; import { getErrorMessage } from "../common/helpers-pure"; import { DisposableObject } from "../common/disposable-object"; +import { basename } from "path"; // More complete implementations of `Event` for certain events, because the classes from // `@vscode/debugadapter` make it more difficult to provide some of the message values. @@ -107,9 +108,9 @@ class EvaluationCompletedEvent public readonly event = "codeql-evaluation-completed"; public readonly body: CodeQLProtocol.EvaluationCompletedEvent["body"]; - constructor(results: CoreQueryResults) { + constructor(result: CoreQueryResult) { super("codeql-evaluation-completed"); - this.body = results; + this.body = result; } } @@ -143,6 +144,7 @@ const QUERY_THREAD_NAME = "Evaluation thread"; class RunningQuery extends DisposableObject { private readonly tokenSource = this.push(new CancellationTokenSource()); public readonly queryRun: CoreQueryRun; + private readonly queryPath: string; public constructor( queryRunner: QueryRunner, @@ -154,21 +156,25 @@ class RunningQuery extends DisposableObject { ) { super(); + this.queryPath = config.query; // Create the query run, which will give us some information about the query even before the // evaluation has completed. this.queryRun = queryRunner.createQueryRun( config.database, - { - queryPath: config.query, - quickEvalPosition: quickEvalContext?.quickEvalPosition, - quickEvalCountOnly: quickEvalContext?.quickEvalCount, - }, + [ + { + queryPath: this.queryPath, + outputBaseName: "results", + quickEvalPosition: quickEvalContext?.quickEvalPosition, + quickEvalCountOnly: quickEvalContext?.quickEvalCount, + }, + ], true, config.additionalPacks, config.extensionPacks, config.additionalRunQueryArgs, queryStorageDir, - undefined, + basename(config.query), undefined, ); } @@ -208,7 +214,7 @@ class RunningQuery extends DisposableObject { progressStart.body.cancellable = true; this.sendEvent(progressStart); try { - return await this.queryRun.evaluate( + const completedQuery = await this.queryRun.evaluate( (p) => { const progressUpdate = new ProgressUpdateEvent( this.queryRun.id, @@ -220,6 +226,14 @@ class RunningQuery extends DisposableObject { this.tokenSource.token, this.logger, ); + return ( + completedQuery.results.get(this.queryPath) ?? { + resultType: QueryResultType.OTHER_ERROR, + message: "Missing query results", + evaluationTime: 0, + outputBaseName: "unknown", + } + ); } finally { this.sendEvent(new ProgressEndEvent(this.queryRun.id)); } @@ -229,6 +243,7 @@ class RunningQuery extends DisposableObject { resultType: QueryResultType.OTHER_ERROR, message, evaluationTime: 0, + outputBaseName: "unknown", }; } } diff --git a/extensions/ql-vscode/src/debugger/debugger-ui.ts b/extensions/ql-vscode/src/debugger/debugger-ui.ts index 6eb9a2d9fc7..8d401897055 100644 --- a/extensions/ql-vscode/src/debugger/debugger-ui.ts +++ b/extensions/ql-vscode/src/debugger/debugger-ui.ts @@ -8,7 +8,7 @@ import { debug, Uri, CancellationTokenSource } from "vscode"; import type { DebuggerCommands } from "../common/commands"; import type { DatabaseManager } from "../databases/local-databases"; import { DisposableObject } from "../common/disposable-object"; -import type { CoreQueryResults } from "../query-server"; +import type { CoreQueryResult } from "../query-server"; import { getQuickEvalContext, saveBeforeStart, @@ -134,8 +134,15 @@ class QLDebugAdapterTracker body: EvaluationCompletedEvent["body"], ): Promise { if (this.localQueryRun !== undefined) { - const results: CoreQueryResults = body; - await this.localQueryRun.complete(results, (_) => {}); + const results: CoreQueryResult = body; + await this.localQueryRun.complete( + { + results: new Map([ + [this.configuration.query, results], + ]), + }, + (_) => {}, + ); this.localQueryRun = undefined; } } diff --git a/extensions/ql-vscode/src/extension.ts b/extensions/ql-vscode/src/extension.ts index 6a2a922c398..bd73929ad63 100644 --- a/extensions/ql-vscode/src/extension.ts +++ b/extensions/ql-vscode/src/extension.ts @@ -28,7 +28,6 @@ import { CliConfigListener, DistributionConfigListener, GitHubDatabaseConfigListener, - joinOrderWarningThreshold, QueryHistoryConfigListener, QueryServerConfigListener, VariantAnalysisConfigListener, @@ -102,7 +101,6 @@ import { getPackagingCommands } from "./packaging"; import { HistoryItemLabelProvider } from "./query-history/history-item-label-provider"; import { EvalLogViewer } from "./query-evaluation-logging"; import { SummaryLanguageSupport } from "./log-insights/summary-language-support"; -import { JoinOrderScannerProvider } from "./log-insights/join-order"; import { LogScannerService } from "./log-insights/log-scanner-service"; import { VariantAnalysisView } from "./variant-analysis/variant-analysis-view"; import { VariantAnalysisViewSerializer } from "./variant-analysis/variant-analysis-view-serializer"; @@ -135,6 +133,7 @@ import { LanguageContextStore } from "./language-context-store"; import { LanguageSelectionPanel } from "./language-selection-panel/language-selection-panel"; import { GitHubDatabasesModule } from "./databases/github-databases"; import { DatabaseFetcher } from "./databases/database-fetcher"; +import { ComparePerformanceView } from "./compare-performance/compare-performance-view"; /** * extension.ts @@ -219,7 +218,7 @@ function getCommands( "codeQL.copyVersion": async () => { const text = `CodeQL extension version: ${ extension?.packageJSON.version - } \nCodeQL CLI version: ${await getCliVersion()} \nPlatform: ${platform()} ${arch()}`; + } \nCodeQL CLI version: ${(await getCliVersion()).toString()} \nPlatform: ${platform()} ${arch()}`; await env.clipboard.writeText(text); void showAndLogInformationMessage(extLogger, text); }, @@ -252,7 +251,7 @@ function registerErrorStubs( stubGenerator: (command: string) => () => Promise, ): void { // Remove existing stubs - errorStubs.forEach((stub) => stub.dispose()); + errorStubs.forEach((stub) => void stub.dispose()); if (extension === undefined) { throw new Error(`Can't find extension ${extensionId}`); @@ -300,12 +299,12 @@ const shouldUpdateOnNextActivationKey = "shouldUpdateOnNextActivation"; const codeQlVersionRange = DEFAULT_DISTRIBUTION_VERSION_RANGE; -// This is the minimum version of vscode that we _want_ to support. We want to update to Node 18, but that -// requires 1.82 or later. If we change the minimum version in the package.json, then anyone on an older version of vscode will +// This is the minimum version of vscode that we _want_ to support. We want to update to Node 20, but that +// requires 1.90 or later. If we change the minimum version in the package.json, then anyone on an older version of vscode will // silently be unable to upgrade. So, the solution is to first bump the minimum version here and release. Then // bump the version in the package.json and release again. This way, anyone on an older version of vscode will get a warning // before silently being refused to upgrade. -const MIN_VERSION = "1.82.0"; +const MIN_VERSION = "1.90.0"; function sendConfigTelemetryData() { const config: Record = {}; @@ -362,7 +361,9 @@ export async function activate( distributionConfigListener, codeQlVersionRange, ctx, + app.logger, ); + await distributionManager.initialize(); registerErrorStubs([checkForUpdatesCommand], (command) => async () => { void showAndLogErrorMessage( @@ -456,12 +457,31 @@ export async function activate( void showAndLogWarningMessage( extLogger, - `You are using an unsupported version of the CodeQL CLI (${ver.version}). ` + - `The minimum supported version is ${CliVersionConstraint.OLDEST_SUPPORTED_CLI_VERSION}. ` + + `You are using an unsupported version of the CodeQL CLI (${ver.version.toString()}). ` + + `The minimum supported version is ${CliVersionConstraint.OLDEST_SUPPORTED_CLI_VERSION.toString()}. ` + `Please upgrade to a newer version of the CodeQL CLI.`, ); unsupportedWarningShown = true; }); + + // Expose the CodeQL CLI features to the extension context under `codeQL.cliFeatures.*`. + let cliFeatures: { [feature: string]: boolean | undefined } = {}; + codeQlExtension.cliServer.addVersionChangedListener(async (ver) => { + for (const feat of Object.keys(cliFeatures)) { + cliFeatures[feat] = false; + } + cliFeatures = { + ...cliFeatures, + ...(ver?.features ?? {}), + }; + for (const feat of Object.keys(cliFeatures)) { + await app.commands.execute( + "setContext", + `codeQL.cliFeatures.${feat}`, + cliFeatures[feat] ?? false, + ); + } + }); } return codeQlExtension; @@ -595,10 +615,13 @@ async function installOrUpdateDistribution( } else if (e instanceof GithubApiError) { void alertFunction( extLogger, - `Encountered GitHub API error while trying to ${taskDescription}. ${e}`, + `Encountered GitHub API error while trying to ${taskDescription}. ${getErrorMessage(e)}`, ); } - void alertFunction(extLogger, `Unable to ${taskDescription}. ${e}`); + void alertFunction( + extLogger, + `Unable to ${taskDescription}. ${getErrorMessage(e)}`, + ); } finally { isInstallingOrUpdatingDistribution = false; } @@ -620,11 +643,11 @@ async function getDistributionDisplayingDistributionWarnings( case DistributionKind.ExtensionManaged: return 'Please update the CodeQL CLI by running the "CodeQL: Check for CLI Updates" command.'; case DistributionKind.CustomPathConfig: - return `Please update the "CodeQL CLI Executable Path" setting to point to a CLI in the version range ${codeQlVersionRange}.`; + return `Please update the "CodeQL CLI Executable Path" setting to point to a CLI in the version range ${codeQlVersionRange.toString()}.`; case DistributionKind.PathEnvironmentVariable: return ( - `Please update the CodeQL CLI on your PATH to a version compatible with ${codeQlVersionRange}, or ` + - `set the "CodeQL CLI Executable Path" setting to the path of a CLI version compatible with ${codeQlVersionRange}.` + `Please update the CodeQL CLI on your PATH to a version compatible with ${codeQlVersionRange.toString()}, or ` + + `set the "CodeQL CLI Executable Path" setting to the path of a CLI version compatible with ${codeQlVersionRange.toString()}.` ); } })(); @@ -666,7 +689,7 @@ async function installOrUpdateThenTryActivate( try { await prepareCodeTour(app.commands); - } catch (e: unknown) { + } catch (e) { void extLogger.log( `Could not open tutorial workspace automatically: ${getErrorMessage(e)}`, ); @@ -737,7 +760,7 @@ async function activateWithInstalledDistribution( beganMainExtensionActivation = true; // Remove any error stubs command handlers left over from first part // of activation. - errorStubs.forEach((stub) => stub.dispose()); + errorStubs.forEach((stub) => void stub.dispose()); void extLogger.log("Initializing configuration listener..."); const qlConfigurationListener = @@ -746,9 +769,13 @@ async function activateWithInstalledDistribution( ); ctx.subscriptions.push(qlConfigurationListener); + void extLogger.log("Initializing CodeQL language server."); + const languageClient = createLanguageClient(qlConfigurationListener); + void extLogger.log("Initializing CodeQL cli server..."); const cliServer = new CodeQLCliServer( app, + languageClient, distributionManager, new CliConfigListener(), extLogger, @@ -922,6 +949,11 @@ async function activateWithInstalledDistribution( from: CompletedLocalQueryInfo, to: CompletedLocalQueryInfo, ): Promise => showResultsForComparison(compareView, from, to), + async ( + from: CompletedLocalQueryInfo, + to: CompletedLocalQueryInfo | undefined, + ): Promise => + showPerformanceComparison(comparePerformanceView, from, to), ); ctx.subscriptions.push(qhm); @@ -929,11 +961,6 @@ async function activateWithInstalledDistribution( void extLogger.log("Initializing evaluation log scanners."); const logScannerService = new LogScannerService(qhm); ctx.subscriptions.push(logScannerService); - ctx.subscriptions.push( - logScannerService.scanners.registerLogScannerProvider( - new JoinOrderScannerProvider(() => joinOrderWarningThreshold()), - ), - ); void extLogger.log("Initializing compare view."); const compareView = new CompareView( @@ -947,6 +974,15 @@ async function activateWithInstalledDistribution( ); ctx.subscriptions.push(compareView); + void extLogger.log("Initializing performance comparison view."); + const comparePerformanceView = new ComparePerformanceView( + app, + queryServerLogger, + labelProvider, + localQueryResultsView, + ); + ctx.subscriptions.push(comparePerformanceView); + void extLogger.log("Initializing source archive filesystem provider."); archiveFilesystemProvider_activate(ctx, dbm); @@ -959,9 +995,6 @@ async function activateWithInstalledDistribution( ctx.subscriptions.push(tmpDirDisposal); - void extLogger.log("Initializing CodeQL language server."); - const languageClient = createLanguageClient(qlConfigurationListener); - const localQueries = new LocalQueries( app, qs, @@ -1123,6 +1156,8 @@ async function activateWithInstalledDistribution( void extLogger.log("Reading query history"); await qhm.readQueryHistory(); + distributionManager.startCleanup(); + void extLogger.log("Successfully finished extension initialization."); return { @@ -1135,7 +1170,7 @@ async function activateWithInstalledDistribution( databaseUI, variantAnalysisManager, dispose: () => { - ctx.subscriptions.forEach((d) => d.dispose()); + ctx.subscriptions.forEach((d) => void d.dispose()); }, }; } @@ -1186,6 +1221,30 @@ async function showResultsForComparison( } } +async function showPerformanceComparison( + view: ComparePerformanceView, + from: CompletedLocalQueryInfo, + to: CompletedLocalQueryInfo | undefined, +): Promise { + let fromLog = from.evaluatorLogPaths?.jsonSummary; + let toLog = to?.evaluatorLogPaths?.jsonSummary; + + if (to === undefined) { + toLog = fromLog; + fromLog = ""; + } + if (fromLog === undefined || toLog === undefined) { + return extLogger.showWarningMessage( + `Cannot compare performance as the structured logs are missing. Did they queries complete normally?`, + ); + } + await extLogger.log( + `Comparing performance of ${from.getQueryName()} and ${to?.getQueryName() ?? "baseline"}`, + ); + + await view.showResults(fromLog, toLog); +} + function addUnhandledRejectionListener() { const handler = (error: unknown) => { // This listener will be triggered for errors from other extensions as diff --git a/extensions/ql-vscode/src/koffi.d.ts b/extensions/ql-vscode/src/koffi.d.ts new file mode 100644 index 00000000000..48cabce7265 --- /dev/null +++ b/extensions/ql-vscode/src/koffi.d.ts @@ -0,0 +1,4 @@ +// koffi/indirect is untyped in the upstream package, but it exports the same functions as koffi. +declare module "koffi/indirect" { + export * from "koffi"; +} diff --git a/extensions/ql-vscode/src/language-selection-panel/language-selection-data-provider.ts b/extensions/ql-vscode/src/language-selection-panel/language-selection-data-provider.ts index f2e06b50cb8..fe0fb4c072c 100644 --- a/extensions/ql-vscode/src/language-selection-panel/language-selection-data-provider.ts +++ b/extensions/ql-vscode/src/language-selection-panel/language-selection-data-provider.ts @@ -9,6 +9,7 @@ import { const ALL_LANGUAGE_SELECTION_OPTIONS = [ undefined, // All languages + QueryLanguage.Actions, QueryLanguage.Cpp, QueryLanguage.CSharp, QueryLanguage.Go, @@ -16,6 +17,7 @@ const ALL_LANGUAGE_SELECTION_OPTIONS = [ QueryLanguage.Javascript, QueryLanguage.Python, QueryLanguage.Ruby, + QueryLanguage.Rust, QueryLanguage.Swift, ]; diff --git a/extensions/ql-vscode/src/language-support/ast-viewer/ast-builder.ts b/extensions/ql-vscode/src/language-support/ast-viewer/ast-builder.ts index fd2203c0615..a8fd32a3276 100644 --- a/extensions/ql-vscode/src/language-support/ast-viewer/ast-builder.ts +++ b/extensions/ql-vscode/src/language-support/ast-viewer/ast-builder.ts @@ -7,7 +7,6 @@ import type { import type { DatabaseItem } from "../../databases/local-databases"; import type { ChildAstItem, AstItem } from "./ast-viewer"; import type { Uri } from "vscode"; -import type { QueryOutputDir } from "../../local-queries/query-output-dir"; import { fileRangeFromURI } from "../contextual/file-range-from-uri"; import { mapUrlValue } from "../../common/bqrs-raw-results-mapper"; @@ -17,15 +16,12 @@ import { mapUrlValue } from "../../common/bqrs-raw-results-mapper"; */ export class AstBuilder { private roots: AstItem[] | undefined; - private bqrsPath: string; constructor( - outputDir: QueryOutputDir, + private readonly bqrsPath: string, private cli: CodeQLCliServer, public db: DatabaseItem, public fileName: Uri, - ) { - this.bqrsPath = outputDir.bqrsPath; - } + ) {} async getRoots(): Promise { if (!this.roots) { diff --git a/extensions/ql-vscode/src/language-support/ast-viewer/ast-viewer.ts b/extensions/ql-vscode/src/language-support/ast-viewer/ast-viewer.ts index 71c057aa62c..f186674c08e 100644 --- a/extensions/ql-vscode/src/language-support/ast-viewer/ast-viewer.ts +++ b/extensions/ql-vscode/src/language-support/ast-viewer/ast-viewer.ts @@ -80,11 +80,11 @@ class AstViewerDataProvider const treeItem = new TreeItem(item.label || "", state); treeItem.description = line ? `Line ${line}` : ""; treeItem.id = String(item.id); - treeItem.tooltip = `${treeItem.description} ${treeItem.label}`; + treeItem.tooltip = `${treeItem.description} ${typeof treeItem.label === "string" ? treeItem.label : (treeItem.label?.label ?? "")}`; treeItem.command = { command: "codeQLAstViewer.gotoCode", title: "Go To Code", - tooltip: `Go To ${item.location}`, + tooltip: "Go To Code", arguments: [item], }; return treeItem; diff --git a/extensions/ql-vscode/src/language-support/contextual/cached-operation.ts b/extensions/ql-vscode/src/language-support/contextual/cached-operation.ts index a50e7d03b01..3c6e845d740 100644 --- a/extensions/ql-vscode/src/language-support/contextual/cached-operation.ts +++ b/extensions/ql-vscode/src/language-support/contextual/cached-operation.ts @@ -7,6 +7,7 @@ export class CachedOperation { private readonly operation: (t: string, ...args: S) => Promise; private readonly cached: Map; private readonly lru: string[]; + private generation: number; private readonly inProgressCallbacks: Map< string, Array<[(u: U) => void, (reason?: Error) => void]> @@ -17,6 +18,7 @@ export class CachedOperation { private cacheSize = 100, ) { this.operation = operation; + this.generation = 0; this.lru = []; this.inProgressCallbacks = new Map< string, @@ -46,7 +48,7 @@ export class CachedOperation { inProgressCallback.push([resolve, reject]); }); } - + const origGeneration = this.generation; // Otherwise compute the new value, but leave a callback to allow sharing work const callbacks: Array<[(u: U) => void, (reason?: Error) => void]> = []; this.inProgressCallbacks.set(t, callbacks); @@ -54,6 +56,11 @@ export class CachedOperation { const result = await this.operation(t, ...args); callbacks.forEach((f) => f[0](result)); this.inProgressCallbacks.delete(t); + if (this.generation !== origGeneration) { + // Cache was reset in the meantime so don't trust this + // result enough to cache it. + return result; + } if (this.lru.length > this.cacheSize) { const toRemove = this.lru.shift()!; this.cached.delete(toRemove); @@ -69,4 +76,11 @@ export class CachedOperation { this.inProgressCallbacks.delete(t); } } + + reset() { + this.cached.clear(); + this.lru.length = 0; + this.generation++; + this.inProgressCallbacks.clear(); + } } diff --git a/extensions/ql-vscode/src/language-support/contextual/file-range-from-uri.ts b/extensions/ql-vscode/src/language-support/contextual/file-range-from-uri.ts index 1aeb1fee51e..5274dc32f28 100644 --- a/extensions/ql-vscode/src/language-support/contextual/file-range-from-uri.ts +++ b/extensions/ql-vscode/src/language-support/contextual/file-range-from-uri.ts @@ -31,7 +31,7 @@ export function fileRangeFromURI( return new Location(db.resolveSourceFile(uri.uri), range); } return undefined; - } catch (e) { + } catch { return undefined; } } diff --git a/extensions/ql-vscode/src/language-support/contextual/location-finder.ts b/extensions/ql-vscode/src/language-support/contextual/location-finder.ts index 01b8a5bbe76..0d3c25de93d 100644 --- a/extensions/ql-vscode/src/language-support/contextual/location-finder.ts +++ b/extensions/ql-vscode/src/language-support/contextual/location-finder.ts @@ -21,7 +21,6 @@ import { } from "./query-resolver"; import type { CancellationToken, LocationLink } from "vscode"; import { Uri } from "vscode"; -import type { QueryOutputDir } from "../../local-queries/query-output-dir"; import type { QueryRunner } from "../../query-server"; import { QueryResultType } from "../../query-server/messages"; import { fileRangeFromURI } from "./file-range-from-uri"; @@ -84,9 +83,15 @@ export async function getLocationsForUriString( token, templates, ); - if (results.resultType === QueryResultType.SUCCESS) { + const queryResult = results.results.get(query); + if (queryResult?.resultType === QueryResultType.SUCCESS) { links.push( - ...(await getLinksFromResults(results.outputDir, cli, db, filter)), + ...(await getLinksFromResults( + results.outputDir.getBqrsPath(queryResult.outputBaseName), + cli, + db, + filter, + )), ); } } @@ -94,13 +99,12 @@ export async function getLocationsForUriString( } async function getLinksFromResults( - outputDir: QueryOutputDir, + bqrsPath: string, cli: CodeQLCliServer, db: DatabaseItem, filter: (srcFile: string, destFile: string) => boolean, ): Promise { const localLinks: FullLocationLink[] = []; - const bqrsPath = outputDir.bqrsPath; const info = await cli.bqrsInfo(bqrsPath); const selectInfo = info["result-sets"].find( (schema) => schema.name === SELECT_QUERY_NAME, diff --git a/extensions/ql-vscode/src/language-support/contextual/query-resolver.ts b/extensions/ql-vscode/src/language-support/contextual/query-resolver.ts index 4302b18fa92..0fe2a08d1fc 100644 --- a/extensions/ql-vscode/src/language-support/contextual/query-resolver.ts +++ b/extensions/ql-vscode/src/language-support/contextual/query-resolver.ts @@ -14,6 +14,7 @@ import type { CancellationToken } from "vscode"; import type { ProgressCallback } from "../../common/vscode/progress"; import type { CoreCompletedQuery, QueryRunner } from "../../query-server"; import { createLockFileForStandardQuery } from "../../local-queries/standard-queries"; +import { basename } from "path"; /** * This wil try to determine the qlpacks for a given database. If it can't find a matching @@ -28,7 +29,7 @@ export async function resolveContextualQlPacksForDatabase( ): Promise { try { return await qlpackOfDatabase(cli, databaseItem); - } catch (e) { + } catch { // If we can't find the qlpacks for the database, use the defaults instead } @@ -80,13 +81,19 @@ export async function runContextualQuery( const { cleanup } = await createLockFileForStandardQuery(cli, query); const queryRun = qs.createQueryRun( db.databaseUri.fsPath, - { queryPath: query, quickEvalPosition: undefined }, + [ + { + queryPath: query, + outputBaseName: "results", + quickEvalPosition: undefined, + }, + ], false, getOnDiskWorkspaceFolders(), undefined, {}, queryStorageDir, - undefined, + basename(query), templates, ); void extLogger.log( diff --git a/extensions/ql-vscode/src/language-support/contextual/template-provider.ts b/extensions/ql-vscode/src/language-support/contextual/template-provider.ts index 19927bd8903..8d9cf6327ec 100644 --- a/extensions/ql-vscode/src/language-support/contextual/template-provider.ts +++ b/extensions/ql-vscode/src/language-support/contextual/template-provider.ts @@ -133,7 +133,7 @@ export class TemplateQueryReferenceProvider implements ReferenceProvider { const locLinks: Location[] = []; for (const link of fileLinks) { - if (link.targetRange!.contains(position)) { + if (link.targetRange.contains(position)) { locLinks.push({ range: link.originSelectionRange!, uri: link.originUri, @@ -209,8 +209,14 @@ export class TemplatePrintAstProvider { ? await this.cache.get(fileUri.toString(), progress, token) : await this.getAst(fileUri.toString(), progress, token); + const queryResults = Array.from(completedQuery.results.values()); + if (queryResults.length !== 1) { + throw new Error( + `Expected exactly one query result, but found ${queryResults.length}.`, + ); + } return new AstBuilder( - completedQuery.outputDir, + completedQuery.outputDir.getBqrsPath(queryResults[0].outputBaseName), this.cli, this.dbm.findDatabaseItem(Uri.file(completedQuery.dbPath))!, fileUri, diff --git a/extensions/ql-vscode/src/language-support/language-client.ts b/extensions/ql-vscode/src/language-support/language-client.ts index 7b27a3fdaa5..07a3296b1af 100644 --- a/extensions/ql-vscode/src/language-support/language-client.ts +++ b/extensions/ql-vscode/src/language-support/language-client.ts @@ -79,7 +79,7 @@ async function spawnLanguageServer( languageServerLogger.log(data.toString(), { trailingNewline: false }), progressReporter, ); - return { writer: child.stdin!, reader: child.stdout! }; + return { writer: child.stdin, reader: child.stdout }; }, ); } diff --git a/extensions/ql-vscode/src/language-support/language-support.ts b/extensions/ql-vscode/src/language-support/language-support.ts index e73bab07f6b..bded793fdf6 100644 --- a/extensions/ql-vscode/src/language-support/language-support.ts +++ b/extensions/ql-vscode/src/language-support/language-support.ts @@ -12,7 +12,7 @@ import { languages, IndentAction } from "vscode"; * See https://github.com/microsoft/vscode/blob/master/src/vs/editor/test/common/modes/supports/javascriptOnEnterRules.ts */ export function install() { - // eslint-disable-next-line @typescript-eslint/no-var-requires + // eslint-disable-next-line @typescript-eslint/no-require-imports const langConfig = require("../../language-configuration.json"); // setLanguageConfiguration requires a regexp for the wordpattern, not a string langConfig.wordPattern = new RegExp(langConfig.wordPattern); diff --git a/extensions/ql-vscode/src/language-support/query-editor.ts b/extensions/ql-vscode/src/language-support/query-editor.ts index 71e66900037..a7567e1f1be 100644 --- a/extensions/ql-vscode/src/language-support/query-editor.ts +++ b/extensions/ql-vscode/src/language-support/query-editor.ts @@ -99,7 +99,7 @@ async function previewQueryHelp( telemetryListener, errorMessage, { - fullMessage: `${errorMessage}\n${getErrorMessage(e)}`, + fullMessage: `${errorMessage.fullMessage}\n${getErrorMessage(e)}`, }, ); } diff --git a/extensions/ql-vscode/src/local-queries/local-queries.ts b/extensions/ql-vscode/src/local-queries/local-queries.ts index 2961586650b..4444ade8293 100644 --- a/extensions/ql-vscode/src/local-queries/local-queries.ts +++ b/extensions/ql-vscode/src/local-queries/local-queries.ts @@ -19,7 +19,11 @@ import { basename } from "path"; import { showBinaryChoiceDialog } from "../common/vscode/dialog"; import { getOnDiskWorkspaceFolders } from "../common/vscode/workspace-folders"; import { displayQuickQuery } from "./quick-query"; -import type { CoreCompletedQuery, QueryRunner } from "../query-server"; +import type { + CoreCompletedQuery, + CoreQueryTarget, + QueryRunner, +} from "../query-server"; import type { QueryHistoryManager } from "../query-history/query-history-manager"; import type { DatabaseQuickPickItem, @@ -37,6 +41,7 @@ import { createTimestampFile, getQuickEvalContext, saveBeforeStart, + validateQuerySuiteUri, validateQueryUri, } from "../run-queries-shared"; import type { CompletedLocalQueryInfo } from "../query-results"; @@ -51,6 +56,7 @@ import { LocalQueryRun } from "./local-query-run"; import { createMultiSelectionCommand } from "../common/vscode/selection-commands"; import { findLanguage } from "../codeql-cli/query-language"; import type { QueryTreeViewItem } from "../queries-panel/query-tree-view-item"; +import type { QueryLanguage } from "../common/query-language"; import { tryGetQueryLanguage } from "../common/query-language"; import type { LanguageContextStore } from "../language-context-store"; import type { ExtensionApp } from "../common/vscode/extension-app"; @@ -107,6 +113,7 @@ export class LocalQueries extends DisposableObject { "codeQL.runQueries": createMultiSelectionCommand( this.runQueries.bind(this), ), + "codeQL.runQuerySuite": this.runQuerySuite.bind(this), "codeQL.quickEval": this.quickEval.bind(this), "codeQL.quickEvalCount": this.quickEvalCount.bind(this), "codeQL.quickEvalContextEditor": this.quickEval.bind(this), @@ -178,7 +185,7 @@ export class LocalQueries extends DisposableObject { private async runQueries(fileURIs: Uri[]): Promise { await withProgress( async (progress, token) => { - const maxQueryCount = MAX_QUERIES.getValue() as number; + const maxQueryCount = MAX_QUERIES.getValue(); const [files, dirFound] = await gatherQlFiles( fileURIs.map((uri) => uri.fsPath), ); @@ -239,6 +246,94 @@ export class LocalQueries extends DisposableObject { ); } + private async runQuerySuite(fileUri: Uri): Promise { + await withProgress( + async (progress, token) => { + const suitePath = validateQuerySuiteUri(fileUri); + const databaseItem = await this.databaseUI.getDatabaseItem(progress); + if (databaseItem === undefined) { + throw new Error("Can't run query suite without a selected database"); + } + const selectedQuery: SelectedQuery = { + queryPath: suitePath, + }; + const additionalPacks = getOnDiskWorkspaceFolders(); + const extensionPacks = + await this.getDefaultExtensionPacks(additionalPacks); + const queries = await this.cliServer.resolveQueriesInSuite( + suitePath, + additionalPacks, + ); + if ( + !(await showBinaryChoiceDialog( + `You are about to run ${basename(suitePath)}, which contains ${queries.length} queries. Do you want to continue?`, + )) + ) { + return; + } + const queryTargets: CoreQueryTarget[] = []; + queries.forEach((query, index) => { + queryTargets.push({ + queryPath: query, + outputBaseName: `${index.toString().padStart(3, "0")}-${basename(query)}`, + quickEvalPosition: undefined, + quickEvalCountOnly: false, + }); + }); + const coreQueryRun = this.queryRunner.createQueryRun( + databaseItem.databaseUri.fsPath, + queryTargets, + true, + additionalPacks, + extensionPacks, + {}, + this.queryStorageDir, + basename(suitePath), + undefined, + ); + // handle cancellation from the history view. + const source = new CancellationTokenSource(); + try { + token.onCancellationRequested(() => source.cancel()); + + const localQueryRun = await this.createLocalQueryRun( + selectedQuery, + databaseItem, + coreQueryRun.outputDir, + source, + ); + + try { + const results = await coreQueryRun.evaluate( + progress, + source.token, + localQueryRun.logger, + ); + + await localQueryRun.complete(results, progress); + + return results; + } catch (e) { + const err = asError(e); + await localQueryRun.fail(err); + + if (token.isCancellationRequested) { + throw new UserCancellationException(err.message, true); + } else { + throw e; + } + } + } finally { + source.dispose(); + } + }, + { + title: "Running query suite", + cancellable: true, + }, + ); + } + private async quickEval(uri: Uri): Promise { await withProgress( async (progress, token) => { @@ -452,17 +547,20 @@ export class LocalQueries extends DisposableObject { const coreQueryRun = this.queryRunner.createQueryRun( databaseItem.databaseUri.fsPath, - { - queryPath: selectedQuery.queryPath, - quickEvalPosition: selectedQuery.quickEval?.quickEvalPosition, - quickEvalCountOnly: selectedQuery.quickEval?.quickEvalCount, - }, + [ + { + queryPath: selectedQuery.queryPath, + outputBaseName: "results", + quickEvalPosition: selectedQuery.quickEval?.quickEvalPosition, + quickEvalCountOnly: selectedQuery.quickEval?.quickEvalCount, + }, + ], true, additionalPacks, extensionPacks, {}, this.queryStorageDir, - undefined, + basename(selectedQuery.queryPath), templates, ); @@ -524,7 +622,7 @@ export class LocalQueries extends DisposableObject { const queryLanguage = await findLanguage(this.cliServer, uri); if (queryLanguage) { filteredDBs = this.databaseManager.databaseItems.filter( - (db) => db.language === queryLanguage, + (db) => (db.language as QueryLanguage) === queryLanguage, ); if (filteredDBs.length === 0) { void showAndLogErrorMessage( diff --git a/extensions/ql-vscode/src/local-queries/local-query-run.ts b/extensions/ql-vscode/src/local-queries/local-query-run.ts index 5ea2463caef..c2d6dec5972 100644 --- a/extensions/ql-vscode/src/local-queries/local-query-run.ts +++ b/extensions/ql-vscode/src/local-queries/local-query-run.ts @@ -4,7 +4,7 @@ import { showAndLogExceptionWithTelemetry, showAndLogWarningMessage, } from "../common/logging"; -import type { CoreQueryResults } from "../query-server"; +import type { CoreQueryResult, CoreQueryResults } from "../query-server"; import type { QueryHistoryManager } from "../query-history/query-history-manager"; import type { DatabaseItem } from "../databases/local-databases"; import type { @@ -29,7 +29,7 @@ import type { Disposable } from "../common/disposable-object"; import type { ProgressCallback } from "../common/vscode/progress"; import { progressUpdate } from "../common/vscode/progress"; -function formatResultMessage(result: CoreQueryResults): string { +function formatResultMessage(result: CoreQueryResult): string { switch (result.resultType) { case QueryResultType.CANCELLATION: return `cancelled after ${Math.round( @@ -86,7 +86,9 @@ export class LocalQueryRun { progress: ProgressCallback, ): Promise { const evalLogPaths = await this.summarizeEvalLog( - results.resultType, + Array.from(results.results.values()).every( + (result) => result.resultType === QueryResultType.SUCCESS, + ), this.outputDir, this.logger, progress, @@ -95,9 +97,12 @@ export class LocalQueryRun { this.queryInfo.setEvaluatorLogPaths(evalLogPaths); } progress(progressUpdate(1, 4, "Getting completed query info")); - const queryWithResults = await this.getCompletedQueryInfo(results); + const queriesWithResults = await this.getCompletedQueryInfo(results); progress(progressUpdate(2, 4, "Updating query history")); - this.queryHistoryManager.completeQuery(this.queryInfo, queryWithResults); + this.queryHistoryManager.completeQueries( + this.queryInfo, + queriesWithResults, + ); progress(progressUpdate(3, 4, "Showing results")); await this.localQueries.showResultsForCompletedQuery( this.queryInfo as CompletedLocalQueryInfo, @@ -116,7 +121,7 @@ export class LocalQueryRun { */ public async fail(err: Error): Promise { const evalLogPaths = await this.summarizeEvalLog( - QueryResultType.OTHER_ERROR, + false, this.outputDir, this.logger, (_) => {}, @@ -136,7 +141,7 @@ export class LocalQueryRun { * Generate summaries of the structured evaluator log. */ private async summarizeEvalLog( - resultType: QueryResultType, + runSuccessful: boolean, outputDir: QueryOutputDir, logger: BaseLogger, progress: ProgressCallback, @@ -152,7 +157,7 @@ export class LocalQueryRun { } } else { // Raw evaluator log was not found. Notify the user, unless we know why it wasn't found. - if (resultType === QueryResultType.SUCCESS) { + if (runSuccessful) { void showAndLogWarningMessage( extLogger, `Failed to write structured evaluator log to ${outputDir.evalLogPath}.`, @@ -168,41 +173,43 @@ export class LocalQueryRun { } /** - * Gets a `QueryWithResults` containing information about the evaluation of the query and its + * Gets a `QueryWithResults` containing information about the evaluation of the queries and their * result, in the form expected by the query history UI. */ private async getCompletedQueryInfo( results: CoreQueryResults, - ): Promise { - // Read the query metadata if possible, to use in the UI. - const metadata = await tryGetQueryMetadata( - this.cliServer, - this.queryInfo.initialInfo.queryPath, - ); - const query = new QueryEvaluationInfo( - this.outputDir.querySaveDir, - this.dbItem.databaseUri.fsPath, - await this.dbItem.hasMetadataFile(), - this.queryInfo.initialInfo.quickEvalPosition, - metadata, - ); + ): Promise { + const infos: QueryWithResults[] = []; + for (const [queryPath, result] of results.results) { + // Read the query metadata if possible, to use in the UI. + const metadata = await tryGetQueryMetadata(this.cliServer, queryPath); + const query = new QueryEvaluationInfo( + this.outputDir.querySaveDir, + result.outputBaseName, + this.dbItem.databaseUri.fsPath, + await this.dbItem.hasMetadataFile(), + this.queryInfo.initialInfo.quickEvalPosition, + metadata, + ); - if (results.resultType !== QueryResultType.SUCCESS) { - const message = results.message - ? redactableError`Failed to run query: ${results.message}` - : redactableError`Failed to run query`; - void showAndLogExceptionWithTelemetry( - extLogger, - telemetryListener, + if (result.resultType !== QueryResultType.SUCCESS) { + const message = result.message + ? redactableError`Failed to run query: ${result.message}` + : redactableError`Failed to run query`; + void showAndLogExceptionWithTelemetry( + extLogger, + telemetryListener, + message, + ); + } + const message = formatResultMessage(result); + const successful = result.resultType === QueryResultType.SUCCESS; + infos.push({ + query, message, - ); + successful, + }); } - const message = formatResultMessage(results); - const successful = results.resultType === QueryResultType.SUCCESS; - return { - query, - message, - successful, - }; + return infos; } } diff --git a/extensions/ql-vscode/src/local-queries/query-contents.ts b/extensions/ql-vscode/src/local-queries/query-contents.ts index 762965f70eb..a7302026952 100644 --- a/extensions/ql-vscode/src/local-queries/query-contents.ts +++ b/extensions/ql-vscode/src/local-queries/query-contents.ts @@ -15,7 +15,7 @@ import { dbSchemeToLanguage } from "../common/query-language"; */ export function getInitialQueryContents(language: string, dbscheme: string) { if (!language) { - const dbschemeBase = basename(dbscheme) as keyof typeof dbSchemeToLanguage; + const dbschemeBase = basename(dbscheme); language = dbSchemeToLanguage[dbschemeBase]; } diff --git a/extensions/ql-vscode/src/local-queries/query-output-dir.ts b/extensions/ql-vscode/src/local-queries/query-output-dir.ts index a049849d54c..00be58078b7 100644 --- a/extensions/ql-vscode/src/local-queries/query-output-dir.ts +++ b/extensions/ql-vscode/src/local-queries/query-output-dir.ts @@ -30,10 +30,6 @@ function findQueryEvalLogEndSummaryFile(resultPath: string): string { export class QueryOutputDir { constructor(public readonly querySaveDir: string) {} - get dilPath() { - return join(this.querySaveDir, "results.dil"); - } - /** * Get the path that the compiled query is if it exists. Note that it only exists when using the legacy query server. */ @@ -41,10 +37,6 @@ export class QueryOutputDir { return join(this.querySaveDir, "compiledQuery.qlo"); } - get csvPath() { - return join(this.querySaveDir, "results.csv"); - } - get logPath() { return findQueryLogFile(this.querySaveDir); } @@ -69,7 +61,25 @@ export class QueryOutputDir { return findQueryEvalLogEndSummaryFile(this.querySaveDir); } - get bqrsPath() { - return join(this.querySaveDir, "results.bqrs"); + getBqrsPath(outputBaseName: string): string { + return join(this.querySaveDir, `${outputBaseName}.bqrs`); + } + + getInterpretedResultsPath( + metadataKind: string | undefined, + outputBaseName: string, + ): string { + return join( + this.querySaveDir, + `${outputBaseName}-${metadataKind === "graph" ? "graph" : `interpreted.sarif`}`, + ); + } + + getCsvPath(outputBaseName: string): string { + return join(this.querySaveDir, `${outputBaseName}.csv`); + } + + getDilPath(outputBaseName: string): string { + return join(this.querySaveDir, `${outputBaseName}.dil`); } } diff --git a/extensions/ql-vscode/src/local-queries/results-view.ts b/extensions/ql-vscode/src/local-queries/results-view.ts index 18ee93f8543..55480c344f8 100644 --- a/extensions/ql-vscode/src/local-queries/results-view.ts +++ b/extensions/ql-vscode/src/local-queries/results-view.ts @@ -75,6 +75,7 @@ import type { App } from "../common/app"; import type { Disposable } from "../common/disposable-object"; import type { RawResultSet } from "../common/raw-result-types"; import type { BqrsResultSetSchema } from "../common/bqrs-cli-types"; +import { CachedOperation } from "../language-support/contextual/cached-operation"; /** * results-view.ts @@ -177,6 +178,8 @@ export class ResultsView extends AbstractWebview< // Event listeners that should be disposed of when the view is disposed. private disposableEventListeners: Disposable[] = []; + private schemaCache: CachedOperation<[], BqrsResultSetSchema[]>; + constructor( app: App, private databaseManager: DatabaseManager, @@ -206,6 +209,10 @@ export class ResultsView extends AbstractWebview< } }), ); + + this.schemaCache = new CachedOperation( + this.getResultSetSchemasImpl.bind(this), + ); } public getCommands(): ResultsViewCommands { @@ -420,6 +427,7 @@ export class ResultsView extends AbstractWebview< ); return; } + this.schemaCache.reset(); // Notify the webview that it should expect new results. await this.postMessage({ t: "resultsUpdating" }); await this._displayedQuery.completedQuery.updateSortState( @@ -548,10 +556,14 @@ export class ResultsView extends AbstractWebview< await this.postMessage({ t: "setState", interpretation: interpretationPage, - origResultsPaths: fullQuery.completedQuery.query.resultsPaths, + origResultsPaths: { + resultsPath: fullQuery.completedQuery.query.resultsPath, + interpretedResultsPath: + fullQuery.completedQuery.query.interpretedResultsPath, + }, resultsPath: this.convertPathToWebviewUri( panel, - fullQuery.completedQuery.query.resultsPaths.resultsPath, + fullQuery.completedQuery.query.resultsPath, ), parsedResultSets, sortedResultsMap, @@ -610,6 +622,12 @@ export class ResultsView extends AbstractWebview< selectedTable = "", ): Promise { const resultsPath = completedQuery.getResultsPath(selectedTable); + return this.schemaCache.get(resultsPath); + } + + private async getResultSetSchemasImpl( + resultsPath: string, + ): Promise { const schemas = await this.cliServer.bqrsInfo( resultsPath, PAGE_SIZE.getValue(), @@ -690,10 +708,14 @@ export class ResultsView extends AbstractWebview< await this.postMessage({ t: "setState", interpretation: this._interpretation, - origResultsPaths: results.completedQuery.query.resultsPaths, + origResultsPaths: { + resultsPath: results.completedQuery.query.resultsPath, + interpretedResultsPath: + results.completedQuery.query.interpretedResultsPath, + }, resultsPath: this.convertPathToWebviewUri( panel, - results.completedQuery.query.resultsPaths.resultsPath, + results.completedQuery.query.resultsPath, ), parsedResultSets, sortedResultsMap, @@ -828,7 +850,10 @@ export class ResultsView extends AbstractWebview< }; await this._getInterpretedResults( query.metadata, - query.resultsPaths, + { + resultsPath: query.resultsPath, + interpretedResultsPath: query.interpretedResultsPath, + }, sourceInfo, sourceLocationPrefix, sortState, @@ -930,7 +955,9 @@ export class ResultsView extends AbstractWebview< } const resultLocation = tryResolveLocation(sarifLoc, databaseItem); if (!resultLocation) { - void this.logger.log(`Sarif location was not resolvable ${sarifLoc}`); + void this.logger.log( + `Sarif location was not resolvable: ${sarifLoc.uri.toString()}`, + ); continue; } const parsedMessage = parseSarifPlainTextMessage(message); diff --git a/extensions/ql-vscode/src/local-queries/run-query.ts b/extensions/ql-vscode/src/local-queries/run-query.ts index 1f06c656b56..06ed7037280 100644 --- a/extensions/ql-vscode/src/local-queries/run-query.ts +++ b/extensions/ql-vscode/src/local-queries/run-query.ts @@ -33,17 +33,20 @@ export async function runQuery({ // Create a query run to execute const queryRun = queryRunner.createQueryRun( databaseItem.databaseUri.fsPath, - { - queryPath, - quickEvalPosition: undefined, - quickEvalCountOnly: false, - }, + [ + { + queryPath, + outputBaseName: "results", + quickEvalPosition: undefined, + quickEvalCountOnly: false, + }, + ], false, additionalPacks, extensionPacks, {}, queryStorageDir, - undefined, + basename(queryPath), undefined, ); @@ -54,13 +57,14 @@ export async function runQuery({ try { const completedQuery = await queryRun.evaluate(progress, token, teeLogger); + const result = completedQuery.results.get(queryPath); - if (completedQuery.resultType !== QueryResultType.SUCCESS) { + if (result?.resultType !== QueryResultType.SUCCESS) { void showAndLogExceptionWithTelemetry( extLogger, telemetryListener, redactableError`Failed to run ${basename(queryPath)} query: ${ - completedQuery.message ?? "No message" + result?.message ?? "No message" }`, ); return; diff --git a/extensions/ql-vscode/src/local-queries/skeleton-query-wizard.ts b/extensions/ql-vscode/src/local-queries/skeleton-query-wizard.ts index 8d9390eab96..f99eb8d2fda 100644 --- a/extensions/ql-vscode/src/local-queries/skeleton-query-wizard.ts +++ b/extensions/ql-vscode/src/local-queries/skeleton-query-wizard.ts @@ -38,6 +38,7 @@ import { getQlPackLanguage } from "../common/qlpack-language"; type QueryLanguagesToDatabaseMap = Record; export const QUERY_LANGUAGE_TO_DATABASE_REPO: QueryLanguagesToDatabaseMap = { + actions: "github/codeql", cpp: "google/brotli", csharp: "restsharp/RestSharp", go: "spf13/cobra", @@ -45,6 +46,7 @@ export const QUERY_LANGUAGE_TO_DATABASE_REPO: QueryLanguagesToDatabaseMap = { javascript: "d3/d3", python: "pallets/flask", ruby: "jekyll/jekyll", + rust: "sharkdp/bat", swift: "Alamofire/Alamofire", }; @@ -130,7 +132,7 @@ export class SkeletonQueryWizard { // open the query file try { await this.openExampleFile(); - } catch (e: unknown) { + } catch (e) { void this.app.logger.log( `Could not open example query file: ${getErrorMessage(e)}`, ); @@ -277,7 +279,7 @@ export class SkeletonQueryWizard { const qlPackGenerator = this.createQlPackGenerator(); await qlPackGenerator.generate(); - } catch (e: unknown) { + } catch (e) { void this.app.logger.log( `Could not create skeleton QL pack: ${getErrorMessage(e)}`, ); @@ -297,7 +299,7 @@ export class SkeletonQueryWizard { this.fileName = await this.determineNextFileName(); await qlPackGenerator.createExampleQlFile(this.fileName); - } catch (e: unknown) { + } catch (e) { void this.app.logger.log( `Could not create query example file: ${getErrorMessage(e)}`, ); @@ -340,7 +342,7 @@ export class SkeletonQueryWizard { void withProgress(async (progress) => { try { await this.downloadDatabase(progress); - } catch (e: unknown) { + } catch (e) { if (e instanceof UserCancellationException) { return; } diff --git a/extensions/ql-vscode/src/log-insights/join-order.ts b/extensions/ql-vscode/src/log-insights/join-order.ts index 788da0a98e6..4bf85c89402 100644 --- a/extensions/ql-vscode/src/log-insights/join-order.ts +++ b/extensions/ql-vscode/src/log-insights/join-order.ts @@ -1,8 +1,5 @@ -import type { - EvaluationLogProblemReporter, - EvaluationLogScanner, - EvaluationLogScannerProvider, -} from "./log-scanner"; +import { readJsonlFile } from "../common/jsonl-reader"; +import type { EvaluationLogProblemReporter } from "./log-scanner"; import type { InLayer, ComputeRecursive, @@ -19,23 +16,6 @@ function safeMax(it?: Iterable) { return Number.isFinite(m) ? m : 0; } -/** - * Compute a key for the maps that that is sent to report generation. - * Should only be used on events that are known to define queryCausingWork. - */ -function makeKey( - queryCausingWork: string | undefined, - predicate: string, - suffix = "", -): string { - if (queryCausingWork === undefined) { - throw new Error( - "queryCausingWork was not defined on an event we expected it to be defined for!", - ); - } - return `${queryCausingWork}:${predicate}${suffix ? ` ${suffix}` : ""}`; -} - function getDependentPredicates(operations: string[]): string[] { const id = String.raw`[0-9a-zA-Z:#_\./]+`; const idWithAngleBrackets = String.raw`[0-9a-zA-Z:#_<>\./]+`; @@ -128,14 +108,6 @@ function pointwiseSum( return result; } -function pushValue(m: Map, k: K, v: V) { - if (!m.has(k)) { - m.set(k, []); - } - m.get(k)!.push(v); - return m; -} - function computeJoinOrderBadness( maxTupleCount: number, maxDependentPredicateSize: number, @@ -154,41 +126,18 @@ interface Bucket { dependentPredicateSizes: Map; } -class JoinOrderScanner implements EvaluationLogScanner { +class PredicateSizeScanner { // Map a predicate hash to its result size - private readonly predicateSizes = new Map(); - private readonly layerEvents = new Map< - string, - Array - >(); - // Map a key of the form 'query-with-demand : predicate name' to its badness input. - private readonly maxTupleCountMap = new Map(); - private readonly resultSizeMap = new Map(); - private readonly maxDependentPredicateSizeMap = new Map(); - private readonly joinOrderMetricMap = new Map(); - - constructor( - private readonly problemReporter: EvaluationLogProblemReporter, - private readonly warningThreshold: number, - ) {} + readonly predicateSizes = new Map(); + readonly layerEvents = new Map>(); - public onEvent(event: SummaryEvent): void { + onEvent(event: SummaryEvent): void { if ( event.completionType !== undefined && event.completionType !== "SUCCESS" ) { return; // Skip any evaluation that wasn't successful } - - this.recordPredicateSizes(event); - this.computeBadnessMetric(event); - } - - public onDone(): void { - void this; - } - - private recordPredicateSizes(event: SummaryEvent): void { switch (event.evaluationStrategy) { case "EXTENSIONAL": case "COMPUTED_EXTENSIONAL": @@ -215,29 +164,20 @@ class JoinOrderScanner implements EvaluationLogScanner { } } } +} - private reportProblemIfNecessary( - event: SummaryEvent, - iteration: number, - metric: number, - ): void { - if (metric >= this.warningThreshold) { - this.problemReporter.reportProblem( - event.predicateName, - event.raHash, - iteration, - `Relation '${ - event.predicateName - }' has an inefficient join order. Its join order metric is ${metric.toFixed( - 2, - )}, which is larger than the threshold of ${this.warningThreshold.toFixed( - 2, - )}.`, - ); - } - } +class JoinOrderScanner { + constructor( + private readonly predicateSizes: Map, + private readonly layerEvents: Map< + string, + Array + >, + private readonly problemReporter: EvaluationLogProblemReporter, + private readonly warningThreshold: number, + ) {} - private computeBadnessMetric(event: SummaryEvent): void { + public onEvent(event: SummaryEvent): void { if ( event.completionType !== undefined && event.completionType !== "SUCCESS" @@ -252,7 +192,6 @@ class JoinOrderScanner implements EvaluationLogScanner { } // Compute the badness metric for a non-recursive predicate. The metric in this case is defined as: // badness = (max tuple count in the pipeline) / (largest predicate this pipeline depends on) - const key = makeKey(event.queryCausingWork, event.predicateName); const resultSize = event.resultSize; // There is only one entry in `pipelineRuns` if it's a non-recursive predicate. @@ -260,20 +199,26 @@ class JoinOrderScanner implements EvaluationLogScanner { this.badnessInputsForNonRecursiveDelta(event.pipelineRuns[0], event); if (maxDependentPredicateSize > 0) { - pushValue(this.maxTupleCountMap, key, maxTupleCount); - pushValue(this.resultSizeMap, key, resultSize); - pushValue( - this.maxDependentPredicateSizeMap, - key, - maxDependentPredicateSize, - ); const metric = computeJoinOrderBadness( maxTupleCount, maxDependentPredicateSize, - resultSize!, + resultSize, ); - this.joinOrderMetricMap.set(key, metric); - this.reportProblemIfNecessary(event, 0, metric); + if (metric >= this.warningThreshold) { + const message = `'${event.predicateName}@${event.raHash.substring( + 0, + 8, + )}' has an inefficient join order. Its join order metric is ${metric.toFixed( + 2, + )}, which is larger than the threshold of ${this.warningThreshold.toFixed( + 2, + )}.`; + this.problemReporter.reportProblemNonRecursive( + event.predicateName, + event.raHash, + message, + ); + } } break; } @@ -282,39 +227,40 @@ class JoinOrderScanner implements EvaluationLogScanner { // Compute the badness metric for a recursive predicate for each ordering. const sccMetricInput = this.badnessInputsForRecursiveDelta(event); // Loop through each predicate in the SCC - sccMetricInput.forEach((buckets, predicate) => { - // Loop through each ordering of the predicate - buckets.forEach((bucket, raReference) => { - // Format the key as demanding-query:name (ordering) - const key = makeKey( - event.queryCausingWork, - predicate, - `(${raReference})`, - ); - const maxTupleCount = Math.max(...bucket.tupleCounts); - const resultSize = bucket.resultSize; - const maxDependentPredicateSize = Math.max( - ...bucket.dependentPredicateSizes.values(), - ); - - if (maxDependentPredicateSize > 0) { - pushValue(this.maxTupleCountMap, key, maxTupleCount); - pushValue(this.resultSizeMap, key, resultSize); - pushValue( - this.maxDependentPredicateSizeMap, - key, - maxDependentPredicateSize, - ); - const metric = computeJoinOrderBadness( - maxTupleCount, - maxDependentPredicateSize, - resultSize, + sccMetricInput.forEach((hashToOrderToBucket, predicateName) => { + hashToOrderToBucket.forEach((orderToBucket, raHash) => { + // Loop through each ordering of the predicate. + orderToBucket.forEach((bucket, raReference) => { + const maxDependentPredicateSize = Math.max( + ...bucket.dependentPredicateSizes.values(), ); - const oldMetric = this.joinOrderMetricMap.get(key); - if (oldMetric === undefined || metric > oldMetric) { - this.joinOrderMetricMap.set(key, metric); + + if (maxDependentPredicateSize > 0) { + const maxTupleCount = Math.max(...bucket.tupleCounts); + const resultSize = bucket.resultSize; + const metric = computeJoinOrderBadness( + maxTupleCount, + maxDependentPredicateSize, + resultSize, + ); + if (metric >= this.warningThreshold) { + const message = `The ${raReference} pipeline for '${predicateName}@${raHash.substring( + 0, + 8, + )}' has an inefficient join order. Its join order metric is ${metric.toFixed( + 2, + )}, which is larger than the threshold of ${this.warningThreshold.toFixed( + 2, + )}.`; + this.problemReporter.reportProblemForRecursionSummary( + predicateName, + raHash, + raReference, + message, + ); + } } - } + }); }); }); break; @@ -457,20 +403,28 @@ class JoinOrderScanner implements EvaluationLogScanner { */ private badnessInputsForRecursiveDelta( event: ComputeRecursive, - ): Map> { - // nameToOrderToBucket : predicate name -> ordering (i.e., standard, order_500000, etc.) -> bucket - const nameToOrderToBucket = new Map>(); + ): Map>> { + // nameToHashToOrderToBucket : predicate name -> RA hash -> ordering (i.e., standard, order_500000, etc.) -> bucket + const nameToHashToOrderToBucket = new Map< + string, + Map> + >(); // Iterate through the SCC and compute the metric inputs this.iterateSCC(event, (inLayerEvent, run, iteration) => { const raReference = run.raReference; const predicateName = inLayerEvent.predicateName; - if (!nameToOrderToBucket.has(predicateName)) { - nameToOrderToBucket.set(predicateName, new Map()); + if (!nameToHashToOrderToBucket.has(predicateName)) { + nameToHashToOrderToBucket.set(predicateName, new Map()); } - const orderTobucket = nameToOrderToBucket.get(predicateName)!; - if (!orderTobucket.has(raReference)) { - orderTobucket.set(raReference, { + const hashToOrderToBucket = nameToHashToOrderToBucket.get(predicateName)!; + const raHash = inLayerEvent.raHash; + if (!hashToOrderToBucket.has(raHash)) { + hashToOrderToBucket.set(raHash, new Map()); + } + const orderToBucket = hashToOrderToBucket.get(raHash)!; + if (!orderToBucket.has(raReference)) { + orderToBucket.set(raReference, { tupleCounts: new Int32Array(0), resultSize: 0, dependentPredicateSizes: new Map(), @@ -484,7 +438,7 @@ class JoinOrderScanner implements EvaluationLogScanner { iteration, ); - const bucket = orderTobucket.get(raReference)!; + const bucket = orderToBucket.get(raReference)!; // Pointwise sum the tuple counts const newTupleCounts = pointwiseSum( bucket.tupleCounts, @@ -504,23 +458,36 @@ class JoinOrderScanner implements EvaluationLogScanner { ); } - orderTobucket.set(raReference, { + orderToBucket.set(raReference, { tupleCounts: newTupleCounts, resultSize, dependentPredicateSizes: newDependentPredicateSizes, }); }); - return nameToOrderToBucket; + return nameToHashToOrderToBucket; } } -export class JoinOrderScannerProvider implements EvaluationLogScannerProvider { - constructor(private readonly getThreshdold: () => number) {} +export async function scanAndReportJoinOrderProblems( + jsonSummaryLocation: string, + problemReporter: EvaluationLogProblemReporter, + warningThreshold: number, +) { + // Do two passes over the summary JSON. The first pass collects the sizes of predicates, along + // with collecting layer events for each recursive SCC. + const predicateSizeScanner = new PredicateSizeScanner(); + await readJsonlFile(jsonSummaryLocation, async (obj) => { + predicateSizeScanner.onEvent(obj); + }); - public createScanner( - problemReporter: EvaluationLogProblemReporter, - ): EvaluationLogScanner { - const threshold = this.getThreshdold(); - return new JoinOrderScanner(problemReporter, threshold); - } + // The second pass takes the information from the first pass, computes join order scores, and reports those that exceed the threshold. + const joinOrderScanner = new JoinOrderScanner( + predicateSizeScanner.predicateSizes, + predicateSizeScanner.layerEvents, + problemReporter, + warningThreshold, + ); + await readJsonlFile(jsonSummaryLocation, async (obj) => { + joinOrderScanner.onEvent(obj); + }); } diff --git a/extensions/ql-vscode/src/log-insights/log-scanner-service.ts b/extensions/ql-vscode/src/log-insights/log-scanner-service.ts index d2fe1311907..e8e79d60bc5 100644 --- a/extensions/ql-vscode/src/log-insights/log-scanner-service.ts +++ b/extensions/ql-vscode/src/log-insights/log-scanner-service.ts @@ -2,11 +2,12 @@ import { Diagnostic, DiagnosticSeverity, languages, Range, Uri } from "vscode"; import { DisposableObject } from "../common/disposable-object"; import type { QueryHistoryInfo } from "../query-history/query-history-info"; import type { EvaluationLogProblemReporter } from "./log-scanner"; -import { EvaluationLogScannerSet } from "./log-scanner"; import type { PipelineInfo, SummarySymbols } from "./summary-parser"; import { readFile } from "fs-extra"; import { extLogger } from "../common/logging/vscode"; import type { QueryHistoryManager } from "../query-history/query-history-manager"; +import { scanAndReportJoinOrderProblems } from "./join-order"; +import { joinOrderWarningThreshold } from "../config"; /** * Compute the key used to find a predicate in the summary symbols. @@ -28,17 +29,41 @@ class ProblemReporter implements EvaluationLogProblemReporter { constructor(private readonly symbols: SummarySymbols | undefined) {} - public reportProblem( + public reportProblemNonRecursive( predicateName: string, raHash: string, - iteration: number, message: string, ): void { const nameWithHash = predicateSymbolKey(predicateName, raHash); const predicateSymbol = this.symbols?.predicates[nameWithHash]; let predicateInfo: PipelineInfo | undefined = undefined; if (predicateSymbol !== undefined) { - predicateInfo = predicateSymbol.iterations[iteration]; + predicateInfo = predicateSymbol.iterations[0]; + } + if (predicateInfo !== undefined) { + const range = new Range( + predicateInfo.raStartLine, + 0, + predicateInfo.raEndLine + 1, + 0, + ); + this.diagnostics.push( + new Diagnostic(range, message, DiagnosticSeverity.Error), + ); + } + } + + public reportProblemForRecursionSummary( + predicateName: string, + raHash: string, + order: string, + message: string, + ): void { + const nameWithHash = predicateSymbolKey(predicateName, raHash); + const predicateSymbol = this.symbols?.predicates[nameWithHash]; + let predicateInfo: PipelineInfo | undefined = undefined; + if (predicateSymbol !== undefined) { + predicateInfo = predicateSymbol.recursionSummaries[order]; } if (predicateInfo !== undefined) { const range = new Range( @@ -59,7 +84,6 @@ class ProblemReporter implements EvaluationLogProblemReporter { } export class LogScannerService extends DisposableObject { - public readonly scanners = new EvaluationLogScannerSet(); private readonly diagnosticCollection = this.push( languages.createDiagnosticCollection("ql-eval-log"), ); @@ -94,19 +118,19 @@ export class LogScannerService extends DisposableObject { public async scanEvalLog(query: QueryHistoryInfo | undefined): Promise { this.diagnosticCollection.clear(); - if ( - query?.t !== "local" || - query.evalLogSummaryLocation === undefined || - query.jsonEvalLogSummaryLocation === undefined - ) { + if (query?.t !== "local" || query.evaluatorLogPaths === undefined) { return; } - const diagnostics = await this.scanLog( - query.jsonEvalLogSummaryLocation, - query.evalLogSummarySymbolsLocation, - ); - const uri = Uri.file(query.evalLogSummaryLocation); + const { summarySymbols, jsonSummary, humanReadableSummary } = + query.evaluatorLogPaths; + + if (jsonSummary === undefined || humanReadableSummary === undefined) { + return; + } + + const diagnostics = await this.scanLog(jsonSummary, summarySymbols); + const uri = Uri.file(humanReadableSummary); this.diagnosticCollection.set(uri, diagnostics); } @@ -127,9 +151,11 @@ export class LogScannerService extends DisposableObject { ); } const problemReporter = new ProblemReporter(symbols); - - await this.scanners.scanLog(jsonSummaryLocation, problemReporter); - + await scanAndReportJoinOrderProblems( + jsonSummaryLocation, + problemReporter, + joinOrderWarningThreshold(), + ); return problemReporter.diagnostics; } } diff --git a/extensions/ql-vscode/src/log-insights/log-scanner.ts b/extensions/ql-vscode/src/log-insights/log-scanner.ts index 7a8efcd5605..22a9a5cdf78 100644 --- a/extensions/ql-vscode/src/log-insights/log-scanner.ts +++ b/extensions/ql-vscode/src/log-insights/log-scanner.ts @@ -1,114 +1,38 @@ -import type { SummaryEvent } from "./log-summary"; -import { readJsonlFile } from "../common/jsonl-reader"; -import type { Disposable } from "../common/disposable-object"; - /** * Callback interface used to report diagnostics from a log scanner. */ export interface EvaluationLogProblemReporter { /** - * Report a potential problem detected in the evaluation log. + * Report a potential problem detected in the evaluation log for a non-recursive predicate. * * @param predicateName The mangled name of the predicate with the problem. * @param raHash The RA hash of the predicate with the problem. - * @param iteration The iteration number with the problem. For a non-recursive predicate, this - * must be zero. * @param message The problem message. */ - reportProblem( + reportProblemNonRecursive( predicateName: string, raHash: string, - iteration: number, message: string, ): void; /** - * Log a message about a problem in the implementation of the scanner. These will typically be - * displayed separate from any problems reported via `reportProblem()`. - */ - log(message: string): void; -} - -/** - * Interface implemented by a log scanner. Instances are created via - * `EvaluationLogScannerProvider.createScanner()`. - */ -export interface EvaluationLogScanner { - /** - * Called for each event in the log summary, in order. The implementation can report problems via - * the `EvaluationLogProblemReporter` interface that was supplied to `createScanner()`. - * @param event The log summary event. - */ - onEvent(event: SummaryEvent): void; - /** - * Called after all events in the log summary have been processed. The implementation can report - * problems via the `EvaluationLogProblemReporter` interface that was supplied to - * `createScanner()`. - */ - onDone(): void; -} - -/** - * A factory for log scanners. When a log is to be scanned, all registered - * `EvaluationLogScannerProviders` will be asked to create a new instance of `EvaluationLogScanner` - * to do the scanning. - */ -export interface EvaluationLogScannerProvider { - /** - * Create a new instance of `EvaluationLogScanner` to scan a single summary log. - * @param problemReporter Callback interface for reporting any problems discovered. - */ - createScanner( - problemReporter: EvaluationLogProblemReporter, - ): EvaluationLogScanner; -} - -export class EvaluationLogScannerSet { - private readonly scannerProviders = new Map< - number, - EvaluationLogScannerProvider - >(); - private nextScannerProviderId = 0; - - /** - * Register a provider that can create instances of `EvaluationLogScanner` to scan evaluation logs - * for problems. - * @param provider The provider. - * @returns A `Disposable` that, when disposed, will unregister the provider. + * Report a potential problem detected in the evaluation log for the summary of a recursive pipeline. + * + * @param predicateName The mangled name of the predicate with the problem. + * @param raHash The RA hash of the predicate with the problem. + * @param order The particular order (pipeline name) that had the problem. + * @param message The problem message. */ - public registerLogScannerProvider( - provider: EvaluationLogScannerProvider, - ): Disposable { - const id = this.nextScannerProviderId; - this.nextScannerProviderId++; - - this.scannerProviders.set(id, provider); - return { - dispose: () => { - this.scannerProviders.delete(id); - }, - }; - } + reportProblemForRecursionSummary( + predicateName: string, + raHash: string, + order: string, + message: string, + ): void; /** - * Scan the evaluator summary log for problems, using the scanners for all registered providers. - * @param jsonSummaryLocation The file path of the JSON summary log. - * @param problemReporter Callback interface for reporting any problems discovered. + * Log a message about a problem in the implementation of the scanner. These will typically be + * displayed separate from any problems reported via `reportProblem()`. */ - public async scanLog( - jsonSummaryLocation: string, - problemReporter: EvaluationLogProblemReporter, - ): Promise { - const scanners = [...this.scannerProviders.values()].map((p) => - p.createScanner(problemReporter), - ); - - await readJsonlFile(jsonSummaryLocation, async (obj) => { - scanners.forEach((scanner) => { - scanner.onEvent(obj); - }); - }); - - scanners.forEach((scanner) => scanner.onDone()); - } + log(message: string): void; } diff --git a/extensions/ql-vscode/src/log-insights/log-summary.ts b/extensions/ql-vscode/src/log-insights/log-summary.ts index 50435d51e1e..6919210f98c 100644 --- a/extensions/ql-vscode/src/log-insights/log-summary.ts +++ b/extensions/ql-vscode/src/log-insights/log-summary.ts @@ -16,7 +16,8 @@ type EvaluationStrategy = | "EXTENSIONAL" | "SENTINEL_EMPTY" | "CACHACA" - | "CACHE_HIT"; + | "CACHE_HIT" + | "NAMED_LOCAL"; interface SummaryEventBase { evaluationStrategy: EvaluationStrategy; @@ -28,11 +29,14 @@ interface SummaryEventBase { interface ResultEventBase extends SummaryEventBase { resultSize: number; + dependencies?: { [key: string]: string }; + mainHash?: string; } export interface ComputeSimple extends ResultEventBase { evaluationStrategy: "COMPUTE_SIMPLE"; ra: Ra; + millis: number; pipelineRuns?: [PipelineRun]; queryCausingWork?: string; dependencies: { [key: string]: string }; @@ -42,6 +46,7 @@ export interface ComputeRecursive extends ResultEventBase { evaluationStrategy: "COMPUTE_RECURSIVE"; deltaSizes: number[]; ra: Ra; + millis: number; pipelineRuns: PipelineRun[]; queryCausingWork?: string; dependencies: { [key: string]: string }; @@ -58,6 +63,15 @@ export interface InLayer extends ResultEventBase { predicateIterationMillis: number[]; } +interface NamedLocal extends ResultEventBase { + evaluationStrategy: "NAMED_LOCAL"; + deltaSizes: number[]; + ra: Ra; + pipelineRuns: PipelineRun[]; + queryCausingWork?: string; + predicateIterationMillis: number[]; +} + interface ComputedExtensional extends ResultEventBase { evaluationStrategy: "COMPUTED_EXTENSIONAL"; queryCausingWork?: string; @@ -90,4 +104,5 @@ export type SummaryEvent = | Extensional | SentinelEmpty | Cachaca - | CacheHit; + | CacheHit + | NamedLocal; diff --git a/extensions/ql-vscode/src/log-insights/performance-comparison.ts b/extensions/ql-vscode/src/log-insights/performance-comparison.ts new file mode 100644 index 00000000000..7dfb516b9c3 --- /dev/null +++ b/extensions/ql-vscode/src/log-insights/performance-comparison.ts @@ -0,0 +1,242 @@ +import { createHash } from "crypto"; +import type { SummaryEvent } from "./log-summary"; + +export interface PipelineSummary { + steps: string[]; + /** Total counts for each step in the RA array, across all iterations */ + counts: number[]; + hash: string; +} + +/** + * Data extracted from a log for the purpose of doing a performance comparison. + * + * Memory compactness is important since we keep this data in memory; once for + * each side of the comparison. + * + * This object must be able to survive a `postMessage` transfer from the extension host + * to a web view (which rules out `Map` values, for example). + */ +export interface PerformanceComparisonDataFromLog { + /** + * Names of predicates mentioned in the log. + * + * For compactness, details of these predicates are stored in a "struct of arrays" style. + * + * All fields (except those ending with `Indices`) should contain an array of the same length as `names`; + * details of a given predicate should be stored at the same index in each of those arrays. + */ + names: string[]; + + /** RA hash of the `i`th predicate event */ + raHashes: string[]; + + /** Number of milliseconds spent evaluating the `i`th predicate from the `names` array. */ + timeCosts: number[]; + + /** Number of tuples seen in pipelines evaluating the `i`th predicate from the `names` array. */ + tupleCosts: number[]; + + /** Number of iterations seen when evaluating the `i`th predicate from the `names` array. */ + iterationCounts: number[]; + + /** Number of executions of pipelines evaluating the `i`th predicate from the `names` array. */ + evaluationCounts: number[]; + + /** + * List of indices into the `names` array for which we have seen a cache hit. + */ + cacheHitIndices: number[]; + + /** + * List of indices into the `names` array where the predicate was deemed empty due to a sentinel check. + */ + sentinelEmptyIndices: number[]; + + /** + * All the pipeline runs seen for the `i`th predicate from the `names` array. + */ + pipelineSummaryList: Array>; + + /** All dependencies of the `i`th predicate from the `names` array, encoded as a list of indices in `names`. */ + dependencyLists: number[][]; +} + +export class PerformanceOverviewScanner { + private readonly data: PerformanceComparisonDataFromLog = { + names: [], + raHashes: [], + timeCosts: [], + tupleCosts: [], + cacheHitIndices: [], + sentinelEmptyIndices: [], + pipelineSummaryList: [], + evaluationCounts: [], + iterationCounts: [], + dependencyLists: [], + }; + private readonly raToIndex = new Map(); + private readonly mainHashToRepr = new Map(); + private readonly nameToIndex = new Map(); + + private getPredicateIndex(name: string, ra: string): number { + let index = this.raToIndex.get(ra); + if (index === undefined) { + index = this.raToIndex.size; + this.raToIndex.set(ra, index); + const { + names, + raHashes, + timeCosts, + tupleCosts, + iterationCounts, + evaluationCounts, + pipelineSummaryList, + dependencyLists, + } = this.data; + names.push(name); + raHashes.push(ra); + timeCosts.push(0); + tupleCosts.push(0); + iterationCounts.push(0); + evaluationCounts.push(0); + pipelineSummaryList.push({}); + dependencyLists.push([]); + } + return index; + } + + getData(): PerformanceComparisonDataFromLog { + return this.data; + } + + onEvent(event: SummaryEvent): void { + const { completionType, evaluationStrategy, predicateName, raHash } = event; + if (completionType !== undefined && completionType !== "SUCCESS") { + return; // Skip any evaluation that wasn't successful + } + + switch (evaluationStrategy) { + case "EXTENSIONAL": { + break; + } + case "COMPUTED_EXTENSIONAL": { + if (predicateName.startsWith("cached_")) { + // Add a dependency from a cached COMPUTED_EXTENSIONAL to the predicate with the actual contents. + // The raHash of the this event may appear in a CACHE_HIT event in the other event log. The dependency + // we're adding here is needed in order to associate the original predicate with such a cache hit. + const originalName = predicateName.substring("cached_".length); + const originalIndex = this.nameToIndex.get(originalName); + if (originalIndex != null) { + const index = this.getPredicateIndex(predicateName, raHash); + this.data.dependencyLists[index].push(originalIndex); + } + } + break; + } + case "CACHE_HIT": + case "CACHACA": { + // Record a cache hit, but only if the predicate has not been seen before. + // We're mainly interested in the reuse of caches from an earlier query run as they can distort comparisons. + if (!this.raToIndex.has(raHash)) { + this.data.cacheHitIndices.push( + this.getPredicateIndex(predicateName, raHash), + ); + } + break; + } + case "SENTINEL_EMPTY": { + const index = this.getPredicateIndex(predicateName, raHash); + this.data.sentinelEmptyIndices.push(index); + const sentinelIndex = this.raToIndex.get(event.sentinelRaHash); + if (sentinelIndex != null) { + this.data.dependencyLists[index].push(sentinelIndex); // needed for matching up cache hits + } + break; + } + case "COMPUTE_RECURSIVE": + case "COMPUTE_SIMPLE": + case "NAMED_LOCAL": + case "IN_LAYER": { + const index = this.getPredicateIndex(predicateName, raHash); + this.nameToIndex.set(predicateName, index); + let totalTime = 0; + let totalTuples = 0; + if (evaluationStrategy === "COMPUTE_SIMPLE") { + totalTime += event.millis; + } else { + // Make a best-effort estimate of the total time by adding up the positive iteration times (they can be negative). + // Note that for COMPUTE_RECURSIVE the "millis" field contain the total time of the SCC, not just that predicate, + // but we don't have a good way to show that in the UI, so we rely on the accumulated iteration times. + for (const millis of event.predicateIterationMillis ?? []) { + if (millis > 0) { + totalTime += millis; + } + } + } + const { + timeCosts, + tupleCosts, + iterationCounts, + evaluationCounts, + pipelineSummaryList, + dependencyLists, + } = this.data; + const pipelineSummaries = pipelineSummaryList[index]; + const dependencyList = dependencyLists[index]; + for (const { counts, raReference } of event.pipelineRuns ?? []) { + // Get or create the pipeline summary for this RA + const pipelineSummary = (pipelineSummaries[raReference] ??= { + steps: event.ra[raReference], + counts: counts.map(() => 0), + hash: getPipelineHash(event.ra[raReference]), + }); + const { counts: totalTuplesPerStep } = pipelineSummary; + for (let i = 0, length = counts.length; i < length; ++i) { + const count = counts[i]; + if (count < 0) { + // Empty RA lines have a tuple count of -1. Do not count them when aggregating. + // But retain the fact that this step had a negative count for rendering purposes. + totalTuplesPerStep[i] = count; + continue; + } + totalTuples += count; + totalTuplesPerStep[i] += count; + } + } + for (const dependencyHash of Object.values(event.dependencies ?? {})) { + const dependencyIndex = this.raToIndex.get(dependencyHash); + if (dependencyIndex != null) { + dependencyList.push(dependencyIndex); + } + } + // For predicates in the same SCC, add two-way dependencies with an arbitrary SCC member + const sccHash = + event.mainHash ?? + (evaluationStrategy === "COMPUTE_RECURSIVE" ? raHash : null); + if (sccHash != null) { + const mainIndex = this.mainHashToRepr.get(sccHash); + if (mainIndex == null) { + this.mainHashToRepr.set(sccHash, index); + } else { + dependencyLists[index].push(mainIndex); + dependencyLists[mainIndex].push(index); + } + } + timeCosts[index] += totalTime; + tupleCosts[index] += totalTuples; + iterationCounts[index] += event.pipelineRuns?.length ?? 0; + evaluationCounts[index] += 1; + break; + } + } + } +} + +function getPipelineHash(steps: string[]) { + const md5 = createHash("md5"); + for (const step of steps) { + md5.write(step); + } + return md5.digest("base64"); +} diff --git a/extensions/ql-vscode/src/log-insights/summary-language-support.ts b/extensions/ql-vscode/src/log-insights/summary-language-support.ts index 9919db114da..6546fd04ce2 100644 --- a/extensions/ql-vscode/src/log-insights/summary-language-support.ts +++ b/extensions/ql-vscode/src/log-insights/summary-language-support.ts @@ -113,7 +113,7 @@ export class SummaryLanguageSupport extends DisposableObject { const sourceMapText = await readFile(mapPath, "utf-8"); const rawMap: RawSourceMap = JSON.parse(sourceMapText); this.sourceMap = await new SourceMapConsumer(rawMap); - } catch (e: unknown) { + } catch (e) { // Error reading sourcemap. Pretend there was no sourcemap. void extLogger.log( `Error reading sourcemap file '${mapPath}': ${getErrorMessage(e)}`, diff --git a/extensions/ql-vscode/src/log-insights/summary-parser.ts b/extensions/ql-vscode/src/log-insights/summary-parser.ts index 6a42efca187..61a3a8af250 100644 --- a/extensions/ql-vscode/src/log-insights/summary-parser.ts +++ b/extensions/ql-vscode/src/log-insights/summary-parser.ts @@ -1,6 +1,3 @@ -import { createReadStream, writeFile } from "fs-extra"; -import { LINE_ENDINGS, splitStreamAtSeparators } from "../common/split-stream"; - /** * Location information for a single pipeline invocation in the RA. */ @@ -18,6 +15,11 @@ interface PredicateSymbol { * `PipelineInfo` for each iteration. A non-recursive predicate will have a single iteration `0`. */ iterations: Record; + + /** + * `PipelineInfo` for each order, summarised for all iterations that used that order. Empty for non-recursive predicates. + */ + recursionSummaries: Record; } /** @@ -27,102 +29,3 @@ interface PredicateSymbol { export interface SummarySymbols { predicates: Record; } - -// Tuple counts for Expr::Expr::getParent#dispred#f0820431#ff@76d6745o: -const NON_RECURSIVE_TUPLE_COUNT_REGEXP = - /^Evaluated relational algebra for predicate (?\S+) with tuple counts:$/; -// Tuple counts for Expr::Expr::getEnclosingStmt#f0820431#bf@923ddwj9 on iteration 0 running pipeline base: -const RECURSIVE_TUPLE_COUNT_REGEXP = - /^Evaluated relational algebra for predicate (?\S+) on iteration (?\d+) running pipeline (?\S+) with tuple counts:$/; -const RETURN_REGEXP = /^\s*return /; - -/** - * Parse a human-readable evaluation log summary to find the location of the RA for each pipeline - * run. - * - * TODO: Once we're more certain about the symbol format, we should have the CLI generate this as it - * generates the human-readabe summary to avoid having to rely on regular expression matching of the - * human-readable text. - * - * @param summaryPath The path to the summary file. - * @param symbolsPath The path to the symbols file to generate. - */ -export async function generateSummarySymbolsFile( - summaryPath: string, - symbolsPath: string, -): Promise { - const symbols = await generateSummarySymbols(summaryPath); - await writeFile(symbolsPath, JSON.stringify(symbols)); -} - -/** - * Parse a human-readable evaluation log summary to find the location of the RA for each pipeline - * run. - * - * @param fileLocation The path to the summary file. - * @returns Symbol information for the summary file. - */ -async function generateSummarySymbols( - summaryPath: string, -): Promise { - const stream = createReadStream(summaryPath, { - encoding: "utf-8", - }); - try { - const lines = splitStreamAtSeparators(stream, LINE_ENDINGS); - - const symbols: SummarySymbols = { - predicates: {}, - }; - - let lineNumber = 0; - let raStartLine = 0; - let iteration = 0; - let predicateName: string | undefined = undefined; - let startLine = 0; - for await (const line of lines) { - if (predicateName === undefined) { - // Looking for the start of the predicate. - const nonRecursiveMatch = line.match(NON_RECURSIVE_TUPLE_COUNT_REGEXP); - if (nonRecursiveMatch) { - iteration = 0; - predicateName = nonRecursiveMatch.groups!.predicateName; - } else { - const recursiveMatch = line.match(RECURSIVE_TUPLE_COUNT_REGEXP); - if (recursiveMatch?.groups) { - predicateName = recursiveMatch.groups.predicateName; - iteration = parseInt(recursiveMatch.groups.iteration); - } - } - if (predicateName !== undefined) { - startLine = lineNumber; - raStartLine = lineNumber + 1; - } - } else { - const returnMatch = line.match(RETURN_REGEXP); - if (returnMatch) { - let symbol = symbols.predicates[predicateName]; - if (symbol === undefined) { - symbol = { - iterations: {}, - }; - symbols.predicates[predicateName] = symbol; - } - symbol.iterations[iteration] = { - startLine, - raStartLine, - raEndLine: lineNumber, - }; - - predicateName = undefined; - } - } - - lineNumber++; - } - - return symbols; - } finally { - stream.close(); - } -} diff --git a/extensions/ql-vscode/src/model-editor/auto-model-api.ts b/extensions/ql-vscode/src/model-editor/auto-model-api.ts deleted file mode 100644 index 5433ce65461..00000000000 --- a/extensions/ql-vscode/src/model-editor/auto-model-api.ts +++ /dev/null @@ -1,65 +0,0 @@ -import type { Credentials } from "../common/authentication"; -import type { OctokitResponse } from "@octokit/types"; -import fetch from "node-fetch"; -import type { ModelConfigListener } from "../config"; - -export enum AutomodelMode { - Unspecified = "AUTOMODEL_MODE_UNSPECIFIED", - Framework = "AUTOMODEL_MODE_FRAMEWORK", - Application = "AUTOMODEL_MODE_APPLICATION", -} - -export interface ModelRequest { - mode: AutomodelMode; - // Base64-encoded GZIP-compressed SARIF log - candidates: string; -} - -export interface ModelResponse { - models: string; -} - -export async function autoModel( - credentials: Credentials, - request: ModelRequest, - modelingConfig: ModelConfigListener, -): Promise { - const devEndpoint = modelingConfig.llmGenerationDevEndpoint; - if (devEndpoint) { - return callAutoModelDevEndpoint(devEndpoint, request); - } else { - const octokit = await credentials.getOctokit(); - - const response: OctokitResponse = await octokit.request( - "POST /repos/github/codeql/code-scanning/codeql/auto-model", - { - data: request, - }, - ); - - return response.data; - } -} - -async function callAutoModelDevEndpoint( - endpoint: string, - request: ModelRequest, -): Promise { - const json = JSON.stringify(request); - const response = await fetch(endpoint, { - method: "POST", - headers: { - "Content-Type": "application/json", - }, - body: json, - }); - - if (!response.ok) { - throw new Error( - `Error calling auto-model API: ${response.status} ${response.statusText}`, - ); - } - - const data = await response.json(); - return data as ModelResponse; -} diff --git a/extensions/ql-vscode/src/model-editor/auto-model-codeml-queries.ts b/extensions/ql-vscode/src/model-editor/auto-model-codeml-queries.ts deleted file mode 100644 index 58b6a253510..00000000000 --- a/extensions/ql-vscode/src/model-editor/auto-model-codeml-queries.ts +++ /dev/null @@ -1,233 +0,0 @@ -import type { CodeQLCliServer, SourceInfo } from "../codeql-cli/cli"; -import type { CoreCompletedQuery, QueryRunner } from "../query-server"; -import type { DatabaseItem } from "../databases/local-databases"; -import type { ProgressCallback } from "../common/vscode/progress"; -import type { Log } from "sarif"; -import type { Mode } from "./shared/mode"; -import { getOnDiskWorkspaceFolders } from "../common/vscode/workspace-folders"; -import { interpretResultsSarif } from "../query-results"; -import { join } from "path"; -import { dir } from "tmp-promise"; -import { writeFile, outputFile } from "fs-extra"; -import { dump as dumpYaml } from "js-yaml"; -import type { MethodSignature } from "./method"; -import { runQuery } from "../local-queries/run-query"; -import type { QueryMetadata } from "../common/interface-types"; -import type { CancellationTokenSource } from "vscode"; -import { resolveQueries } from "../local-queries"; -import { modeTag } from "./mode-tag"; - -type AutoModelQueriesOptions = { - mode: Mode; - candidateMethods: MethodSignature[]; - cliServer: CodeQLCliServer; - queryRunner: QueryRunner; - databaseItem: DatabaseItem; - queryStorageDir: string; - - progress: ProgressCallback; - cancellationTokenSource: CancellationTokenSource; -}; - -export type AutoModelQueriesResult = { - candidates: Log; -}; - -export async function runAutoModelQueries({ - mode, - candidateMethods, - cliServer, - queryRunner, - databaseItem, - queryStorageDir, - progress, - cancellationTokenSource, -}: AutoModelQueriesOptions): Promise { - // First, resolve the query that we want to run. - const queryPath = await resolveAutomodelQuery( - cliServer, - databaseItem, - "candidates", - mode, - ); - - // Generate a pack containing the candidate filters - const { packDir: filterPackDir, cleanup: cleanupFilterPack } = - await generateCandidateFilterPack(databaseItem.language, candidateMethods); - - const additionalPacks = [...getOnDiskWorkspaceFolders(), filterPackDir]; - const extensionPacks = Object.keys( - await cliServer.resolveQlpacks(additionalPacks, true), - ); - - // Run the actual query - const completedQuery = await runQuery({ - queryRunner, - databaseItem, - queryPath, - queryStorageDir, - additionalPacks, - extensionPacks, - progress, - token: cancellationTokenSource.token, - }); - - await cleanupFilterPack(); - - if (!completedQuery) { - return undefined; - } - - // Get metadata for the query. This is required to interpret the results. We already know the kind is problem - // (because of the constraint in resolveQueries), so we don't need any more checks on the metadata. - const metadata = await cliServer.resolveMetadata(queryPath); - - // CodeQL needs to have access to the database to be able to retrieve the - // snippets from it. The source location prefix is used to determine the - // base path of the database. - const sourceLocationPrefix = - await databaseItem.getSourceLocationPrefix(cliServer); - const sourceArchiveUri = databaseItem.sourceArchive; - const sourceInfo = - sourceArchiveUri === undefined - ? undefined - : { - sourceArchive: sourceArchiveUri.fsPath, - sourceLocationPrefix, - }; - - const candidates = await interpretAutomodelResults( - cliServer, - completedQuery, - metadata, - sourceInfo, - ); - - return { - candidates, - }; -} - -async function resolveAutomodelQuery( - cliServer: CodeQLCliServer, - databaseItem: DatabaseItem, - queryTag: string, - mode: Mode, -): Promise { - const packsToSearch = [`codeql/${databaseItem.language}-automodel-queries`]; - - // First, resolve the query that we want to run. - // All queries are tagged like this: - // internal extract automodel - // Example: internal extract automodel framework-mode candidates - const queries = await resolveQueries( - cliServer, - packsToSearch, - `Extract automodel ${queryTag}`, - { - kind: "problem", - "tags contain all": ["automodel", modeTag(mode), ...queryTag.split(" ")], - }, - ); - if (queries.length > 1) { - throw new Error( - `Found multiple auto model queries for ${mode} ${queryTag}. Can't continue`, - ); - } - if (queries.length === 0) { - throw new Error( - `Did not found any auto model queries for ${mode} ${queryTag}. Can't continue`, - ); - } - - return queries[0]; -} - -type CandidateFilterPackResult = { - packDir: string; - cleanup: () => Promise; -}; - -/** - * generateCandidateFilterPack will create a temporary extension pack. - * This pack will contain a filter that will restrict the automodel queries - * to the specified candidate methods only. - * This is done using the `extensible` predicate "automodelCandidateFilter". - * @param language - * @param candidateMethods - * @returns - */ -export async function generateCandidateFilterPack( - language: string, - candidateMethods: MethodSignature[], -): Promise { - // Pack resides in a temporary directory, to not pollute the workspace. - const { path: packDir, cleanup } = await dir({ unsafeCleanup: true }); - - const syntheticConfigPack = { - name: "codeql/automodel-filter", - version: "0.0.0", - library: true, - extensionTargets: { - [`codeql/${language}-automodel-queries`]: "*", - }, - dataExtensions: ["filter.yml"], - }; - - const qlpackFile = join(packDir, "codeql-pack.yml"); - await outputFile(qlpackFile, dumpYaml(syntheticConfigPack), "utf8"); - - // The predicate has the following defintion: - // extensible predicate automodelCandidateFilter(string package, string type, string name, string signature) - const dataRows = candidateMethods.map((method) => [ - method.packageName, - method.typeName, - method.methodName, - method.methodParameters, - ]); - - const filter = { - extensions: [ - { - addsTo: { - pack: `codeql/${language}-automodel-queries`, - extensible: "automodelCandidateFilter", - }, - data: dataRows, - }, - ], - }; - - const filterFile = join(packDir, "filter.yml"); - await writeFile(filterFile, dumpYaml(filter), "utf8"); - - return { - packDir, - cleanup, - }; -} - -async function interpretAutomodelResults( - cliServer: CodeQLCliServer, - completedQuery: CoreCompletedQuery, - metadata: QueryMetadata, - sourceInfo: SourceInfo | undefined, -): Promise { - const interpretedResultsPath = join( - completedQuery.outputDir.querySaveDir, - "results.sarif", - ); - - const { ...sarif } = await interpretResultsSarif( - cliServer, - metadata, - { - resultsPath: completedQuery.outputDir.bqrsPath, - interpretedResultsPath, - }, - sourceInfo, - ["--sarif-add-snippets"], - ); - - return sarif; -} diff --git a/extensions/ql-vscode/src/model-editor/auto-model.ts b/extensions/ql-vscode/src/model-editor/auto-model.ts deleted file mode 100644 index e0099fae518..00000000000 --- a/extensions/ql-vscode/src/model-editor/auto-model.ts +++ /dev/null @@ -1,41 +0,0 @@ -import type { ModelRequest } from "./auto-model-api"; -import { AutomodelMode } from "./auto-model-api"; -import { Mode } from "./shared/mode"; -import type { AutoModelQueriesResult } from "./auto-model-codeml-queries"; -import { assertNever } from "../common/helpers-pure"; -import type { Log } from "sarif"; -import { gzipEncode } from "../common/zlib"; - -/** - * Encode a SARIF log to the format expected by the server: JSON, GZIP-compressed, base64-encoded - * @param log SARIF log to encode - * @returns base64-encoded GZIP-compressed SARIF log - */ -export async function encodeSarif(log: Log): Promise { - const json = JSON.stringify(log); - const buffer = Buffer.from(json, "utf-8"); - const compressed = await gzipEncode(buffer); - return compressed.toString("base64"); -} - -export async function createAutoModelRequest( - mode: Mode, - result: AutoModelQueriesResult, -): Promise { - let requestMode: AutomodelMode; - switch (mode) { - case Mode.Application: - requestMode = AutomodelMode.Application; - break; - case Mode.Framework: - requestMode = AutomodelMode.Framework; - break; - default: - assertNever(mode); - } - - return { - mode: requestMode, - candidates: await encodeSarif(result.candidates), - }; -} diff --git a/extensions/ql-vscode/src/model-editor/auto-modeler.ts b/extensions/ql-vscode/src/model-editor/auto-modeler.ts deleted file mode 100644 index e3f62ba3be8..00000000000 --- a/extensions/ql-vscode/src/model-editor/auto-modeler.ts +++ /dev/null @@ -1,249 +0,0 @@ -import type { Method, MethodSignature } from "./method"; -import type { ModeledMethod } from "./modeled-method"; -import { load as loadYaml } from "js-yaml"; -import type { ProgressCallback } from "../common/vscode/progress"; -import { withProgress } from "../common/vscode/progress"; -import { createAutoModelRequest } from "./auto-model"; -import { getCandidates } from "./shared/auto-model-candidates"; -import { runAutoModelQueries } from "./auto-model-codeml-queries"; -import { loadDataExtensionYaml } from "./yaml"; -import type { ModelRequest, ModelResponse } from "./auto-model-api"; -import { autoModel } from "./auto-model-api"; -import { RequestError } from "@octokit/request-error"; -import { showAndLogExceptionWithTelemetry } from "../common/logging"; -import { redactableError } from "../common/errors"; -import type { App } from "../common/app"; -import type { CodeQLCliServer } from "../codeql-cli/cli"; -import type { QueryRunner } from "../query-server"; -import type { DatabaseItem } from "../databases/local-databases"; -import type { Mode } from "./shared/mode"; -import { CancellationTokenSource } from "vscode"; -import type { ModelingStore } from "./modeling-store"; -import type { ModelConfigListener } from "../config"; -import type { QueryLanguage } from "../common/query-language"; - -/** - * The auto-modeler holds state around auto-modeling jobs and allows - * starting and stopping them. - */ -export class AutoModeler { - // Keep track of auto-modeling jobs that are in progress - // so that we can stop them. - private readonly jobs: Map; - - constructor( - private readonly app: App, - private readonly cliServer: CodeQLCliServer, - private readonly queryRunner: QueryRunner, - private readonly modelConfig: ModelConfigListener, - private readonly modelingStore: ModelingStore, - private readonly queryStorageDir: string, - private readonly databaseItem: DatabaseItem, - private readonly language: QueryLanguage, - private readonly addModeledMethods: ( - modeledMethods: Record, - ) => Promise, - ) { - this.jobs = new Map(); - } - - /** - * Models the given package's external API usages, except - * the ones that are already modeled. - * @param packageName The name of the package to model. - * @param methods The methods. - * @param modeledMethods The currently modeled methods. - * @param mode The mode we are modeling in. - */ - public async startModeling( - packageName: string, - methods: readonly Method[], - modeledMethods: Record, - processedByAutoModelMethods: Set, - mode: Mode, - ): Promise { - if (this.jobs.has(packageName)) { - return; - } - - const cancellationTokenSource = new CancellationTokenSource(); - this.jobs.set(packageName, cancellationTokenSource); - - try { - await this.modelPackage( - packageName, - methods, - modeledMethods, - processedByAutoModelMethods, - mode, - cancellationTokenSource, - ); - } finally { - this.jobs.delete(packageName); - } - } - - /** - * Stops modeling the given package. - * @param packageName The name of the package to stop modeling. - */ - public async stopModeling(packageName: string): Promise { - void this.app.logger.log(`Stopping modeling for package ${packageName}`); - const cancellationTokenSource = this.jobs.get(packageName); - if (cancellationTokenSource) { - cancellationTokenSource.cancel(); - } - } - - /** - * Stops all in-progress modeling jobs. - */ - public async stopAllModeling(): Promise { - for (const cancellationTokenSource of this.jobs.values()) { - cancellationTokenSource.cancel(); - } - } - - private async modelPackage( - packageName: string, - methods: readonly Method[], - modeledMethods: Record, - processedByAutoModelMethods: Set, - mode: Mode, - cancellationTokenSource: CancellationTokenSource, - ): Promise { - void this.app.logger.log(`Modeling package ${packageName}`); - - const candidateBatchSize = this.modelConfig.llmGenerationBatchSize; - - await withProgress(async (progress) => { - // Fetch the candidates to send to the model - const allCandidateMethods = getCandidates( - mode, - methods, - modeledMethods, - processedByAutoModelMethods, - ); - - // If there are no candidates, there is nothing to model and we just return - if (allCandidateMethods.length === 0) { - void this.app.logger.log("No candidates to model. Stopping."); - return; - } - - // Find number of slices to make - const batchNumber = Math.ceil( - allCandidateMethods.length / candidateBatchSize, - ); - try { - for (let i = 0; i < batchNumber; i++) { - // Check if we should stop - if (cancellationTokenSource.token.isCancellationRequested) { - break; - } - - const start = i * candidateBatchSize; - const end = start + candidateBatchSize; - const candidatesToProcess = allCandidateMethods.slice(start, end); - const candidateSignatures = candidatesToProcess.map( - (c) => c.signature, - ); - - // Let the UI know which candidates we are modeling - this.modelingStore.addInProgressMethods( - this.databaseItem, - candidateSignatures, - ); - - // Kick off the process to model the slice of candidates - await this.modelCandidates( - candidatesToProcess, - mode, - progress, - cancellationTokenSource, - ); - - // Let the UI know which candidates we are done modeling - this.modelingStore.removeInProgressMethods( - this.databaseItem, - candidateSignatures, - ); - - // Let the UI know which methods have been sent to the LLM - this.modelingStore.addProcessedByAutoModelMethods( - this.databaseItem, - candidateSignatures, - ); - } - } finally { - // Clear out in progress methods in case anything went wrong - this.modelingStore.removeInProgressMethods( - this.databaseItem, - allCandidateMethods.map((c) => c.signature), - ); - } - }); - } - - private async modelCandidates( - candidateMethods: MethodSignature[], - mode: Mode, - progress: ProgressCallback, - cancellationTokenSource: CancellationTokenSource, - ): Promise { - void this.app.logger.log("Executing auto-model queries"); - - const usages = await runAutoModelQueries({ - mode, - candidateMethods, - cliServer: this.cliServer, - queryRunner: this.queryRunner, - queryStorageDir: this.queryStorageDir, - databaseItem: this.databaseItem, - progress: (update) => progress({ ...update }), - cancellationTokenSource, - }); - if (!usages) { - return; - } - - const request = await createAutoModelRequest(mode, usages); - - void this.app.logger.log("Calling auto-model API"); - - const response = await this.callAutoModelApi(request); - if (!response) { - return; - } - - const models = loadYaml(response.models, { - filename: "auto-model.yml", - }); - - const loadedMethods = loadDataExtensionYaml(models, this.language); - if (!loadedMethods) { - return; - } - - await this.addModeledMethods(loadedMethods); - } - - private async callAutoModelApi( - request: ModelRequest, - ): Promise { - try { - return await autoModel(this.app.credentials, request, this.modelConfig); - } catch (e) { - if (e instanceof RequestError && e.status === 429) { - void showAndLogExceptionWithTelemetry( - this.app.logger, - this.app.telemetry, - redactableError`Rate limit hit, please try again soon.`, - ); - return null; - } else { - throw e; - } - } - } -} diff --git a/extensions/ql-vscode/src/model-editor/extension-pack-picker.ts b/extensions/ql-vscode/src/model-editor/extension-pack-picker.ts index 959a727e7e0..d5e8f0d78a5 100644 --- a/extensions/ql-vscode/src/model-editor/extension-pack-picker.ts +++ b/extensions/ql-vscode/src/model-editor/extension-pack-picker.ts @@ -115,7 +115,7 @@ export async function pickExtensionPack( existingExtensionPackPaths[0], databaseItem.language, ); - } catch (e: unknown) { + } catch (e) { void showAndLogErrorMessage( logger, `Could not read extension pack ${formatPackName(packName)}`, diff --git a/extensions/ql-vscode/src/model-editor/extensions-workspace-folder.ts b/extensions/ql-vscode/src/model-editor/extensions-workspace-folder.ts index d5606574ab0..f3736748805 100644 --- a/extensions/ql-vscode/src/model-editor/extensions-workspace-folder.ts +++ b/extensions/ql-vscode/src/model-editor/extensions-workspace-folder.ts @@ -133,7 +133,7 @@ async function findGitFolder( const stat = await workspace.fs.stat(gitFolder); // Check whether it's a directory return (stat.type & FileType.Directory) !== 0; - } catch (e) { + } catch { return false; } }), diff --git a/extensions/ql-vscode/src/model-editor/generate.ts b/extensions/ql-vscode/src/model-editor/generate.ts index 9f4b20c13da..157ed78b78d 100644 --- a/extensions/ql-vscode/src/model-editor/generate.ts +++ b/extensions/ql-vscode/src/model-editor/generate.ts @@ -91,6 +91,14 @@ async function runSingleGenerateQuery( if (!completedQuery) { return undefined; } + const queryResults = Array.from(completedQuery.results.values()); + if (queryResults.length !== 1) { + throw new Error( + `Expected exactly one query result, but got ${queryResults.length}`, + ); + } - return cliServer.bqrsDecodeAll(completedQuery.outputDir.bqrsPath); + return cliServer.bqrsDecodeAll( + completedQuery.outputDir.getBqrsPath(queryResults[0].outputBaseName), + ); } diff --git a/extensions/ql-vscode/src/model-editor/library.ts b/extensions/ql-vscode/src/model-editor/library.ts index bedf40f0786..7cc12514de9 100644 --- a/extensions/ql-vscode/src/model-editor/library.ts +++ b/extensions/ql-vscode/src/model-editor/library.ts @@ -32,7 +32,7 @@ export function parseLibraryFilename(filename: string): Library { semverRegex.lastIndex = 0; // Find the last occurence of the regex within the library name - // eslint-disable-next-line no-constant-condition + while (true) { const currentMatch = semverRegex.exec(libraryName); if (currentMatch === null) { diff --git a/extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-view-provider.ts b/extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-view-provider.ts index d325bb72fd7..53fc6f1275e 100644 --- a/extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-view-provider.ts +++ b/extensions/ql-vscode/src/model-editor/method-modeling/method-modeling-view-provider.ts @@ -70,8 +70,6 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider< method: Method, modeledMethods: readonly ModeledMethod[], isModified: boolean, - isInProgress: boolean, - processedByAutoModel: boolean, ): Promise { this.method = method; this.databaseItem = databaseItem; @@ -82,8 +80,6 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider< method, modeledMethods, isModified, - isInProgress, - processedByAutoModel, }); } @@ -104,8 +100,6 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider< selectedMethod.method, selectedMethod.modeledMethods, selectedMethod.isModified, - selectedMethod.isInProgress, - selectedMethod.processedByAutoModel, ); } } @@ -203,8 +197,6 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider< e.method, e.modeledMethods, e.isModified, - e.isInProgress, - e.processedByAutoModel, ); } }), @@ -232,36 +224,6 @@ export class MethodModelingViewProvider extends AbstractWebviewViewProvider< } }), ); - - this.push( - this.modelingEvents.onInProgressMethodsChanged(async (e) => { - if (this.method && this.databaseItem) { - const dbUri = this.databaseItem.databaseUri.toString(); - if (e.dbUri === dbUri) { - const inProgress = e.methods.has(this.method.signature); - await this.postMessage({ - t: "setInProgress", - inProgress, - }); - } - } - }), - ); - - this.push( - this.modelingEvents.onProcessedByAutoModelMethodsChanged(async (e) => { - if (this.method && this.databaseItem) { - const dbUri = this.databaseItem.databaseUri.toString(); - if (e.dbUri === dbUri) { - const processedByAutoModel = e.methods.has(this.method.signature); - await this.postMessage({ - t: "setProcessedByAutoModel", - processedByAutoModel, - }); - } - } - }), - ); } private registerToModelConfigEvents(): void { diff --git a/extensions/ql-vscode/src/model-editor/model-editor-module.ts b/extensions/ql-vscode/src/model-editor/model-editor-module.ts index 2aa914e377f..ebd234b7825 100644 --- a/extensions/ql-vscode/src/model-editor/model-editor-module.ts +++ b/extensions/ql-vscode/src/model-editor/model-editor-module.ts @@ -204,7 +204,6 @@ export class ModelEditorModule extends DisposableObject { this.app.logger, queryDir, language, - this.modelConfig, initialMode, ); if (!success) { diff --git a/extensions/ql-vscode/src/model-editor/model-editor-queries-setup.ts b/extensions/ql-vscode/src/model-editor/model-editor-queries-setup.ts index a39103e3974..14b42572f71 100644 --- a/extensions/ql-vscode/src/model-editor/model-editor-queries-setup.ts +++ b/extensions/ql-vscode/src/model-editor/model-editor-queries-setup.ts @@ -8,7 +8,6 @@ import { syntheticQueryPackName, } from "./model-editor-queries"; import type { CodeQLCliServer } from "../codeql-cli/cli"; -import type { ModelConfig } from "../config"; import type { Mode } from "./shared/mode"; import type { NotificationLogger } from "../common/logging"; @@ -30,7 +29,6 @@ import type { NotificationLogger } from "../common/logging"; * @param logger The logger to use. * @param queryDir The directory to set up. * @param language The language to use for the queries. - * @param modelConfig The model config to use. * @param initialMode The initial mode to use to check the existence of the queries. * @returns true if the setup was successful, false otherwise. */ @@ -39,7 +37,6 @@ export async function setUpPack( logger: NotificationLogger, queryDir: string, language: QueryLanguage, - modelConfig: ModelConfig, initialMode: Mode, ): Promise { // Download the required query packs @@ -91,10 +88,5 @@ export async function setUpPack( await cliServer.packInstall(queryDir); } - // Download any other required packs - if (language === "java" && modelConfig.llmGeneration) { - await cliServer.packDownload([`codeql/${language}-automodel-queries`]); - } - return true; } diff --git a/extensions/ql-vscode/src/model-editor/model-editor-queries.ts b/extensions/ql-vscode/src/model-editor/model-editor-queries.ts index 0e7ddd48c4e..f1e7429afbd 100644 --- a/extensions/ql-vscode/src/model-editor/model-editor-queries.ts +++ b/extensions/ql-vscode/src/model-editor/model-editor-queries.ts @@ -172,10 +172,19 @@ export async function runModelEditorQueries( maxStep: externalApiQueriesProgressMaxStep, }); + const queryResults = Array.from(completedQuery.results.values()); + if (queryResults.length !== 1) { + throw new Error( + `Expected exactly one query result, but got ${queryResults.length}`, + ); + } + const bqrsChunk = await readQueryResults({ cliServer, logger, - bqrsPath: completedQuery.outputDir.bqrsPath, + bqrsPath: completedQuery.outputDir.getBqrsPath( + queryResults[0].outputBaseName, + ), }); if (!bqrsChunk) { return; diff --git a/extensions/ql-vscode/src/model-editor/model-editor-view.ts b/extensions/ql-vscode/src/model-editor/model-editor-view.ts index 3e2d233bc09..8f0ac3c75a0 100644 --- a/extensions/ql-vscode/src/model-editor/model-editor-view.ts +++ b/extensions/ql-vscode/src/model-editor/model-editor-view.ts @@ -49,7 +49,6 @@ import { import { pickExtensionPack } from "./extension-pack-picker"; import type { QueryLanguage } from "../common/query-language"; import { getLanguageDisplayName } from "../common/query-language"; -import { AutoModeler } from "./auto-modeler"; import { telemetryListener } from "../common/vscode/telemetry"; import type { ModelingStore } from "./modeling-store"; import type { ModelingEvents } from "./modeling-events"; @@ -77,7 +76,6 @@ export class ModelEditorView extends AbstractWebview< ToModelEditorMessage, FromModelEditorMessage > { - private readonly autoModeler: AutoModeler; private readonly modelEvaluator: ModelEvaluator; private readonly languageDefinition: ModelsAsDataLanguage; // Cancellation token source that can be used for passing into long-running operations. Should only @@ -114,19 +112,6 @@ export class ModelEditorView extends AbstractWebview< this.registerToModelingEvents(); this.registerToModelConfigEvents(); - this.autoModeler = new AutoModeler( - app, - cliServer, - queryRunner, - this.modelConfig, - modelingStore, - queryStorageDir, - databaseItem, - language, - async (modeledMethods) => { - this.addModeledMethods(modeledMethods); - }, - ); this.languageDefinition = getModelsAsDataLanguage(language); this.modelEvaluator = new ModelEvaluator( @@ -317,21 +302,6 @@ export class ModelEditorView extends AbstractWebview< "model-editor-generate-modeled-methods", ); - break; - case "generateMethodsFromLlm": - await this.generateModeledMethodsFromLlm( - msg.packageName, - msg.methodSignatures, - ); - void telemetryListener?.sendUIInteraction( - "model-editor-generate-methods-from-llm", - ); - break; - case "stopGeneratingMethodsFromLlm": - await this.autoModeler.stopModeling(msg.packageName); - void telemetryListener?.sendUIInteraction( - "model-editor-stop-generating-methods-from-llm", - ); break; case "modelDependency": await this.modelDependency(); @@ -438,9 +408,6 @@ export class ModelEditorView extends AbstractWebview< this.modelConfig.flowGeneration) && !!modelsAsDataLanguage.modelGeneration; - const showLlmButton = - this.databaseItem.language === "java" && this.modelConfig.llmGeneration; - const showEvaluationUi = this.modelConfig.modelEvaluation; const sourceArchiveAvailable = @@ -456,7 +423,6 @@ export class ModelEditorView extends AbstractWebview< extensionPack: this.extensionPack, language: this.language, showGenerateButton, - showLlmButton, showEvaluationUi, mode: this.modelingStore.getMode(this.databaseItem), showModeSwitchButton, @@ -489,7 +455,7 @@ export class ModelEditorView extends AbstractWebview< this.app.logger, ); this.modelingStore.setModeledMethods(this.databaseItem, modeledMethods); - } catch (e: unknown) { + } catch (e) { void showAndLogErrorMessage( this.app.logger, `Unable to read data extension YAML: ${getErrorMessage(e)}`, @@ -595,7 +561,7 @@ export class ModelEditorView extends AbstractWebview< t: "setAccessPathSuggestions", accessPathSuggestions: options, }); - } catch (e: unknown) { + } catch (e) { void showAndLogExceptionWithTelemetry( this.app.logger, this.app.telemetry, @@ -639,7 +605,7 @@ export class ModelEditorView extends AbstractWebview< return; } - if (addedDatabase.language !== this.language) { + if ((addedDatabase.language as QueryLanguage) !== this.language) { void showAndLogErrorMessage( this.app.logger, `The selected database is for ${addedDatabase.language}, but the current database is for ${this.language}.`, @@ -679,7 +645,7 @@ export class ModelEditorView extends AbstractWebview< progress, token: this.cancellationTokenSource.token, }); - } catch (e: unknown) { + } catch (e) { void showAndLogExceptionWithTelemetry( this.app.logger, this.app.telemetry, @@ -767,7 +733,7 @@ export class ModelEditorView extends AbstractWebview< progress, token: this.cancellationTokenSource.token, }); - } catch (e: unknown) { + } catch (e) { void showAndLogExceptionWithTelemetry( this.app.logger, this.app.telemetry, @@ -805,33 +771,6 @@ export class ModelEditorView extends AbstractWebview< ); } - private async generateModeledMethodsFromLlm( - packageName: string, - methodSignatures: string[], - ): Promise { - const methods = this.modelingStore.getMethods( - this.databaseItem, - methodSignatures, - ); - const modeledMethods = this.modelingStore.getModeledMethods( - this.databaseItem, - methodSignatures, - ); - const processedByAutoModelMethods = - this.modelingStore.getProcessedByAutoModelMethods( - this.databaseItem, - methodSignatures, - ); - const mode = this.modelingStore.getMode(this.databaseItem); - await this.autoModeler.startModeling( - packageName, - methods, - modeledMethods, - processedByAutoModelMethods, - mode, - ); - } - private async modelDependency(): Promise { return withProgress( async (progress, token) => { @@ -983,30 +922,6 @@ export class ModelEditorView extends AbstractWebview< }), ); - this.push( - this.modelingEvents.onInProgressMethodsChanged(async (event) => { - if (event.dbUri === this.databaseItem.databaseUri.toString()) { - await this.postMessage({ - t: "setInProgressMethods", - methods: Array.from(event.methods), - }); - } - }), - ); - - this.push( - this.modelingEvents.onProcessedByAutoModelMethodsChanged( - async (event) => { - if (event.dbUri === this.databaseItem.databaseUri.toString()) { - await this.postMessage({ - t: "setProcessedByAutoModelMethods", - methods: Array.from(event.methods), - }); - } - }, - ), - ); - this.push( this.modelingEvents.onRevealInModelEditor(async (event) => { if (event.dbUri === this.databaseItem.databaseUri.toString()) { diff --git a/extensions/ql-vscode/src/model-editor/modeled-method.ts b/extensions/ql-vscode/src/model-editor/modeled-method.ts index 2f7c40d27aa..7156ee93e54 100644 --- a/extensions/ql-vscode/src/model-editor/modeled-method.ts +++ b/extensions/ql-vscode/src/model-editor/modeled-method.ts @@ -1,6 +1,5 @@ import { assertNever } from "../common/helpers-pure"; import type { MethodSignature } from "./method"; -import type { ModelingStatus } from "./shared/modeling-status"; export type ModeledMethodType = | "none" @@ -15,10 +14,6 @@ export type Provenance = | "df-generated" // Generated by the dataflow model and manually edited | "df-manual" - // Generated by the auto-model - | "ai-generated" - // Generated by the auto-model and manually edited - | "ai-manual" // Entered by the user in the editor manually | "manual"; @@ -112,30 +107,6 @@ export function modeledMethodSupportsProvenance( ); } -export function isModelPending( - modeledMethod: ModeledMethod | undefined, - modelingStatus: ModelingStatus, - processedByAutoModel: boolean, -): boolean { - if ( - (!modeledMethod || modeledMethod.type === "none") && - processedByAutoModel - ) { - return true; - } - - if (!modeledMethod) { - return false; - } - - return ( - modelingStatus === "unsaved" && - modeledMethod.type !== "none" && - modeledMethodSupportsProvenance(modeledMethod) && - modeledMethod.provenance === "ai-generated" - ); -} - /** * Calculates the new provenance for a modeled method based on the current provenance. * @param modeledMethod The modeled method if there is one. @@ -158,13 +129,6 @@ export function calculateNewProvenance( case "df-manual": // If the method has had manual edits, we want the provenance to stay the same. return "df-manual"; - case "ai-generated": - // If the method has been generated and there has been a change, we assume - // that the user has manually edited it. - return "ai-manual"; - case "ai-manual": - // If the method has had manual edits, we want the provenance to stay the same. - return "ai-manual"; default: // The method has been modeled manually. return "manual"; diff --git a/extensions/ql-vscode/src/model-editor/modeling-events.ts b/extensions/ql-vscode/src/model-editor/modeling-events.ts index 06de166add7..2b7322f0ed7 100644 --- a/extensions/ql-vscode/src/model-editor/modeling-events.ts +++ b/extensions/ql-vscode/src/model-editor/modeling-events.ts @@ -37,18 +37,6 @@ interface SelectedMethodChangedEvent { readonly usage: Usage; readonly modeledMethods: readonly ModeledMethod[]; readonly isModified: boolean; - readonly isInProgress: boolean; - readonly processedByAutoModel: boolean; -} - -interface InProgressMethodsChangedEvent { - readonly dbUri: string; - readonly methods: ReadonlySet; -} - -interface ProcessedByAutoModelMethodsChangedEvent { - readonly dbUri: string; - readonly methods: ReadonlySet; } interface ModelEvaluationRunChangedEvent { @@ -83,8 +71,6 @@ export class ModelingEvents extends DisposableObject { public readonly onModeChanged: AppEvent; public readonly onModeledAndModifiedMethodsChanged: AppEvent; public readonly onSelectedMethodChanged: AppEvent; - public readonly onInProgressMethodsChanged: AppEvent; - public readonly onProcessedByAutoModelMethodsChanged: AppEvent; public readonly onModelEvaluationRunChanged: AppEvent; public readonly onRevealInModelEditor: AppEvent; public readonly onFocusModelEditor: AppEvent; @@ -99,8 +85,6 @@ export class ModelingEvents extends DisposableObject { private readonly onModeChangedEventEmitter: AppEventEmitter; private readonly onModeledAndModifiedMethodsChangedEventEmitter: AppEventEmitter; private readonly onSelectedMethodChangedEventEmitter: AppEventEmitter; - private readonly onInProgressMethodsChangedEventEmitter: AppEventEmitter; - private readonly onProcessedByAutoModelMethodsChangedEventEmitter: AppEventEmitter; private readonly onModelEvaluationRunChangedEventEmitter: AppEventEmitter; private readonly onRevealInModelEditorEventEmitter: AppEventEmitter; private readonly onFocusModelEditorEventEmitter: AppEventEmitter; @@ -151,18 +135,6 @@ export class ModelingEvents extends DisposableObject { this.onSelectedMethodChanged = this.onSelectedMethodChangedEventEmitter.event; - this.onInProgressMethodsChangedEventEmitter = this.push( - app.createEventEmitter(), - ); - this.onInProgressMethodsChanged = - this.onInProgressMethodsChangedEventEmitter.event; - - this.onProcessedByAutoModelMethodsChangedEventEmitter = this.push( - app.createEventEmitter(), - ); - this.onProcessedByAutoModelMethodsChanged = - this.onProcessedByAutoModelMethodsChangedEventEmitter.event; - this.onModelEvaluationRunChangedEventEmitter = this.push( app.createEventEmitter(), ); @@ -254,8 +226,6 @@ export class ModelingEvents extends DisposableObject { usage: Usage, modeledMethods: ModeledMethod[], isModified: boolean, - isInProgress: boolean, - processedByAutoModel: boolean, ) { this.onSelectedMethodChangedEventEmitter.fire({ databaseItem, @@ -263,28 +233,6 @@ export class ModelingEvents extends DisposableObject { usage, modeledMethods, isModified, - isInProgress, - processedByAutoModel, - }); - } - - public fireInProgressMethodsChangedEvent( - dbUri: string, - methods: ReadonlySet, - ) { - this.onInProgressMethodsChangedEventEmitter.fire({ - dbUri, - methods, - }); - } - - public fireProcessedByAutoModelMethodsChangedEvent( - dbUri: string, - methods: ReadonlySet, - ) { - this.onProcessedByAutoModelMethodsChangedEventEmitter.fire({ - dbUri, - methods, }); } diff --git a/extensions/ql-vscode/src/model-editor/modeling-store.ts b/extensions/ql-vscode/src/model-editor/modeling-store.ts index d4ac7e46df7..d964ad9897a 100644 --- a/extensions/ql-vscode/src/model-editor/modeling-store.ts +++ b/extensions/ql-vscode/src/model-editor/modeling-store.ts @@ -15,8 +15,6 @@ interface InternalDbModelingState { mode: Mode; modeledMethods: Record; modifiedMethodSignatures: Set; - inProgressMethods: Set; - processedByAutoModelMethods: Set; selectedMethod: Method | undefined; selectedUsage: Usage | undefined; modelEvaluationRun: ModelEvaluationRun | undefined; @@ -30,8 +28,6 @@ export interface DbModelingState { readonly mode: Mode; readonly modeledMethods: Readonly>; readonly modifiedMethodSignatures: ReadonlySet; - readonly inProgressMethods: ReadonlySet; - readonly processedByAutoModelMethods: ReadonlySet; readonly selectedMethod: Method | undefined; readonly selectedUsage: Usage | undefined; readonly modelEvaluationRun: ModelEvaluationRun | undefined; @@ -44,8 +40,6 @@ export interface SelectedMethodDetails { readonly usage: Usage | undefined; readonly modeledMethods: readonly ModeledMethod[]; readonly isModified: boolean; - readonly isInProgress: boolean; - readonly processedByAutoModel: boolean; } export class ModelingStore extends DisposableObject { @@ -68,10 +62,8 @@ export class ModelingStore extends DisposableObject { mode, modeledMethods: {}, modifiedMethodSignatures: new Set(), - processedByAutoModelMethods: new Set(), selectedMethod: undefined, selectedUsage: undefined, - inProgressMethods: new Set(), modelEvaluationRun: undefined, isModelAlertsViewOpen: false, }); @@ -160,7 +152,6 @@ export class ModelingStore extends DisposableObject { methods, state.modeledMethods, state.modifiedMethodSignatures, - state.processedByAutoModelMethods, ); }); } @@ -171,7 +162,6 @@ export class ModelingStore extends DisposableObject { state.methods, state.modeledMethods, state.modifiedMethodSignatures, - state.processedByAutoModelMethods, ); }); } @@ -308,75 +298,15 @@ export class ModelingStore extends DisposableObject { const modeledMethods = dbState.modeledMethods[method.signature] ?? []; const isModified = dbState.modifiedMethodSignatures.has(method.signature); - const isInProgress = dbState.inProgressMethods.has(method.signature); - const processedByAutoModel = dbState.processedByAutoModelMethods.has( - method.signature, - ); this.modelingEvents.fireSelectedMethodChangedEvent( dbItem, method, usage, modeledMethods, isModified, - isInProgress, - processedByAutoModel, - ); - } - - public addInProgressMethods( - dbItem: DatabaseItem, - inProgressMethods: string[], - ) { - this.changeInProgressMethods(dbItem, (state) => { - state.inProgressMethods = new Set([ - ...state.inProgressMethods, - ...inProgressMethods, - ]); - }); - } - - public removeInProgressMethods( - dbItem: DatabaseItem, - methodSignatures: string[], - ) { - this.changeInProgressMethods(dbItem, (state) => { - state.inProgressMethods = new Set( - Array.from(state.inProgressMethods).filter( - (s) => !methodSignatures.includes(s), - ), - ); - }); - } - - public getProcessedByAutoModelMethods( - dbItem: DatabaseItem, - methodSignatures?: string[], - ): Set { - const processedByAutoModelMethods = - this.getState(dbItem).processedByAutoModelMethods; - if (!methodSignatures) { - return processedByAutoModelMethods; - } - return new Set( - Array.from(processedByAutoModelMethods).filter((x) => - methodSignatures.includes(x), - ), ); } - public addProcessedByAutoModelMethods( - dbItem: DatabaseItem, - processedByAutoModelMethods: string[], - ) { - this.changeProcessedByAutoModelMethods(dbItem, (state) => { - state.processedByAutoModelMethods = new Set([ - ...state.processedByAutoModelMethods, - ...processedByAutoModelMethods, - ]); - }); - this.updateMethodSorting(dbItem); - } - public updateModelEvaluationRun( dbItem: DatabaseItem, evaluationRun: ModelEvaluationRun | undefined, @@ -405,10 +335,6 @@ export class ModelingStore extends DisposableObject { isModified: dbState.modifiedMethodSignatures.has( selectedMethod.signature, ), - isInProgress: dbState.inProgressMethods.has(selectedMethod.signature), - processedByAutoModel: dbState.processedByAutoModelMethods.has( - selectedMethod.signature, - ), }; } @@ -460,34 +386,6 @@ export class ModelingStore extends DisposableObject { ); } - private changeInProgressMethods( - dbItem: DatabaseItem, - updateState: (state: InternalDbModelingState) => void, - ) { - const state = this.getState(dbItem); - - updateState(state); - - this.modelingEvents.fireInProgressMethodsChangedEvent( - dbItem.databaseUri.toString(), - state.inProgressMethods, - ); - } - - private changeProcessedByAutoModelMethods( - dbItem: DatabaseItem, - updateState: (state: InternalDbModelingState) => void, - ) { - const state = this.getState(dbItem); - - updateState(state); - - this.modelingEvents.fireProcessedByAutoModelMethodsChangedEvent( - dbItem.databaseUri.toString(), - state.processedByAutoModelMethods, - ); - } - private changeModelEvaluationRun( dbItem: DatabaseItem, updateState: (state: InternalDbModelingState) => void, diff --git a/extensions/ql-vscode/src/model-editor/shared/auto-model-candidates.ts b/extensions/ql-vscode/src/model-editor/shared/auto-model-candidates.ts deleted file mode 100644 index 879be09505d..00000000000 --- a/extensions/ql-vscode/src/model-editor/shared/auto-model-candidates.ts +++ /dev/null @@ -1,48 +0,0 @@ -import type { Method, MethodSignature } from "../method"; -import type { ModeledMethod } from "../modeled-method"; -import type { Mode } from "./mode"; -import { groupMethods, sortGroupNames } from "./sorting"; - -/** - * Return the candidates that the model should be run on. This includes limiting the number of - * candidates to the candidate limit and filtering out anything that is already modeled and respecting - * the order in the UI. - * @param mode Whether it is application or framework mode. - * @param methods all methods. - * @param modeledMethodsBySignature the currently modeled methods. - * @returns list of modeled methods that are candidates for modeling. - */ - -export function getCandidates( - mode: Mode, - methods: readonly Method[], - modeledMethodsBySignature: Record, - processedByAutoModelMethods: Set, -): MethodSignature[] { - const candidateMethods = methods.filter((method) => { - // Filter out any methods already processed by auto-model - if (processedByAutoModelMethods.has(method.signature)) { - return false; - } - - const modeledMethods: ModeledMethod[] = [ - ...(modeledMethodsBySignature[method.signature] ?? []), - ]; - - // Anything that is modeled is not a candidate - if (modeledMethods.some((m) => m.type !== "none")) { - return false; - } - - // A method that is supported is modeled outside of the model file, so it is not a candidate. - if (method.supported) { - return false; - } - - return true; - }); - - // Sort the same way as the UI so we send the first ones listed in the UI first - const grouped = groupMethods(candidateMethods, mode); - return sortGroupNames(grouped).flatMap((name) => grouped[name]); -} diff --git a/extensions/ql-vscode/src/model-editor/shared/sorting.ts b/extensions/ql-vscode/src/model-editor/shared/sorting.ts index f09304b1c6a..fb6614ba199 100644 --- a/extensions/ql-vscode/src/model-editor/shared/sorting.ts +++ b/extensions/ql-vscode/src/model-editor/shared/sorting.ts @@ -47,7 +47,6 @@ export function sortMethods( methods: readonly Method[], modeledMethodsMap: Record, modifiedSignatures: ReadonlySet, - processedByAutoModelMethods: ReadonlySet, ): Method[] { const sortedMethods = [...methods]; sortedMethods.sort((a, b) => { @@ -56,13 +55,11 @@ export function sortMethods( a, modeledMethodsMap[a.signature] ?? [], modifiedSignatures.has(a.signature), - processedByAutoModelMethods.has(a.signature), ); const methodBPrimarySortOrdinal = getMethodPrimarySortOrdinal( b, modeledMethodsMap[b.signature] ?? [], modifiedSignatures.has(b.signature), - processedByAutoModelMethods.has(b.signature), ); if (methodAPrimarySortOrdinal !== methodBPrimarySortOrdinal) { return methodAPrimarySortOrdinal - methodBPrimarySortOrdinal; @@ -82,32 +79,25 @@ export function sortMethods( /** * Assigns numbers to the following classes of methods: - * - Unsaved positive AutoModel predictions => 0 - * - Negative AutoModel predictions => 1 - * - Unsaved manual models + unmodeled methods => 2 - * - Saved models from this model pack (AutoModel and manual) => 3 - * - Methods not modelable in this model pack => 4 + * - Unsaved manual models + unmodeled methods => 0 + * - Saved models from this model pack (AutoModel and manual) => 1 + * - Methods not modelable in this model pack => 2 */ function getMethodPrimarySortOrdinal( method: Method, modeledMethods: readonly ModeledMethod[], isUnsaved: boolean, - isProcessedByAutoModel: boolean, ): number { const canBeModeled = canMethodBeModeled(method, modeledMethods, isUnsaved); const isModeled = modeledMethods.length > 0; if (canBeModeled) { - if (isModeled && isUnsaved && isProcessedByAutoModel) { + if ((isModeled && isUnsaved) || !isModeled) { return 0; - } else if (!isModeled && isProcessedByAutoModel) { - return 1; - } else if ((isModeled && isUnsaved) || !isModeled) { - return 2; } else { - return 3; + return 1; } } else { - return 4; + return 2; } } diff --git a/extensions/ql-vscode/src/model-editor/shared/view-state.ts b/extensions/ql-vscode/src/model-editor/shared/view-state.ts index 1389103bc10..658909dbc04 100644 --- a/extensions/ql-vscode/src/model-editor/shared/view-state.ts +++ b/extensions/ql-vscode/src/model-editor/shared/view-state.ts @@ -7,7 +7,6 @@ export interface ModelEditorViewState { extensionPack: ExtensionPack; language: QueryLanguage; showGenerateButton: boolean; - showLlmButton: boolean; showEvaluationUi: boolean; mode: Mode; showModeSwitchButton: boolean; diff --git a/extensions/ql-vscode/src/model-editor/suggestion-queries.ts b/extensions/ql-vscode/src/model-editor/suggestion-queries.ts index 37ce78fd3a5..f325fc2a4d5 100644 --- a/extensions/ql-vscode/src/model-editor/suggestion-queries.ts +++ b/extensions/ql-vscode/src/model-editor/suggestion-queries.ts @@ -109,7 +109,15 @@ export async function runSuggestionsQuery( maxStep, }); - const bqrs = await cliServer.bqrsDecodeAll(completedQuery.outputDir.bqrsPath); + const queryResults = Array.from(completedQuery.results.values()); + if (queryResults.length !== 1) { + throw new Error( + `Expected exactly one query result, but got ${queryResults.length}`, + ); + } + const bqrs = await cliServer.bqrsDecodeAll( + completedQuery.outputDir.getBqrsPath(queryResults[0].outputBaseName), + ); progress({ message: "Finalizing results", diff --git a/extensions/ql-vscode/src/query-evaluation-logging/eval-log-viewer.ts b/extensions/ql-vscode/src/query-evaluation-logging/eval-log-viewer.ts index a35b1cd72c4..0bd7a572b44 100644 --- a/extensions/ql-vscode/src/query-evaluation-logging/eval-log-viewer.ts +++ b/extensions/ql-vscode/src/query-evaluation-logging/eval-log-viewer.ts @@ -45,7 +45,10 @@ class EvalLogDataProvider ? TreeItemCollapsibleState.Collapsed : TreeItemCollapsibleState.None; const treeItem = new TreeItem(element.label || "", state); - treeItem.tooltip = `${treeItem.label} || ''}`; + treeItem.tooltip = + typeof treeItem.label === "string" + ? treeItem.label + : (treeItem.label?.label ?? ""); return treeItem; } diff --git a/extensions/ql-vscode/src/query-history/history-item-label-provider.ts b/extensions/ql-vscode/src/query-history/history-item-label-provider.ts index b2bb24b049a..8787e025daf 100644 --- a/extensions/ql-vscode/src/query-history/history-item-label-provider.ts +++ b/extensions/ql-vscode/src/query-history/history-item-label-provider.ts @@ -12,17 +12,36 @@ import type { VariantAnalysisHistoryItem } from "./variant-analysis-history-item import { assertNever } from "../common/helpers-pure"; import { pluralize } from "../common/word"; import { humanizeQueryStatus } from "./query-status"; +import { substituteConfigVariables } from "../common/config-template"; -interface InterpolateReplacements { - t: string; // Start time - q: string; // Query name - d: string; // Database/repositories count - r: string; // Result count/Empty - s: string; // Status - f: string; // Query file name - l: string; // Query language - "%": "%"; // Percent sign -} +type LabelVariables = { + startTime: string; + queryName: string; + databaseName: string; + resultCount: string; + status: string; + queryFileBasename: string; + queryLanguage: string; +}; + +const legacyVariableInterpolateReplacements: Record< + keyof LabelVariables, + string +> = { + startTime: "t", + queryName: "q", + databaseName: "d", + resultCount: "r", + status: "s", + queryFileBasename: "f", + queryLanguage: "l", +}; + +// If any of the "legacy" variables are used, we need to use legacy interpolation. +const legacyLabelRegex = new RegExp( + `%([${Object.values(legacyVariableInterpolateReplacements).join("")}%])`, + "g", +); export class HistoryItemLabelProvider { constructor(private config: QueryHistoryConfig) { @@ -30,21 +49,27 @@ export class HistoryItemLabelProvider { } getLabel(item: QueryHistoryInfo) { - let replacements: InterpolateReplacements; + let variables: LabelVariables; switch (item.t) { case "local": - replacements = this.getLocalInterpolateReplacements(item); + variables = this.getLocalVariables(item); break; case "variant-analysis": - replacements = this.getVariantAnalysisInterpolateReplacements(item); + variables = this.getVariantAnalysisVariables(item); break; default: assertNever(item); } - const rawLabel = item.userSpecifiedLabel ?? (this.config.format || "%q"); + const rawLabel = + item.userSpecifiedLabel ?? (this.config.format || "${queryName}"); - return this.interpolate(rawLabel, replacements); + legacyLabelRegex.lastIndex = 0; // Reset the regex index to start searching from the start of the string if the strings are the same + if (legacyLabelRegex.test(rawLabel)) { + return this.legacyInterpolate(rawLabel, variables); + } + + return substituteConfigVariables(rawLabel, variables).replace(/\s+/g, " "); } /** @@ -59,55 +84,60 @@ export class HistoryItemLabelProvider { : getRawQueryName(item); } - private interpolate( + private legacyInterpolate( rawLabel: string, - replacements: InterpolateReplacements, + variables: LabelVariables, ): string { - const label = rawLabel.replace( - /%(.)/g, - (match, key: keyof InterpolateReplacements) => { - const replacement = replacements[key]; - return replacement !== undefined ? replacement : match; + const replacements = Object.entries(variables).reduce( + (acc, [key, value]) => { + acc[ + legacyVariableInterpolateReplacements[key as keyof LabelVariables] + ] = value; + return acc; }, + { + "%": "%", + } as Record, ); + const label = rawLabel.replace(/%(.)/g, (match, key: string) => { + const replacement = replacements[key]; + return replacement !== undefined ? replacement : match; + }); + return label.replace(/\s+/g, " "); } - private getLocalInterpolateReplacements( - item: LocalQueryInfo, - ): InterpolateReplacements { + private getLocalVariables(item: LocalQueryInfo): LabelVariables { const { resultCount = 0, message = "in progress" } = item.completedQuery || {}; return { - t: item.startTime, - q: item.getQueryName(), - d: item.databaseName, - r: `(${resultCount} results)`, - s: message, - f: item.getQueryFileName(), - l: this.getLanguageLabel(item), - "%": "%", + startTime: item.startTime, + queryName: item.getQueryName(), + databaseName: item.databaseName, + resultCount: resultCount === -1 ? "" : `(${resultCount} results)`, + status: message, + queryFileBasename: item.getQueryFileName(), + queryLanguage: this.getLanguageLabel(item), }; } - private getVariantAnalysisInterpolateReplacements( + private getVariantAnalysisVariables( item: VariantAnalysisHistoryItem, - ): InterpolateReplacements { + ): LabelVariables { const resultCount = item.resultCount ? `(${pluralize(item.resultCount, "result", "results")})` : ""; return { - t: new Date(item.variantAnalysis.executionStartTime).toLocaleString( - env.language, - ), - q: `${item.variantAnalysis.query.name} (${item.variantAnalysis.language})`, - d: buildRepoLabel(item), - r: resultCount, - s: humanizeQueryStatus(item.status), - f: basename(item.variantAnalysis.query.filePath), - l: this.getLanguageLabel(item), - "%": "%", + startTime: new Date( + item.variantAnalysis.executionStartTime, + ).toLocaleString(env.language), + queryName: `${item.variantAnalysis.query.name} (${item.variantAnalysis.language})`, + databaseName: buildRepoLabel(item), + resultCount, + status: humanizeQueryStatus(item.status), + queryFileBasename: basename(item.variantAnalysis.query.filePath), + queryLanguage: this.getLanguageLabel(item), }; } diff --git a/extensions/ql-vscode/src/query-history/history-tree-data-provider.ts b/extensions/ql-vscode/src/query-history/history-tree-data-provider.ts index 8f63d109eb5..7b355539a9a 100644 --- a/extensions/ql-vscode/src/query-history/history-tree-data-provider.ts +++ b/extensions/ql-vscode/src/query-history/history-tree-data-provider.ts @@ -138,12 +138,12 @@ export class HistoryTreeDataProvider const resultCount1 = h1.t === "local" - ? h1.completedQuery?.resultCount ?? -1 - : h1.resultCount ?? -1; + ? (h1.completedQuery?.resultCount ?? -1) + : (h1.resultCount ?? -1); const resultCount2 = h2.t === "local" - ? h2.completedQuery?.resultCount ?? -1 - : h2.resultCount ?? -1; + ? (h2.completedQuery?.resultCount ?? -1) + : (h2.resultCount ?? -1); switch (this.sortOrder) { case SortOrder.NameAsc: diff --git a/extensions/ql-vscode/src/query-history/query-history-manager.ts b/extensions/ql-vscode/src/query-history/query-history-manager.ts index 22562d76a48..edf22f9b846 100644 --- a/extensions/ql-vscode/src/query-history/query-history-manager.ts +++ b/extensions/ql-vscode/src/query-history/query-history-manager.ts @@ -23,7 +23,8 @@ import { URLSearchParams } from "url"; import { DisposableObject } from "../common/disposable-object"; import { ONE_HOUR_IN_MS, TWO_HOURS_IN_MS } from "../common/time"; import { assertNever, getErrorMessage } from "../common/helpers-pure"; -import type { CompletedLocalQueryInfo, LocalQueryInfo } from "../query-results"; +import type { CompletedLocalQueryInfo } from "../query-results"; +import { LocalQueryInfo } from "../query-results"; import type { QueryHistoryInfo } from "./query-history-info"; import { getActionsWorkflowRunUrl, @@ -50,7 +51,10 @@ import type { QueryRunner } from "../query-server"; import type { VariantAnalysisManager } from "../variant-analysis/variant-analysis-manager"; import type { VariantAnalysisHistoryItem } from "./variant-analysis-history-item"; import { getTotalResultCount } from "../variant-analysis/shared/variant-analysis"; -import { HistoryTreeDataProvider } from "./history-tree-data-provider"; +import { + HistoryTreeDataProvider, + SortOrder, +} from "./history-tree-data-provider"; import type { QueryHistoryDirs } from "./query-history-dirs"; import type { QueryHistoryCommands } from "../common/commands"; import type { App } from "../common/app"; @@ -97,15 +101,6 @@ const SHOW_QUERY_TEXT_QUICK_EVAL_MSG = `\ `; -enum SortOrder { - NameAsc = "NameAsc", - NameDesc = "NameDesc", - DateAsc = "DateAsc", - DateDesc = "DateDesc", - CountAsc = "CountAsc", - CountDesc = "CountDesc", -} - /** * Number of milliseconds two clicks have to arrive apart to be * considered a double-click. @@ -149,6 +144,10 @@ export class QueryHistoryManager extends DisposableObject { from: CompletedLocalQueryInfo, to: CompletedLocalQueryInfo, ) => Promise, + private readonly doComparePerformanceCallback: ( + from: CompletedLocalQueryInfo, + to: CompletedLocalQueryInfo | undefined, + ) => Promise, ) { super(); @@ -263,6 +262,8 @@ export class QueryHistoryManager extends DisposableObject { "query", ), "codeQLQueryHistory.compareWith": this.handleCompareWith.bind(this), + "codeQLQueryHistory.comparePerformanceWith": + this.handleComparePerformanceWith.bind(this), "codeQLQueryHistory.showEvalLog": createSingleSelectionCommand( this.app.logger, this.handleShowEvalLog.bind(this), @@ -331,6 +332,11 @@ export class QueryHistoryManager extends DisposableObject { this.handleOpenOnGithub.bind(this), "query", ), + "codeQLQueryHistory.viewAutofixes": createSingleSelectionCommand( + this.app.logger, + this.handleViewAutofixes.bind(this), + "query", + ), "codeQLQueryHistory.copyRepoList": createSingleSelectionCommand( this.app.logger, this.handleCopyRepoList.bind(this), @@ -342,8 +348,37 @@ export class QueryHistoryManager extends DisposableObject { }; } - public completeQuery(info: LocalQueryInfo, results: QueryWithResults): void { - info.completeThisQuery(results); + public completeQueries( + info: LocalQueryInfo, + results: QueryWithResults[], + ): void { + let first = true; + // Sorting results by the output/results basename should produce a deterministic order. + results.sort((a, b) => { + const aPath = a.query.outputBaseName; + const bPath = b.query.outputBaseName; + return aPath.localeCompare(bPath); + }); + for (const result of results) { + if (first) { + // This is the first query, so we can just update the existing info. + info.completeThisQuery(result); + first = false; + } else { + // For other queries in the same run, we'll add new entries to the history pane. In the long + // term, it would be better if we could have a single entry containing sub-entries for each + // query. + const clonedInfo = new LocalQueryInfo( + info.initialInfo, + undefined, + info.failureReason, + undefined, + info.evaluatorLogPaths, + ); + clonedInfo.completeThisQuery(result); + this.addQuery(clonedInfo); + } + } this._onDidCompleteQuery.fire(info); } @@ -549,6 +584,23 @@ export class QueryHistoryManager extends DisposableObject { }), ); + await Promise.all( + this.treeDataProvider.allHistory.map(async (item) => { + // Remove any local queries whose directories no longer exist. This can happen when running + // a query suite, which produces multiple queries in the history pane that all share the + // same underlying directory, which we may have just deleted above. (Ideally, there would be + // a first-class concept of a local multi-query run in this pane that would group them all + // together, but doing it this way at least avoids cluttering the history pane with entries + // that can no longer be viewed). + if (item.t === "local") { + const dir = item.completedQuery?.query.querySaveDir; + if (dir && !(await pathExists(dir))) { + this.treeDataProvider.remove(item); + } + } + }), + ); + await this.writeQueryHistory(); const current = this.treeDataProvider.getCurrent(); if (current !== undefined) { @@ -679,6 +731,39 @@ export class QueryHistoryManager extends DisposableObject { } } + async handleComparePerformanceWith( + singleItem: QueryHistoryInfo, + multiSelect: QueryHistoryInfo[] | undefined, + ) { + multiSelect ||= [singleItem]; + + if ( + !this.isSuccessfulCompletedLocalQueryInfo(singleItem) || + !multiSelect.every(this.isSuccessfulCompletedLocalQueryInfo) + ) { + throw new Error( + "Please only select local queries that have completed successfully.", + ); + } + + const fromItem = this.getFromQueryToCompare(singleItem, multiSelect); + + let toItem: CompletedLocalQueryInfo | undefined = undefined; + try { + toItem = await this.findOtherQueryToComparePerformance( + fromItem, + multiSelect, + ); + } catch (e) { + void showAndLogErrorMessage( + this.app.logger, + `Failed to compare queries: ${getErrorMessage(e)}`, + ); + } + + await this.doComparePerformanceCallback(fromItem, toItem); + } + async handleItemClicked(item: QueryHistoryInfo) { this.treeDataProvider.setCurrentItem(item); @@ -781,7 +866,7 @@ export class QueryHistoryManager extends DisposableObject { private async warnNoEvalLogSummary(item: LocalQueryInfo) { const evalLogLocation = - item.evalLogLocation ?? item.initialInfo.outputDir?.evalLogPath; + item.evaluatorLogPaths?.log ?? item.initialInfo.outputDir?.evalLogPath; // Summary log file doesn't exist. if (evalLogLocation && (await pathExists(evalLogLocation))) { @@ -801,7 +886,7 @@ export class QueryHistoryManager extends DisposableObject { } const evalLogLocation = - item.evalLogLocation ?? item.initialInfo.outputDir?.evalLogPath; + item.evaluatorLogPaths?.log ?? item.initialInfo.outputDir?.evalLogPath; if (evalLogLocation && (await pathExists(evalLogLocation))) { await tryOpenExternalFile(this.app.commands, evalLogLocation); @@ -816,12 +901,15 @@ export class QueryHistoryManager extends DisposableObject { } // If the summary file location wasn't saved, display error - if (!item.evalLogSummaryLocation) { + if (!item.evaluatorLogPaths?.humanReadableSummary) { await this.warnNoEvalLogSummary(item); return; } - await tryOpenExternalFile(this.app.commands, item.evalLogSummaryLocation); + await tryOpenExternalFile( + this.app.commands, + item.evaluatorLogPaths.humanReadableSummary, + ); } async handleShowEvalLogViewer(item: QueryHistoryInfo) { @@ -830,7 +918,7 @@ export class QueryHistoryManager extends DisposableObject { } // If the JSON summary file location wasn't saved, display error - if (item.jsonEvalLogSummaryLocation === undefined) { + if (item.evaluatorLogPaths?.jsonSummary === undefined) { await this.warnNoEvalLogSummary(item); return; } @@ -838,16 +926,16 @@ export class QueryHistoryManager extends DisposableObject { // TODO(angelapwen): Stream the file in. try { const evalLogData: EvalLogData[] = await parseViewerData( - item.jsonEvalLogSummaryLocation, + item.evaluatorLogPaths.jsonSummary, ); const evalLogTreeBuilder = new EvalLogTreeBuilder( item.getQueryName(), evalLogData, ); this.evalLogViewer.updateRoots(await evalLogTreeBuilder.getRoots()); - } catch (e) { + } catch { throw new Error( - `Could not read evaluator log summary JSON file to generate viewer data at ${item.jsonEvalLogSummaryLocation}.`, + `Could not read evaluator log summary JSON file to generate viewer data at ${item.evaluatorLogPaths.jsonSummary}.`, ); } } @@ -900,7 +988,7 @@ export class QueryHistoryManager extends DisposableObject { if (hasInterpretedResults) { await tryOpenExternalFile( this.app.commands, - query.resultsPaths.interpretedResultsPath, + query.interpretedResultsPath, ); } else { const label = this.labelProvider.getLabel(item); @@ -963,6 +1051,14 @@ export class QueryHistoryManager extends DisposableObject { ); } + async handleViewAutofixes(item: QueryHistoryInfo) { + if (item.t !== "variant-analysis") { + return; + } + + await this.variantAnalysisManager.viewAutofixes(item.variantAnalysis.id); + } + async handleCopyRepoList(item: QueryHistoryInfo) { if (item.t !== "variant-analysis") { return; @@ -1073,6 +1169,7 @@ export class QueryHistoryManager extends DisposableObject { detail: item.completedQuery.message, query: item, })); + if (comparableQueryLabels.length < 1) { throw new Error("No other queries available to compare with."); } @@ -1081,6 +1178,52 @@ export class QueryHistoryManager extends DisposableObject { return choice?.query; } + private async findOtherQueryToComparePerformance( + fromItem: CompletedLocalQueryInfo, + allSelectedItems: CompletedLocalQueryInfo[], + ): Promise { + // If exactly 2 items are selected, return the one that + // isn't being used as the "from" item. + if (allSelectedItems.length === 2) { + const otherItem = + fromItem === allSelectedItems[0] + ? allSelectedItems[1] + : allSelectedItems[0]; + return otherItem; + } + + if (allSelectedItems.length > 2) { + throw new Error("Please select no more than 2 queries."); + } + + // Otherwise, present a dialog so the user can choose the item they want to use. + const comparableQueryLabels = this.treeDataProvider.allHistory + .filter(this.isSuccessfulCompletedLocalQueryInfo) + .filter((otherItem) => otherItem !== fromItem) + .map((item) => ({ + label: this.labelProvider.getLabel(item), + description: item.databaseName, + detail: item.completedQuery.message, + query: item, + })); + const comparableQueryLabelsWithDefault = [ + { + label: "Single run", + description: + "Look at the performance of this run, compared to a trivial baseline", + detail: undefined, + query: undefined, + }, + ...comparableQueryLabels, + ]; + if (comparableQueryLabelsWithDefault.length < 1) { + throw new Error("No other queries available to compare with."); + } + const choice = await window.showQuickPick(comparableQueryLabelsWithDefault); + + return choice?.query; + } + /** * Updates the compare with source query. This ensures that all compare command invocations * when exactly 2 queries are selected always have the proper _from_ query. Always use diff --git a/extensions/ql-vscode/src/query-history/query-history-scrubber.ts b/extensions/ql-vscode/src/query-history/query-history-scrubber.ts index 961124116b6..1e31ccdf300 100644 --- a/extensions/ql-vscode/src/query-history/query-history-scrubber.ts +++ b/extensions/ql-vscode/src/query-history/query-history-scrubber.ts @@ -113,7 +113,9 @@ async function scrubQueries( throw new Error(EOL + errors.join(EOL)); } } catch (e) { - void extLogger.log(`Error while scrubbing queries: ${e}`); + void extLogger.log( + `Error while scrubbing queries: ${getErrorMessage(e)}`, + ); } finally { void extLogger.log(`Scrubbed ${scrubCount} old queries.`); } diff --git a/extensions/ql-vscode/src/query-history/store/query-history-dto.ts b/extensions/ql-vscode/src/query-history/store/query-history-dto.ts index bec7a2ad5da..78cb5b6064e 100644 --- a/extensions/ql-vscode/src/query-history/store/query-history-dto.ts +++ b/extensions/ql-vscode/src/query-history/store/query-history-dto.ts @@ -14,6 +14,7 @@ export type QueryHistoryItemDto = | QueryHistoryVariantAnalysisDto; export enum QueryLanguageDto { + Actions = "actions", CSharp = "csharp", Cpp = "cpp", Go = "go", @@ -21,5 +22,6 @@ export enum QueryLanguageDto { Javascript = "javascript", Python = "python", Ruby = "ruby", + Rust = "rust", Swift = "swift", } diff --git a/extensions/ql-vscode/src/query-history/store/query-history-language-domain-mapper.ts b/extensions/ql-vscode/src/query-history/store/query-history-language-domain-mapper.ts index fe8c64b5e47..1df15d41dd2 100644 --- a/extensions/ql-vscode/src/query-history/store/query-history-language-domain-mapper.ts +++ b/extensions/ql-vscode/src/query-history/store/query-history-language-domain-mapper.ts @@ -6,6 +6,8 @@ export function mapQueryLanguageToDto( language: QueryLanguage, ): QueryLanguageDto { switch (language) { + case QueryLanguage.Actions: + return QueryLanguageDto.Actions; case QueryLanguage.CSharp: return QueryLanguageDto.CSharp; case QueryLanguage.Cpp: @@ -20,6 +22,8 @@ export function mapQueryLanguageToDto( return QueryLanguageDto.Python; case QueryLanguage.Ruby: return QueryLanguageDto.Ruby; + case QueryLanguage.Rust: + return QueryLanguageDto.Rust; case QueryLanguage.Swift: return QueryLanguageDto.Swift; default: diff --git a/extensions/ql-vscode/src/query-history/store/query-history-language-dto-mapper.ts b/extensions/ql-vscode/src/query-history/store/query-history-language-dto-mapper.ts index deea1bfd80b..1e3ea1c18a8 100644 --- a/extensions/ql-vscode/src/query-history/store/query-history-language-dto-mapper.ts +++ b/extensions/ql-vscode/src/query-history/store/query-history-language-dto-mapper.ts @@ -6,6 +6,8 @@ export function mapQueryLanguageToDomainModel( language: QueryLanguageDto, ): QueryLanguage { switch (language) { + case QueryLanguageDto.Actions: + return QueryLanguage.Actions; case QueryLanguageDto.CSharp: return QueryLanguage.CSharp; case QueryLanguageDto.Cpp: @@ -20,6 +22,8 @@ export function mapQueryLanguageToDomainModel( return QueryLanguage.Python; case QueryLanguageDto.Ruby: return QueryLanguage.Ruby; + case QueryLanguageDto.Rust: + return QueryLanguage.Rust; case QueryLanguageDto.Swift: return QueryLanguage.Swift; default: diff --git a/extensions/ql-vscode/src/query-history/store/query-history-local-query-domain-mapper.ts b/extensions/ql-vscode/src/query-history/store/query-history-local-query-domain-mapper.ts index 45c7b184c11..61fe2e0bc4b 100644 --- a/extensions/ql-vscode/src/query-history/store/query-history-local-query-domain-mapper.ts +++ b/extensions/ql-vscode/src/query-history/store/query-history-local-query-domain-mapper.ts @@ -25,10 +25,10 @@ export function mapLocalQueryInfoToDto( return { initialInfo: mapInitialQueryInfoToDto(query.initialInfo), t: "local", - evalLogLocation: query.evalLogLocation, - evalLogSummaryLocation: query.evalLogSummaryLocation, - jsonEvalLogSummaryLocation: query.jsonEvalLogSummaryLocation, - evalLogSummarySymbolsLocation: query.evalLogSummarySymbolsLocation, + evalLogLocation: query.evaluatorLogPaths?.log, + evalLogSummaryLocation: query.evaluatorLogPaths?.humanReadableSummary, + jsonEvalLogSummaryLocation: query.evaluatorLogPaths?.jsonSummary, + evalLogSummarySymbolsLocation: query.evaluatorLogPaths?.summarySymbols, failureReason: query.failureReason, completedQuery: query.completedQuery && mapCompletedQueryToDto(query.completedQuery), @@ -118,6 +118,6 @@ function mapQueryEvaluationInfoToDto( databaseHasMetadataFile: queryEvaluationInfo.databaseHasMetadataFile, quickEvalPosition: queryEvaluationInfo.quickEvalPosition, metadata: queryEvaluationInfo.metadata, - resultsPaths: queryEvaluationInfo.resultsPaths, + outputBaseName: queryEvaluationInfo.outputBaseName, }; } diff --git a/extensions/ql-vscode/src/query-history/store/query-history-local-query-dto-mapper.ts b/extensions/ql-vscode/src/query-history/store/query-history-local-query-dto-mapper.ts index ee6765c80d7..aa42dd8c1a0 100644 --- a/extensions/ql-vscode/src/query-history/store/query-history-local-query-dto-mapper.ts +++ b/extensions/ql-vscode/src/query-history/store/query-history-local-query-dto-mapper.ts @@ -32,10 +32,15 @@ export function mapLocalQueryItemToDomainModel( localQuery.failureReason, localQuery.completedQuery && mapCompletedQueryInfoToDomainModel(localQuery.completedQuery), - localQuery.evalLogLocation, - localQuery.evalLogSummaryLocation, - localQuery.jsonEvalLogSummaryLocation, - localQuery.evalLogSummarySymbolsLocation, + localQuery.evalLogLocation + ? { + log: localQuery.evalLogLocation, + humanReadableSummary: localQuery.evalLogSummaryLocation, + jsonSummary: localQuery.jsonEvalLogSummaryLocation, + summarySymbols: localQuery.evalLogSummarySymbolsLocation, + endSummary: undefined, + } + : undefined, ); } @@ -99,6 +104,7 @@ function mapQueryEvaluationInfoToDomainModel( ): QueryEvaluationInfo { return new QueryEvaluationInfo( evaluationInfo.querySaveDir, + evaluationInfo.outputBaseName ?? "results", evaluationInfo.dbItemPath, evaluationInfo.databaseHasMetadataFile, evaluationInfo.quickEvalPosition, diff --git a/extensions/ql-vscode/src/query-history/store/query-history-local-query-dto.ts b/extensions/ql-vscode/src/query-history/store/query-history-local-query-dto.ts index b9a2f3448fa..2a6b3c78ea0 100644 --- a/extensions/ql-vscode/src/query-history/store/query-history-local-query-dto.ts +++ b/extensions/ql-vscode/src/query-history/store/query-history-local-query-dto.ts @@ -86,7 +86,10 @@ export interface QueryEvaluationInfoDto { databaseHasMetadataFile: boolean; quickEvalPosition?: PositionDto; metadata?: QueryMetadataDto; - resultsPaths: { + outputBaseName?: string; + + // Superceded by outputBaseName + resultsPaths?: { resultsPath: string; interpretedResultsPath: string; }; diff --git a/extensions/ql-vscode/src/query-history/store/query-history-store.ts b/extensions/ql-vscode/src/query-history/store/query-history-store.ts index 279c17c4dc0..0b54908ceba 100644 --- a/extensions/ql-vscode/src/query-history/store/query-history-store.ts +++ b/extensions/ql-vscode/src/query-history/store/query-history-store.ts @@ -61,7 +61,7 @@ export async function readQueryHistoryFromFile( // to see if they exist on disk. return true; } - const resultsPath = q.completedQuery?.query.resultsPaths.resultsPath; + const resultsPath = q.completedQuery?.query.resultsPath; return !!resultsPath && (await pathExists(resultsPath)); }, ); diff --git a/extensions/ql-vscode/src/query-results.ts b/extensions/ql-vscode/src/query-results.ts index 95f5fcb2641..3e81762bc08 100644 --- a/extensions/ql-vscode/src/query-results.ts +++ b/extensions/ql-vscode/src/query-results.ts @@ -64,7 +64,7 @@ export class CompletedQueryInfo implements QueryWithResults { * sarif file. */ public interpretedResultsSortState: InterpretedResultsSortState | undefined, - public resultCount: number = 0, + public resultCount: number = -1, /** * Map from result set name to SortedResultSetInfo. @@ -78,11 +78,11 @@ export class CompletedQueryInfo implements QueryWithResults { getResultsPath(selectedTable: string, useSorted = true): string { if (!useSorted) { - return this.query.resultsPaths.resultsPath; + return this.query.resultsPath; } return ( this.sortedResultsInfo[selectedTable]?.resultsPath || - this.query.resultsPaths.resultsPath + this.query.resultsPath ); } @@ -102,7 +102,7 @@ export class CompletedQueryInfo implements QueryWithResults { }; await server.sortBqrs( - this.query.resultsPaths.resultsPath, + this.query.resultsPath, sortedResultSetInfo.resultsPath, resultSetName, [sortState.columnIndex], @@ -200,10 +200,7 @@ export class LocalQueryInfo { private cancellationSource?: CancellationTokenSource, // used to cancel in progress queries public failureReason?: string, public completedQuery?: CompletedQueryInfo, - public evalLogLocation?: string, - public evalLogSummaryLocation?: string, - public jsonEvalLogSummaryLocation?: string, - public evalLogSummarySymbolsLocation?: string, + public evaluatorLogPaths?: EvaluatorLogPaths, ) { /**/ } @@ -229,10 +226,7 @@ export class LocalQueryInfo { /** Sets the paths to the various structured evaluator logs. */ public setEvaluatorLogPaths(logPaths: EvaluatorLogPaths): void { - this.evalLogLocation = logPaths.log; - this.evalLogSummaryLocation = logPaths.humanReadableSummary; - this.jsonEvalLogSummaryLocation = logPaths.jsonSummary; - this.evalLogSummarySymbolsLocation = logPaths.summarySymbols; + this.evaluatorLogPaths = logPaths; } /** diff --git a/extensions/ql-vscode/src/query-server/messages.ts b/extensions/ql-vscode/src/query-server/messages.ts index 44e0d515458..548e93ad32b 100644 --- a/extensions/ql-vscode/src/query-server/messages.ts +++ b/extensions/ql-vscode/src/query-server/messages.ts @@ -42,6 +42,22 @@ export interface TrimCacheParams { db: string; } +/** + * Parameters for trimming the cache of a dataset with a specific mode. + */ +export interface TrimCacheWithModeParams { + /** + * The dataset that we want to trim the cache of. + */ + db: string; + /** + * The cache cleanup mode to use. + */ + mode: ClearCacheMode; +} + +export type ClearCacheMode = "clear" | "trim" | "fit" | "overlay"; + /** * The result of trimming or clearing the cache. */ @@ -130,13 +146,29 @@ export interface RunQueryParams { extensionPacks?: string[]; } -interface RunQueryResult { +export interface RunQueryResult { resultType: QueryResultType; message?: string; expectedDbschemeName?: string; evaluationTime: number; } +export interface RunQueryInputOutput { + queryPath: string; + outputPath: string; + dilPath: string; +} + +export interface RunQueriesParams { + inputOutputPaths: RunQueryInputOutput[]; + db: string; + additionalPacks: string[]; + externalInputs: Record; + singletonExternalInputs: Record; + logPath?: string; + extensionPacks?: string[]; +} + interface UpgradeParams { db: string; additionalPacks: string[]; @@ -177,6 +209,14 @@ export const trimCache = new RequestType< ClearCacheResult, void >("evaluation/trimCache"); +/** + * Trim the cache of a dataset with a specific mode. + */ +export const trimCacheWithMode = new RequestType< + WithProgressId, + ClearCacheResult, + void +>("evaluation/trimCacheWithMode"); /** * Clear the pack cache @@ -196,6 +236,12 @@ export const runQuery = new RequestType< void >("evaluation/runQuery"); +export const runQueries = new RequestType< + WithProgressId, + Record, + void +>("evaluation/runQueries"); + export const registerDatabases = new RequestType< WithProgressId, RegisterDatabasesResult, diff --git a/extensions/ql-vscode/src/query-server/query-runner.ts b/extensions/ql-vscode/src/query-server/query-runner.ts index 7fbb3446575..5d42e6056d7 100644 --- a/extensions/ql-vscode/src/query-server/query-runner.ts +++ b/extensions/ql-vscode/src/query-server/query-runner.ts @@ -6,10 +6,12 @@ import { UserCancellationException } from "../common/vscode/progress"; import type { DatabaseItem } from "../databases/local-databases/database-item"; import { QueryOutputDir } from "../local-queries/query-output-dir"; import type { + ClearCacheMode, ClearCacheParams, Position, QueryResultType, TrimCacheParams, + TrimCacheWithModeParams, } from "./messages"; import { clearCache, @@ -17,21 +19,29 @@ import { deregisterDatabases, registerDatabases, trimCache, + trimCacheWithMode, upgradeDatabase, } from "./messages"; import type { BaseLogger, Logger } from "../common/logging"; -import { basename, join } from "path"; +import { join } from "path"; import { nanoid } from "nanoid"; import type { QueryServerClient } from "./query-server-client"; import { getOnDiskWorkspaceFolders } from "../common/vscode/workspace-folders"; import { compileAndRunQueryAgainstDatabaseCore } from "./run-queries"; export interface CoreQueryTarget { - /** The full path to the query. */ + /** Path to the query source file. */ queryPath: string; + + /** + * Base name to use for output files, without extension. For example, "foo" will result in the + * BQRS file being written to "/foo.bqrs". + */ + outputBaseName: string; + /** * Optional position of text to be used as QuickEval target. This need not be in the same file as - * `query`. + * `queryPath`. */ quickEvalPosition?: Position; /** @@ -40,14 +50,25 @@ export interface CoreQueryTarget { quickEvalCountOnly?: boolean; } -export interface CoreQueryResults { +export interface CoreQueryResult { readonly resultType: QueryResultType; readonly message: string | undefined; readonly evaluationTime: number; + + /** + * The base name of the output file. Append '.bqrs' and join with the output directory to get the + * path to the BQRS. + */ + readonly outputBaseName: string; +} + +export interface CoreQueryResults { + /** A map from query path to its results. */ + readonly results: Map; } export interface CoreQueryRun { - readonly queryTarget: CoreQueryTarget; + readonly queryTargets: CoreQueryTarget[]; readonly dbPath: string; readonly id: string; readonly outputDir: QueryOutputDir; @@ -124,9 +145,25 @@ export class QueryRunner { await this.qs.sendRequest(trimCache, params); } + async trimCacheWithModeInDatabase( + dbItem: DatabaseItem, + mode: ClearCacheMode, + ): Promise { + if (dbItem.contents === undefined) { + throw new Error("Can't clean the cache in an invalid database."); + } + + const db = dbItem.databaseUri.fsPath; + const params: TrimCacheWithModeParams = { + db, + mode, + }; + await this.qs.sendRequest(trimCacheWithMode, params); + } + public async compileAndRunQueryAgainstDatabaseCore( dbPath: string, - query: CoreQueryTarget, + queries: CoreQueryTarget[], additionalPacks: string[], extensionPacks: string[] | undefined, additionalRunQueryArgs: Record, @@ -142,7 +179,7 @@ export class QueryRunner { return await compileAndRunQueryAgainstDatabaseCore( this.qs, dbPath, - query, + queries, generateEvalLog, additionalPacks, extensionPacks, @@ -213,19 +250,20 @@ export class QueryRunner { */ public createQueryRun( dbPath: string, - query: CoreQueryTarget, + queries: CoreQueryTarget[], generateEvalLog: boolean, additionalPacks: string[], extensionPacks: string[] | undefined, additionalRunQueryArgs: Record, queryStorageDir: string, - id = `${basename(query.queryPath)}-${nanoid()}`, + queryBasename: string, templates: Record | undefined, ): CoreQueryRun { + const id = `${queryBasename}-${nanoid()}`; const outputDir = new QueryOutputDir(join(queryStorageDir, id)); return { - queryTarget: query, + queryTargets: queries, dbPath, id, outputDir, @@ -238,10 +276,10 @@ export class QueryRunner { id, outputDir, dbPath, - queryTarget: query, + queryTargets: queries, ...(await this.compileAndRunQueryAgainstDatabaseCore( dbPath, - query, + queries, additionalPacks, extensionPacks, additionalRunQueryArgs, diff --git a/extensions/ql-vscode/src/query-server/query-server-client.ts b/extensions/ql-vscode/src/query-server/query-server-client.ts index c342e3b4996..e62637ff3ad 100644 --- a/extensions/ql-vscode/src/query-server/query-server-client.ts +++ b/extensions/ql-vscode/src/query-server/query-server-client.ts @@ -95,6 +95,14 @@ export class QueryServerClient extends DisposableObject { return this.opts.logger; } + /** + * Whether this query server supports the 'evaluation/runQueries' method for running multiple + * queries at once. + */ + async supportsRunQueriesMethod(): Promise { + return await this.cliServer.cliConstraints.supportsQueryServerRunQueries(); + } + /** Stops the query server by disposing of the current server process. */ private stopQueryServer(): void { if (this.serverProcess !== undefined) { @@ -296,7 +304,7 @@ export class QueryServerClient extends DisposableObject { } } - public dispose(disposeHandler?: DisposeHandler | undefined): void { + public dispose(disposeHandler?: DisposeHandler): void { this.progressCallbacks = {}; this.stopQueryServer(); super.dispose(disposeHandler); diff --git a/extensions/ql-vscode/src/query-server/run-queries.ts b/extensions/ql-vscode/src/query-server/run-queries.ts index 593979118e7..5a35144728f 100644 --- a/extensions/ql-vscode/src/query-server/run-queries.ts +++ b/extensions/ql-vscode/src/query-server/run-queries.ts @@ -1,10 +1,19 @@ import type { CancellationToken } from "vscode"; import type { ProgressCallback } from "../common/vscode/progress"; -import type { RunQueryParams } from "./messages"; -import { runQuery } from "./messages"; +import type { + RunQueryParams, + RunQueryResult, + RunQueriesParams, + RunQueryInputOutput, +} from "./messages"; +import { runQueries, runQuery } from "./messages"; import type { QueryOutputDir } from "../local-queries/query-output-dir"; import type { QueryServerClient } from "./query-server-client"; -import type { CoreQueryResults, CoreQueryTarget } from "./query-runner"; +import type { + CoreQueryResult, + CoreQueryResults, + CoreQueryTarget, +} from "./query-runner"; import type { BaseLogger } from "../common/logging"; /** @@ -24,7 +33,7 @@ import type { BaseLogger } from "../common/logging"; export async function compileAndRunQueryAgainstDatabaseCore( qs: QueryServerClient, dbPath: string, - query: CoreQueryTarget, + targets: CoreQueryTarget[], generateEvalLog: boolean, additionalPacks: string[], extensionPacks: string[] | undefined, @@ -35,12 +44,36 @@ export async function compileAndRunQueryAgainstDatabaseCore( templates: Record | undefined, logger: BaseLogger, ): Promise { - const target = - query.quickEvalPosition !== undefined + if (targets.length > 1) { + // We are running a batch of multiple queries; use the new query server API for that. + if (targets.some((target) => target.quickEvalPosition !== undefined)) { + throw new Error( + "Quick evaluation is not supported when running multiple queries.", + ); + } + return compileAndRunQueriesAgainstDatabaseCore( + qs, + dbPath, + targets, + generateEvalLog, + additionalPacks, + extensionPacks, + additionalRunQueryArgs, + outputDir, + progress, + token, + templates, + logger, + ); + } + + const target = targets[0]; + const compilationTarget = + target.quickEvalPosition !== undefined ? { quickEval: { - quickEvalPos: query.quickEvalPosition, - countOnly: query.quickEvalCountOnly, + quickEvalPos: target.quickEvalPosition, + countOnly: target.quickEvalCountOnly, }, } : { query: {} }; @@ -51,11 +84,11 @@ export async function compileAndRunQueryAgainstDatabaseCore( additionalPacks, externalInputs: {}, singletonExternalInputs: templates || {}, - outputPath: outputDir.bqrsPath, - queryPath: query.queryPath, - dilPath: outputDir.dilPath, + queryPath: target.queryPath, + outputPath: outputDir.getBqrsPath(target.outputBaseName), + dilPath: outputDir.getDilPath(target.outputBaseName), logPath: evalLogPath, - target, + target: compilationTarget, extensionPacks, // Add any additional arguments without interpretation. ...additionalRunQueryArgs, @@ -67,10 +100,83 @@ export async function compileAndRunQueryAgainstDatabaseCore( // properly will require a change in the query server. qs.activeQueryLogger = logger; const result = await qs.sendRequest(runQuery, queryToRun, token, progress); + return { + results: new Map([ + [ + target.queryPath, + { + resultType: result.resultType, + message: result.message, + evaluationTime: result.evaluationTime, + outputBaseName: target.outputBaseName, + }, + ], + ]), + }; +} + +async function compileAndRunQueriesAgainstDatabaseCore( + qs: QueryServerClient, + dbPath: string, + targets: CoreQueryTarget[], + generateEvalLog: boolean, + additionalPacks: string[], + extensionPacks: string[] | undefined, + additionalRunQueryArgs: Record, + outputDir: QueryOutputDir, + progress: ProgressCallback, + token: CancellationToken, + templates: Record | undefined, + logger: BaseLogger, +): Promise { + if (!(await qs.supportsRunQueriesMethod())) { + throw new Error( + "The CodeQL CLI does not support the 'evaluation/runQueries' query-server command. Please update to the latest version.", + ); + } + const inputOutputPaths: RunQueryInputOutput[] = targets.map((target) => { + return { + queryPath: target.queryPath, + outputPath: outputDir.getBqrsPath(target.outputBaseName), + dilPath: outputDir.getDilPath(target.outputBaseName), + }; + }); + const evalLogPath = generateEvalLog ? outputDir.evalLogPath : undefined; + const queriesToRun: RunQueriesParams = { + db: dbPath, + additionalPacks, + externalInputs: {}, + singletonExternalInputs: templates || {}, + inputOutputPaths, + logPath: evalLogPath, + extensionPacks, + // Add any additional arguments without interpretation. + ...additionalRunQueryArgs, + }; + + // Update the active query logger every time there is a new request to compile. + // This isn't ideal because in situations where there are queries running + // in parallel, each query's log messages are interleaved. Fixing this + // properly will require a change in the query server. + qs.activeQueryLogger = logger; + const queryResults: Record = await qs.sendRequest( + runQueries, + queriesToRun, + token, + progress, + ); + const coreQueryResults = new Map(); + targets.forEach((target) => { + const queryResult = queryResults[target.queryPath]; + coreQueryResults.set(target.queryPath, { + resultType: queryResult.resultType, + message: queryResult.message, + evaluationTime: queryResult.evaluationTime, + outputBaseName: target.outputBaseName, + }); + }); return { - resultType: result.resultType, - message: result.message, - evaluationTime: result.evaluationTime, + results: coreQueryResults, }; } diff --git a/extensions/ql-vscode/src/query-testing/test-runner.ts b/extensions/ql-vscode/src/query-testing/test-runner.ts index 23da9d0c1eb..8c38fca4ab6 100644 --- a/extensions/ql-vscode/src/query-testing/test-runner.ts +++ b/extensions/ql-vscode/src/query-testing/test-runner.ts @@ -61,7 +61,7 @@ export class TestRunner extends DisposableObject { })) { await eventHandler(event); } - } catch (e) { + } catch { // CodeQL testing can throw exception even in normal scenarios. For example, if the test run // produces no output (which is normal), the testing command would throw an exception on // unexpected EOF during json parsing. So nothing needs to be done here - all the relevant @@ -125,7 +125,7 @@ export class TestRunner extends DisposableObject { // So we need to display the error message ourselves and then rethrow. void showAndLogWarningMessage( extLogger, - `Cannot reopen database ${uri}: ${e}`, + `Cannot reopen database ${uri.toString()}: ${getErrorMessage(e)}`, ); throw e; } diff --git a/extensions/ql-vscode/src/run-queries-shared.ts b/extensions/ql-vscode/src/run-queries-shared.ts index 4a91cad5e58..03e25df46dc 100644 --- a/extensions/ql-vscode/src/run-queries-shared.ts +++ b/extensions/ql-vscode/src/run-queries-shared.ts @@ -27,7 +27,6 @@ import type { import type { BaseLogger } from "./common/logging"; import { showAndLogWarningMessage } from "./common/logging"; import { extLogger } from "./common/logging/vscode"; -import { generateSummarySymbolsFile } from "./log-insights/summary-parser"; import { getErrorMessage } from "./common/helpers-pure"; import { createHash } from "crypto"; import { QueryOutputDir } from "./local-queries/query-output-dir"; @@ -65,6 +64,7 @@ export class QueryEvaluationInfo extends QueryOutputDir { */ constructor( querySaveDir: string, + public readonly outputBaseName: string, public readonly dbItemPath: string, public readonly databaseHasMetadataFile: boolean, public readonly quickEvalPosition?: Position, @@ -73,23 +73,30 @@ export class QueryEvaluationInfo extends QueryOutputDir { super(querySaveDir); } - get resultsPaths() { - return { - resultsPath: this.bqrsPath, - interpretedResultsPath: join( - this.querySaveDir, - this.metadata?.kind === "graph" - ? "graphResults" - : "interpretedResults.sarif", - ), - }; + get resultsPath() { + return this.getBqrsPath(this.outputBaseName); } + + get interpretedResultsPath() { + return this.getInterpretedResultsPath( + this.metadata?.kind, + this.outputBaseName, + ); + } + + get csvPath() { + return this.getCsvPath(this.outputBaseName); + } + + get dilPath() { + return this.getDilPath(this.outputBaseName); + } + getSortedResultSetPath(resultSetName: string) { const hasher = createHash("sha256"); hasher.update(resultSetName); - return join( - this.querySaveDir, - `sortedResults-${hasher.digest("hex")}.bqrs`, + return this.getBqrsPath( + `${this.outputBaseName}-sorted-${hasher.digest("hex")}`, ); } @@ -127,7 +134,7 @@ export class QueryEvaluationInfo extends QueryOutputDir { * Holds if this query actually has produced interpreted results. */ async hasInterpretedResults(): Promise { - return pathExists(this.resultsPaths.interpretedResultsPath); + return pathExists(this.interpretedResultsPath); } /** @@ -205,7 +212,7 @@ export class QueryEvaluationInfo extends QueryOutputDir { let nextOffset: number | undefined = 0; do { const chunk: DecodedBqrsChunk = await cliServer.bqrsDecode( - this.resultsPaths.resultsPath, + this.resultsPath, resultSet, { pageSize: 100, @@ -218,7 +225,7 @@ export class QueryEvaluationInfo extends QueryOutputDir { .map((v, i) => { if (chunk.columns[i].kind === "String") { return `"${ - typeof v === "string" ? v.replaceAll('"', '""') : v + typeof v === "string" ? v.replaceAll('"', '""') : v.toString() }"`; } else if (chunk.columns[i].kind === "Entity") { return (v as BqrsEntityValue).label; @@ -243,9 +250,9 @@ export class QueryEvaluationInfo extends QueryOutputDir { * If the query has no result sets, then return undefined. */ async chooseResultSet(cliServer: CodeQLCliServer) { - const resultSets = ( - await cliServer.bqrsInfo(this.resultsPaths.resultsPath, 0) - )["result-sets"]; + const resultSets = (await cliServer.bqrsInfo(this.resultsPath))[ + "result-sets" + ]; if (!resultSets.length) { return undefined; } @@ -284,7 +291,7 @@ export class QueryEvaluationInfo extends QueryOutputDir { } await cliServer.generateResultsCsv( ensureMetadataIsComplete(this.metadata), - this.resultsPaths.resultsPath, + this.resultsPath, this.csvPath, sourceInfo, ); @@ -348,6 +355,23 @@ export function validateQueryPath( } } +/** + * Validates that the specified URI represents a QL query suite (QLS), and returns the file system + * path to that suite. + */ +export function validateQuerySuiteUri(suiteUri: Uri): string { + if (suiteUri.scheme !== "file") { + throw new Error("Can only run queries that are on disk."); + } + const suitePath = suiteUri.fsPath; + if (!suitePath.endsWith(".qls")) { + throw new Error( + 'The selected resource is not a CodeQL query suite; It should have the extension ".qls".', + ); + } + return suitePath; +} + export interface QuickEvalContext { quickEvalPosition: Position; quickEvalText: string; @@ -545,15 +569,6 @@ export async function generateEvalLogSummaries( if (humanReadableSummary !== undefined) { summarySymbols = outputDir.evalLogSummarySymbolsPath; - if ( - !(await cliServer.cliConstraints.supportsGenerateSummarySymbolMap()) - ) { - // We're using an old CLI that cannot generate the summary symbols file while generating the - // human-readable log summary. As a fallback, create it by parsing the human-readable - // summary. - progress(progressUpdate(3, 3, "Generating summary symbols file")); - await generateSummarySymbolsFile(humanReadableSummary, summarySymbols); - } } } @@ -607,7 +622,7 @@ export async function logEndSummary( const endSummaryContent = await readFile(endSummary, "utf-8"); void logger.log(" --- Evaluator Log Summary --- "); void logger.log(endSummaryContent); - } catch (e) { + } catch { void showAndLogWarningMessage( extLogger, `Could not read structured evaluator log end of summary file at ${endSummary}.`, diff --git a/extensions/ql-vscode/src/status-bar.ts b/extensions/ql-vscode/src/status-bar.ts index 4dd9f2523c2..66b7d2270c3 100644 --- a/extensions/ql-vscode/src/status-bar.ts +++ b/extensions/ql-vscode/src/status-bar.ts @@ -55,7 +55,7 @@ export class CodeQlStatusBarHandler extends DisposableObject { this.item.text = `CodeQL${canary}`; const version = await this.cli.getVersion(); - this.item.text = `CodeQL CLI v${version}${canary}`; + this.item.text = `CodeQL CLI v${version.toString()}${canary}`; this.item.show(); } } diff --git a/extensions/ql-vscode/src/stories/Overview.mdx b/extensions/ql-vscode/src/stories/Overview.mdx index cc06ee5cfca..7d9939cb4d9 100644 --- a/extensions/ql-vscode/src/stories/Overview.mdx +++ b/extensions/ql-vscode/src/stories/Overview.mdx @@ -1,7 +1,5 @@ import { Canvas, Meta, Story } from '@storybook/blocks'; -import { VSCodeButton } from '@vscode/webview-ui-toolkit/react'; - import iframeImage from './images/update-css-variables-iframe.png'; import stylesImage from './images/update-css-variables-styles.png'; import bodyImage from './images/update-css-variables-body.png'; diff --git a/extensions/ql-vscode/src/stories/common/Alert.stories.tsx b/extensions/ql-vscode/src/stories/common/Alert.stories.tsx index f82eaa17100..2267ccb2696 100644 --- a/extensions/ql-vscode/src/stories/common/Alert.stories.tsx +++ b/extensions/ql-vscode/src/stories/common/Alert.stories.tsx @@ -1,8 +1,9 @@ import type { Meta, StoryFn } from "@storybook/react"; -import { VSCodeButton, VSCodeLink } from "@vscode/webview-ui-toolkit/react"; +import { VscodeButton } from "@vscode-elements/react-elements"; import { VariantAnalysisContainer } from "../../view/variant-analysis/VariantAnalysisContainer"; import { Alert } from "../../view/common"; +import { Link } from "../../view/common/Link"; export default { title: "Alert", @@ -24,7 +25,7 @@ Warning.args = { title: "This query found a warning", message: ( <> - Warning content with links + Warning content with links ), }; @@ -50,7 +51,7 @@ Error.args = { title: "This query found an error", message: ( <> - Error content with links + Error content with links ), }; @@ -70,8 +71,7 @@ ErrorExample.args = { <> Request to https://api.github.com/repos/octodemo/Hello-World/code-scanning/codeql/queries - failed. View actions logs and try running this - query again. + failed. View actions logs and try running this query again. ), }; @@ -84,8 +84,8 @@ ErrorWithButtons.args = { "Request to https://api.github.com/repos/octodemo/Hello-World/code-scanning/codeql/queries failed. Try running this query again.", actions: ( <> - View actions logs - Retry + View actions logs + Retry ), }; diff --git a/extensions/ql-vscode/src/stories/common/ResponsiveContainer.stories.tsx b/extensions/ql-vscode/src/stories/common/ResponsiveContainer.stories.tsx index 117a9570870..91bf0d9e156 100644 --- a/extensions/ql-vscode/src/stories/common/ResponsiveContainer.stories.tsx +++ b/extensions/ql-vscode/src/stories/common/ResponsiveContainer.stories.tsx @@ -7,7 +7,7 @@ export default { component: ResponsiveContainerComponent, } as Meta; -const Template: StoryFn = (args) => ( +const Template: StoryFn = () => ( Hello diff --git a/extensions/ql-vscode/src/stories/method-modeling/MethodModelingInputs.stories.tsx b/extensions/ql-vscode/src/stories/method-modeling/MethodModelingInputs.stories.tsx index 8cea272943c..2220e81c132 100644 --- a/extensions/ql-vscode/src/stories/method-modeling/MethodModelingInputs.stories.tsx +++ b/extensions/ql-vscode/src/stories/method-modeling/MethodModelingInputs.stories.tsx @@ -53,20 +53,3 @@ FullyModeledMethod.args = { method, modeledMethod, }; - -export const ModelingInProgress = Template.bind({}); -ModelingInProgress.args = { - method, - modeledMethod, - isModelingInProgress: true, -}; - -const generatedModeledMethod = createSinkModeledMethod({ - provenance: "ai-generated", -}); -export const ModelingNotAccepted = Template.bind({}); -ModelingNotAccepted.args = { - method, - modeledMethod: generatedModeledMethod, - modelPending: true, -}; diff --git a/extensions/ql-vscode/src/stories/model-editor/InProgressDropdown.stories.tsx b/extensions/ql-vscode/src/stories/model-editor/InProgressDropdown.stories.tsx deleted file mode 100644 index c9db432c043..00000000000 --- a/extensions/ql-vscode/src/stories/model-editor/InProgressDropdown.stories.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import type { Meta, StoryFn } from "@storybook/react"; - -import { InProgressDropdown as InProgressDropdownComponent } from "../../view/model-editor/InProgressDropdown"; - -export default { - title: "CodeQL Model Editor/In Progress Dropdown", - component: InProgressDropdownComponent, -} as Meta; - -const Template: StoryFn = (args) => ( - -); - -export const InProgressDropdown = Template.bind({}); diff --git a/extensions/ql-vscode/src/stories/model-editor/LibraryRow.stories.tsx b/extensions/ql-vscode/src/stories/model-editor/LibraryRow.stories.tsx index bcb51057606..16cb303b786 100644 --- a/extensions/ql-vscode/src/stories/model-editor/LibraryRow.stories.tsx +++ b/extensions/ql-vscode/src/stories/model-editor/LibraryRow.stories.tsx @@ -220,10 +220,9 @@ LibraryRow.args = { ], }, modifiedSignatures: new Set(["org.sql2o.Sql2o#Sql2o(String)"]), - inProgressMethods: new Set(), + selectedSignatures: new Set(["org.sql2o.Sql2o#Sql2o(String)"]), viewState: createMockModelEditorViewState({ showGenerateButton: true, - showLlmButton: true, }), hideModeledMethods: false, }; diff --git a/extensions/ql-vscode/src/stories/model-editor/MethodRow.stories.tsx b/extensions/ql-vscode/src/stories/model-editor/MethodRow.stories.tsx index 6fdc64a1a41..f7bf0748b20 100644 --- a/extensions/ql-vscode/src/stories/model-editor/MethodRow.stories.tsx +++ b/extensions/ql-vscode/src/stories/model-editor/MethodRow.stories.tsx @@ -96,7 +96,6 @@ const modeledMethod: ModeledMethod = { const viewState = createMockModelEditorViewState({ showGenerateButton: true, - showLlmButton: true, }); export const Unmodeled = Template.bind({}); @@ -113,6 +112,7 @@ Source.args = { modeledMethods: [{ ...modeledMethod, type: "source" }], methodCanBeModeled: true, viewState, + onChange: () => {}, }; export const Sink = Template.bind({}); @@ -121,6 +121,7 @@ Sink.args = { modeledMethods: [{ ...modeledMethod, type: "sink" }], methodCanBeModeled: true, viewState, + onChange: () => {}, }; export const Summary = Template.bind({}); @@ -137,6 +138,7 @@ Neutral.args = { modeledMethods: [{ ...modeledMethod, type: "neutral" }], methodCanBeModeled: true, viewState, + onChange: () => {}, }; export const AlreadyModeled = Template.bind({}); @@ -146,15 +148,6 @@ AlreadyModeled.args = { viewState, }; -export const ModelingInProgress = Template.bind({}); -ModelingInProgress.args = { - method, - modeledMethods: [modeledMethod], - modelingInProgress: true, - methodCanBeModeled: true, - viewState, -}; - export const MultipleModelings = Template.bind({}); MultipleModelings.args = { method, @@ -165,6 +158,7 @@ MultipleModelings.args = { ], methodCanBeModeled: true, viewState, + onChange: () => {}, }; export const ValidationError = Template.bind({}); @@ -176,6 +170,7 @@ ValidationError.args = { ], methodCanBeModeled: true, viewState, + onChange: () => {}, }; export const MultipleValidationErrors = Template.bind({}); @@ -190,4 +185,5 @@ MultipleValidationErrors.args = { ], methodCanBeModeled: true, viewState, + onChange: () => {}, }; diff --git a/extensions/ql-vscode/src/stories/model-editor/ModelEditor.stories.tsx b/extensions/ql-vscode/src/stories/model-editor/ModelEditor.stories.tsx index 71c199845f4..33569b77db5 100644 --- a/extensions/ql-vscode/src/stories/model-editor/ModelEditor.stories.tsx +++ b/extensions/ql-vscode/src/stories/model-editor/ModelEditor.stories.tsx @@ -27,7 +27,6 @@ ModelEditor.args = { dataExtensions: [], }, showGenerateButton: true, - showLlmButton: true, }), initialMethods: [ { diff --git a/extensions/ql-vscode/src/stories/results/AlertTable.stories.tsx b/extensions/ql-vscode/src/stories/results/AlertTable.stories.tsx index bfb179a1fed..d2cc19f3916 100644 --- a/extensions/ql-vscode/src/stories/results/AlertTable.stories.tsx +++ b/extensions/ql-vscode/src/stories/results/AlertTable.stories.tsx @@ -431,4 +431,7 @@ WithCodeFlows.args = { showRawResults={() => action("show-raw-results")} /> ), + userSettings: { + shouldShowProvenance: true, + }, }; diff --git a/extensions/ql-vscode/src/stories/tsconfig.json b/extensions/ql-vscode/src/stories/tsconfig.json index 7c10f9902ac..498d867b626 100644 --- a/extensions/ql-vscode/src/stories/tsconfig.json +++ b/extensions/ql-vscode/src/stories/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { "module": "esnext", "moduleResolution": "node", - "target": "es6", + "target": "es2021", "outDir": "out", "lib": ["ES2021", "dom"], "jsx": "react-jsx", diff --git a/extensions/ql-vscode/src/tmp-dir.ts b/extensions/ql-vscode/src/tmp-dir.ts index b556150a0df..51b1cc814ec 100644 --- a/extensions/ql-vscode/src/tmp-dir.ts +++ b/extensions/ql-vscode/src/tmp-dir.ts @@ -1,5 +1,6 @@ import { dirSync } from "tmp-promise"; import { extLogger } from "./common/logging/vscode"; +import { getErrorMessage } from "./common/helpers-pure"; // Shared temporary folder for the extension. export const tmpDir = dirSync({ @@ -14,7 +15,7 @@ export const tmpDirDisposal = { tmpDir.removeCallback(); } catch (e) { void extLogger.log( - `Failed to remove temporary directory ${tmpDir.name}: ${e}`, + `Failed to remove temporary directory ${tmpDir.name}: ${getErrorMessage(e)}`, ); } }, diff --git a/extensions/ql-vscode/src/variant-analysis/gh-api/gh-api-client.ts b/extensions/ql-vscode/src/variant-analysis/gh-api/gh-api-client.ts index 3855951865e..be8d323c7c4 100644 --- a/extensions/ql-vscode/src/variant-analysis/gh-api/gh-api-client.ts +++ b/extensions/ql-vscode/src/variant-analysis/gh-api/gh-api-client.ts @@ -1,4 +1,3 @@ -import type { OctokitResponse } from "@octokit/types/dist-types"; import type { Credentials } from "../../common/authentication"; import type { VariantAnalysisSubmission } from "../shared/variant-analysis"; import type { @@ -26,13 +25,12 @@ export async function submitVariantAnalysis( repository_owners: databases.repositoryOwners, }; - const response: OctokitResponse = await octokit.request( - "POST /repositories/:controllerRepoId/code-scanning/codeql/variant-analyses", - { - controllerRepoId, - data, - }, - ); + const response = await octokit.request({ + method: "POST", + url: "/repositories/:controllerRepoId/code-scanning/codeql/variant-analyses", + controllerRepoId, + data, + }); return response.data; } @@ -44,13 +42,12 @@ export async function getVariantAnalysis( ): Promise { const octokit = await credentials.getOctokit(); - const response: OctokitResponse = await octokit.request( - "GET /repositories/:controllerRepoId/code-scanning/codeql/variant-analyses/:variantAnalysisId", - { - controllerRepoId, - variantAnalysisId, - }, - ); + const response = await octokit.request({ + method: "GET", + url: "/repositories/:controllerRepoId/code-scanning/codeql/variant-analyses/:variantAnalysisId", + controllerRepoId, + variantAnalysisId, + }); return response.data; } @@ -63,15 +60,13 @@ export async function getVariantAnalysisRepo( ): Promise { const octokit = await credentials.getOctokit(); - const response: OctokitResponse = - await octokit.request( - "GET /repositories/:controllerRepoId/code-scanning/codeql/variant-analyses/:variantAnalysisId/repositories/:repoId", - { - controllerRepoId, - variantAnalysisId, - repoId, - }, - ); + const response = await octokit.request({ + method: "GET", + url: "/repositories/:controllerRepoId/code-scanning/codeql/variant-analyses/:variantAnalysisId/repositories/:repoId", + controllerRepoId, + variantAnalysisId, + repoId, + }); return response.data; } @@ -104,9 +99,9 @@ export async function createGist( }); if (response.status >= 300) { throw new Error( - `Error exporting variant analysis results: ${response.status} ${ - response?.data || "" - }`, + `Error exporting variant analysis results: ${response.status} ${JSON.stringify( + response?.data, + )}`, ); } return response.data.html_url; diff --git a/extensions/ql-vscode/src/variant-analysis/repo-states-store/repo-states-store.ts b/extensions/ql-vscode/src/variant-analysis/repo-states-store/repo-states-store.ts index f2acb35caf6..647e125821a 100644 --- a/extensions/ql-vscode/src/variant-analysis/repo-states-store/repo-states-store.ts +++ b/extensions/ql-vscode/src/variant-analysis/repo-states-store/repo-states-store.ts @@ -26,7 +26,7 @@ export async function readRepoStates( const repoStates = mapRepoStatesToDomainModel(repoStatesData); return repoStates; - } catch (e) { + } catch { // Ignore this error, we simply might not have downloaded anything yet return undefined; } diff --git a/extensions/ql-vscode/src/variant-analysis/run-remote-query.ts b/extensions/ql-vscode/src/variant-analysis/run-remote-query.ts index 2251afe4921..5b29eed8fd0 100644 --- a/extensions/ql-vscode/src/variant-analysis/run-remote-query.ts +++ b/extensions/ql-vscode/src/variant-analysis/run-remote-query.ts @@ -1,10 +1,9 @@ import type { CancellationToken } from "vscode"; -import { Uri, window } from "vscode"; -import { join, sep, basename, relative } from "path"; -import { dump, load } from "js-yaml"; -import { copy, writeFile, readFile, mkdirp } from "fs-extra"; -import type { DirectoryResult } from "tmp-promise"; -import { dir, tmpName } from "tmp-promise"; +import { window } from "vscode"; +import { join, basename, relative } from "path"; +import { dump } from "js-yaml"; +import { copy, writeFile, readFile, mkdirp, remove } from "fs-extra"; +import { nanoid } from "nanoid"; import { tmpDir } from "../tmp-dir"; import { getOnDiskWorkspaceFolders } from "../common/vscode/workspace-folders"; import type { Credentials } from "../common/authentication"; @@ -28,13 +27,7 @@ import { } from "./repository-selection"; import type { Repository } from "./shared/repository"; import type { DbManager } from "../databases/db-manager"; -import { - getQlPackFilePath, - FALLBACK_QLPACK_FILENAME, - QLPACK_FILENAMES, - QLPACK_LOCK_FILENAMES, -} from "../common/ql"; -import type { QlPackFile } from "../packaging/qlpack-file"; +import { FALLBACK_QLPACK_FILENAME } from "../common/ql"; import { expandShortPaths } from "../common/short-paths"; import type { QlPackDetails } from "./ql-pack-details"; import type { ModelPackDetails } from "../common/model-pack-details"; @@ -69,8 +62,6 @@ async function generateQueryPack( ); const mustSynthesizePack = qlPackDetails.qlPackFilePath === undefined; - const cliSupportsMrvaPackCreate = - await cliServer.cliConstraints.supportsMrvaPackCreate(); let targetPackPath: string; let needsInstall: boolean; @@ -88,15 +79,6 @@ async function generateQueryPack( // Install packs, since we just synthesized a dependency on the language's standard library. needsInstall = true; - } else if (!cliSupportsMrvaPackCreate) { - // We need to copy the query pack to a temporary directory and then fix it up to work with MRVA. - targetPackPath = tmpDir.queryPackDir; - await copyExistingQueryPack(cliServer, qlPackDetails, targetPackPath); - - // We should already have all the dependencies available, but these older versions of the CLI - // have a bug where they will not search `--additional-packs` during validation in `codeql pack bundle`. - // Installing the packs will ensure that any extension packs get put in the right place. - needsInstall = true; } else { // The CLI supports creating a MRVA query pack directly from the source pack. targetPackPath = qlPackDetails.qlPackRootPath; @@ -114,36 +96,18 @@ async function generateQueryPack( await cliServer.clearCache(); } - let precompilationOpts: string[]; - if (cliSupportsMrvaPackCreate) { - if ( - qlPackDetails.queryFiles.length > 1 && - !(await cliServer.cliConstraints.supportsPackCreateWithMultipleQueries()) - ) { - throw new Error( - `Installed CLI version does not allow creating a MRVA pack with multiple queries`, - ); - } - - const queryOpts = qlPackDetails.queryFiles.flatMap((q) => [ - "--query", - join(targetPackPath, relative(qlPackDetails.qlPackRootPath, q)), - ]); - - precompilationOpts = [ - "--mrva", - ...queryOpts, - // We need to specify the extension packs as dependencies so that they are included in the MRVA pack. - // The version range doesn't matter, since they'll always be found by source lookup. - ...extensionPacks.map((p) => `--extension-pack=${p.name}@*`), - ]; - } else { - precompilationOpts = ["--qlx"]; - - if (extensionPacks.length > 0) { - await addExtensionPacksAsDependencies(targetPackPath, extensionPacks); - } - } + const queryOpts = qlPackDetails.queryFiles.flatMap((q) => [ + "--query", + join(targetPackPath, relative(qlPackDetails.qlPackRootPath, q)), + ]); + + const precompilationOpts = [ + "--mrva", + ...queryOpts, + // We need to specify the extension packs as dependencies so that they are included in the MRVA pack. + // The version range doesn't matter, since they'll always be found by source lookup. + ...extensionPacks.map((p) => `--extension-pack=${p.name}@*`), + ]; const bundlePath = tmpDir.bundleFile; void extLogger.log( @@ -191,93 +155,29 @@ async function createNewQueryPack( ); } -async function copyExistingQueryPack( - cliServer: CodeQLCliServer, - qlPackDetails: QlPackDetails, - targetPackPath: string, -) { - const toCopy = await cliServer.packPacklist( - qlPackDetails.qlPackRootPath, - false, - ); - - // Also include query files that contain extensible predicates. These query files are not - // needed for the query to run, but they are needed for the query pack to pass deep validation - // of data extensions. - const metadata = await cliServer.generateExtensiblePredicateMetadata( - qlPackDetails.qlPackRootPath, - ); - metadata.extensible_predicates.forEach((predicate) => { - if (predicate.path.endsWith(".ql")) { - toCopy.push(join(qlPackDetails.qlPackRootPath, predicate.path)); - } - }); - - [ - // also copy the lock file (either new name or old name) and the query file itself. These are not included in the packlist. - ...QLPACK_LOCK_FILENAMES.map((f) => join(qlPackDetails.qlPackRootPath, f)), - ...qlPackDetails.queryFiles, - ].forEach((absolutePath) => { - if (absolutePath) { - toCopy.push(absolutePath); - } - }); - - let copiedCount = 0; - await copy(qlPackDetails.qlPackRootPath, targetPackPath, { - filter: (file: string) => - // copy file if it is in the packlist, or it is a parent directory of a file in the packlist - !!toCopy.find((f) => { - // Normalized paths ensure that Windows drive letters are capitalized consistently. - const normalizedPath = Uri.file(f).fsPath; - const matches = - normalizedPath === file || normalizedPath.startsWith(file + sep); - if (matches) { - copiedCount++; - } - return matches; - }), - }); - - void extLogger.log(`Copied ${copiedCount} files to ${targetPackPath}`); - - await fixPackFile(targetPackPath, qlPackDetails); -} - interface RemoteQueryTempDir { - remoteQueryDir: DirectoryResult; + remoteQueryDir: string; queryPackDir: string; compiledPackDir: string; bundleFile: string; } async function createRemoteQueriesTempDirectory(): Promise { - const shortRemoteQueryDir = await dir({ - dir: tmpDir.name, - unsafeCleanup: true, - }); // Expand 8.3 filenames here to work around a CLI bug where `codeql pack bundle` produces an empty // archive if the pack path contains any 8.3 components. - const remoteQueryDir = { - ...shortRemoteQueryDir, - path: await expandShortPaths(shortRemoteQueryDir.path, extLogger), - }; - const queryPackDir = join(remoteQueryDir.path, "query-pack"); + const tmpDirPath = await expandShortPaths(tmpDir.name, extLogger); + + const remoteQueryDir = join(tmpDirPath, `remote-query-${nanoid()}`); + await mkdirp(remoteQueryDir); + + const queryPackDir = join(remoteQueryDir, "query-pack"); await mkdirp(queryPackDir); - const compiledPackDir = join(remoteQueryDir.path, "compiled-pack"); - const bundleFile = await expandShortPaths( - await getPackedBundlePath(tmpDir.name), - extLogger, - ); - return { remoteQueryDir, queryPackDir, compiledPackDir, bundleFile }; -} -async function getPackedBundlePath(remoteQueryDir: string): Promise { - return tmpName({ - dir: remoteQueryDir, - postfix: "generated.tgz", - prefix: "qlpack", - }); + const compiledPackDir = join(remoteQueryDir, "compiled-pack"); + + const bundleFile = join(remoteQueryDir, `qlpack-${nanoid()}-generated.tgz`); + + return { remoteQueryDir, queryPackDir, compiledPackDir, bundleFile }; } interface PreparedRemoteQuery { @@ -346,7 +246,7 @@ export async function prepareRemoteQueryRun( token, ); } finally { - await tempDir.remoteQueryDir.cleanup(); + await remove(tempDir.remoteQueryDir); } if (token.isCancellationRequested) { @@ -372,42 +272,6 @@ export async function prepareRemoteQueryRun( }; } -/** - * Fixes the qlpack.yml or codeql-pack.yml file to be correct in the context of the MRVA request. - * - * Performs the following fixes: - * - * - Updates the default suite of the query pack. This is used to ensure - * only the specified query is run. - * - Ensures the query pack name is set to the name expected by the server. - * - Removes any `${workspace}` version references from the qlpack.yml or codeql-pack.yml file. Converts them - * to `*` versions. - * - * @param targetPackPath The path to the directory containing the target pack - * @param qlPackDetails The details of the original QL pack - */ -async function fixPackFile( - targetPackPath: string, - qlPackDetails: QlPackDetails, -): Promise { - const packPath = await getQlPackFilePath(targetPackPath); - - // This should not happen since we create the pack ourselves. - if (!packPath) { - throw new Error( - `Could not find ${QLPACK_FILENAMES.join( - " or ", - )} file in '${targetPackPath}'`, - ); - } - const qlpack = load(await readFile(packPath, "utf8")) as QlPackFile; - - updateDefaultSuite(qlpack, qlPackDetails); - removeWorkspaceRefs(qlpack); - - await writeFile(packPath, dump(qlpack)); -} - async function getExtensionPacksToInject( cliServer: CodeQLCliServer, workspaceFolders: string[], @@ -436,41 +300,6 @@ async function getExtensionPacksToInject( return result; } -async function addExtensionPacksAsDependencies( - queryPackDir: string, - extensionPacks: ModelPackDetails[], -): Promise { - const qlpackFile = await getQlPackFilePath(queryPackDir); - if (!qlpackFile) { - throw new Error( - `Could not find ${QLPACK_FILENAMES.join( - " or ", - )} file in '${queryPackDir}'`, - ); - } - - const syntheticQueryPack = load( - await readFile(qlpackFile, "utf8"), - ) as QlPackFile; - - const dependencies = syntheticQueryPack.dependencies ?? {}; - extensionPacks.forEach(({ name }) => { - // Add this extension pack as a dependency. It doesn't matter which - // version we specify, since we are guaranteed that the extension pack - // is resolved from source at the given path. - dependencies[name] = "*"; - }); - - syntheticQueryPack.dependencies = dependencies; - - await writeFile(qlpackFile, dump(syntheticQueryPack)); -} - -function updateDefaultSuite(qlpack: QlPackFile, qlPackDetails: QlPackDetails) { - delete qlpack.defaultSuiteFile; - qlpack.defaultSuite = generateDefaultSuite(qlPackDetails); -} - function generateDefaultSuite(qlPackDetails: QlPackDetails) { const queries = qlPackDetails.queryFiles.map((query) => { const relativePath = relative(qlPackDetails.qlPackRootPath, query); @@ -571,15 +400,3 @@ async function getControllerRepoFromApi( } } } - -function removeWorkspaceRefs(qlpack: QlPackFile) { - if (!qlpack.dependencies) { - return; - } - - for (const [key, value] of Object.entries(qlpack.dependencies)) { - if (value === "${workspace}") { - qlpack.dependencies[key] = "*"; - } - } -} diff --git a/extensions/ql-vscode/src/variant-analysis/sarif-processing.ts b/extensions/ql-vscode/src/variant-analysis/sarif-processing.ts index aa643d9f576..f998f228e19 100644 --- a/extensions/ql-vscode/src/variant-analysis/sarif-processing.ts +++ b/extensions/ql-vscode/src/variant-analysis/sarif-processing.ts @@ -24,6 +24,7 @@ import type { ResultSeverity, ThreadFlow, } from "./shared/analysis-result"; +import { getErrorMessage } from "../common/helpers-pure"; // A line of more than 8k characters is probably generated. const CODE_SNIPPET_LARGE_LINE_SIZE_LIMIT = 8192; @@ -47,7 +48,9 @@ export function extractAnalysisAlerts( try { alerts.push(...extractResultAlerts(run, result, fileLinkPrefix)); } catch (e) { - errors.push(`Error when processing SARIF result: ${e}`); + errors.push( + `Error when processing SARIF result: ${getErrorMessage(e)}`, + ); continue; } } @@ -67,7 +70,7 @@ function extractResultAlerts( const rule = tryGetRule(run, result); const severity = tryGetSeverity(run, result, rule) || defaultSeverity; const codeFlows = getCodeFlows(result, fileLinkPrefix); - const shortDescription = getShortDescription(rule, message!); + const shortDescription = getShortDescription(rule, message); for (const location of result.locations ?? []) { const physicalLocation = location.physicalLocation!; @@ -266,7 +269,7 @@ function getCodeFlows(result: Result, fileLinkPrefix: string): CodeFlow[] { for (const threadFlow of codeFlow.threadFlows) { for (const threadFlowLocation of threadFlow.locations) { const physicalLocation = - threadFlowLocation!.location!.physicalLocation!; + threadFlowLocation.location!.physicalLocation!; const filePath = tryGetFilePath(physicalLocation); const codeSnippet = getCodeSnippet( physicalLocation.contextRegion, @@ -299,7 +302,7 @@ function getCodeFlows(result: Result, fileLinkPrefix: string): CodeFlow[] { function getMessage(result: Result, fileLinkPrefix: string): AnalysisMessage { const tokens: AnalysisMessageToken[] = []; - const messageText = result.message!.text!; + const messageText = result.message.text!; const messageParts = parseSarifPlainTextMessage(messageText); for (const messagePart of messageParts) { diff --git a/extensions/ql-vscode/src/variant-analysis/shared/variant-analysis.ts b/extensions/ql-vscode/src/variant-analysis/shared/variant-analysis.ts index 2bb3a60e924..a83a5f2bbf6 100644 --- a/extensions/ql-vscode/src/variant-analysis/shared/variant-analysis.ts +++ b/extensions/ql-vscode/src/variant-analysis/shared/variant-analysis.ts @@ -34,7 +34,7 @@ export interface VariantAnalysis { export function parseVariantAnalysisQueryLanguage( language: string, ): QueryLanguage | undefined { - return Object.values(QueryLanguage).find((x) => x === language); + return Object.values(QueryLanguage).find((x) => x.toString() === language); } export enum VariantAnalysisStatus { @@ -287,8 +287,9 @@ export function getSkippedRepoCount( return 0; } - return Object.values(skippedRepos).reduce( - (acc, group) => acc + group.repositoryCount, + return Object.values(skippedRepos).reduce( + (acc, group: VariantAnalysisSkippedRepositoryGroup) => + acc + group.repositoryCount, 0, ); } diff --git a/extensions/ql-vscode/src/variant-analysis/variant-analysis-manager.ts b/extensions/ql-vscode/src/variant-analysis/variant-analysis-manager.ts index 9e05309f41c..4256d037cfc 100644 --- a/extensions/ql-vscode/src/variant-analysis/variant-analysis-manager.ts +++ b/extensions/ql-vscode/src/variant-analysis/variant-analysis-manager.ts @@ -73,12 +73,12 @@ import type { VariantAnalysisCommands, } from "../common/commands"; import { exportVariantAnalysisResults } from "./export-results"; +import { viewAutofixesForVariantAnalysisResults } from "./view-autofixes"; import { readRepoStates, REPO_STATES_FILENAME, writeRepoStates, } from "./repo-states-store"; -import { FetchError } from "node-fetch"; import { showAndLogExceptionWithTelemetry, showAndLogInformationMessage, @@ -332,7 +332,7 @@ export class VariantAnalysisManager ): Promise { if (!isVariantAnalysisEnabledForGitHubHost()) { throw new Error( - `Multi-repository variant analysis is not enabled for ${getEnterpriseUri()}`, + `Multi-repository variant analysis is not enabled for ${getEnterpriseUri()?.toString()}`, ); } @@ -425,7 +425,7 @@ export class VariantAnalysisManager this.app.credentials, variantAnalysisSubmission, ); - } catch (e: unknown) { + } catch (e) { // If the error is handled by the handleRequestError function, we don't need to throw if ( e instanceof RequestError && @@ -562,7 +562,7 @@ export class VariantAnalysisManager }); const doc = await workspace.openTextDocument(uri); await Window.showTextDocument(doc, { preview: false }); - } catch (error) { + } catch { void showAndLogWarningMessage( this.app.logger, "Could not open variant analysis query text. Failed to open text document.", @@ -586,7 +586,7 @@ export class VariantAnalysisManager variantAnalysis.query.filePath, ); await Window.showTextDocument(textDocument, ViewColumn.One); - } catch (error) { + } catch { void showAndLogWarningMessage( this.app.logger, `Could not open file: ${variantAnalysis.query.filePath}`, @@ -859,7 +859,9 @@ export class VariantAnalysisManager } catch (e) { if ( retry++ < maxRetryCount && - e instanceof FetchError && + e && + typeof e === "object" && + "code" in e && (e.code === "ETIMEDOUT" || e.code === "ECONNRESET") ) { void this.app.logger.log( @@ -966,6 +968,21 @@ export class VariantAnalysisManager ); } + public async viewAutofixes( + variantAnalysisId: number, + filterSort: RepositoriesFilterSortStateWithIds = defaultFilterSortState, + ) { + await viewAutofixesForVariantAnalysisResults( + this, + this.variantAnalysisResultsManager, + variantAnalysisId, + filterSort, + this.app.credentials, + this.app, + this.cliServer, + ); + } + public async copyRepoListToClipboard( variantAnalysisId: number, filterSort: RepositoriesFilterSortStateWithIds = defaultFilterSortState, diff --git a/extensions/ql-vscode/src/variant-analysis/variant-analysis-mapper.ts b/extensions/ql-vscode/src/variant-analysis/variant-analysis-mapper.ts index c3a72a26705..2b8858035a2 100644 --- a/extensions/ql-vscode/src/variant-analysis/variant-analysis-mapper.ts +++ b/extensions/ql-vscode/src/variant-analysis/variant-analysis-mapper.ts @@ -76,15 +76,11 @@ function mapVariantAnalysis( let skippedRepos: VariantAnalysisSkippedRepositories = {}; if (response.scanned_repositories) { - scannedRepos = mapScannedRepositories( - response.scanned_repositories as ApiVariantAnalysisScannedRepository[], - ); + scannedRepos = mapScannedRepositories(response.scanned_repositories); } if (response.skipped_repositories) { - skippedRepos = mapSkippedRepositories( - response.skipped_repositories as ApiVariantAnalysisSkippedRepositories, - ); + skippedRepos = mapSkippedRepositories(response.skipped_repositories); } // Maintain the canceling status if we are still canceling. diff --git a/extensions/ql-vscode/src/variant-analysis/variant-analysis-results-manager.ts b/extensions/ql-vscode/src/variant-analysis/variant-analysis-results-manager.ts index e7856ba59de..01e27410ff0 100644 --- a/extensions/ql-vscode/src/variant-analysis/variant-analysis-results-manager.ts +++ b/extensions/ql-vscode/src/variant-analysis/variant-analysis-results-manager.ts @@ -1,5 +1,4 @@ import { appendFile, pathExists, rm } from "fs-extra"; -import fetch from "node-fetch"; import { EOL } from "os"; import { join } from "path"; @@ -45,6 +44,7 @@ export type LoadResultsOptions = { export class VariantAnalysisResultsManager extends DisposableObject { private static readonly RESULTS_DIRECTORY = "results"; + private static readonly RESULTS_SARIF_FILENAME = "results.sarif"; private readonly cachedResults: Map< CacheKey, @@ -94,13 +94,23 @@ export class VariantAnalysisResultsManager extends DisposableObject { const response = await fetch(repoTask.artifactUrl); - let responseSize = parseInt(response.headers.get("content-length") || "0"); - if (responseSize === 0 && response.size > 0) { - responseSize = response.size; + const responseSize = parseInt( + response.headers.get("content-length") || "1", + ); + + if (!response.body) { + throw new Error("No response body found"); } + const reader = response.body.getReader(); + let amountDownloaded = 0; - for await (const chunk of response.body) { + for (;;) { + const { value: chunk, done } = await reader.read(); + if (done) { + break; + } + await appendFile(zipFilePath, Buffer.from(chunk)); amountDownloaded += chunk.length; await onDownloadPercentageChanged( @@ -203,7 +213,10 @@ export class VariantAnalysisResultsManager extends DisposableObject { storageDirectory, VariantAnalysisResultsManager.RESULTS_DIRECTORY, ); - const sarifPath = join(resultsDirectory, "results.sarif"); + const sarifPath = join( + resultsDirectory, + VariantAnalysisResultsManager.RESULTS_SARIF_FILENAME, + ); const bqrsPath = join(resultsDirectory, "results.bqrs"); let interpretedResults: AnalysisAlert[] | undefined; @@ -285,6 +298,17 @@ export class VariantAnalysisResultsManager extends DisposableObject { return join(variantAnalysisStoragePath, fullName); } + public getRepoResultsSarifStoragePath( + variantAnalysisStoragePath: string, + fullName: string, + ): string { + return join( + this.getRepoStorageDirectory(variantAnalysisStoragePath, fullName), + VariantAnalysisResultsManager.RESULTS_DIRECTORY, + VariantAnalysisResultsManager.RESULTS_SARIF_FILENAME, + ); + } + private createGitHubFileLinkPrefix(fullName: string, sha: string): string { return new URL( `/${fullName}/blob/${sha}`, diff --git a/extensions/ql-vscode/src/variant-analysis/variant-analysis-view-manager.ts b/extensions/ql-vscode/src/variant-analysis/variant-analysis-view-manager.ts index cc531c558e7..db591ac3d95 100644 --- a/extensions/ql-vscode/src/variant-analysis/variant-analysis-view-manager.ts +++ b/extensions/ql-vscode/src/variant-analysis/variant-analysis-view-manager.ts @@ -34,4 +34,8 @@ export interface VariantAnalysisViewManager< variantAnalysisId: number, filterSort?: RepositoriesFilterSortStateWithIds, ): Promise; + viewAutofixes( + variantAnalysisId: number, + filterSort?: RepositoriesFilterSortStateWithIds, + ): Promise; } diff --git a/extensions/ql-vscode/src/variant-analysis/variant-analysis-view.ts b/extensions/ql-vscode/src/variant-analysis/variant-analysis-view.ts index f8a87e47b87..555a3686e68 100644 --- a/extensions/ql-vscode/src/variant-analysis/variant-analysis-view.ts +++ b/extensions/ql-vscode/src/variant-analysis/variant-analysis-view.ts @@ -27,6 +27,7 @@ import type { App } from "../common/app"; import { getVariantAnalysisDefaultResultsFilter, getVariantAnalysisDefaultResultsSort, + isCanary, } from "../config"; export class VariantAnalysisView @@ -53,6 +54,13 @@ export class VariantAnalysisView panel.reveal(undefined, true); await this.waitForPanelLoaded(); + + await this.postMessage({ + t: "setVariantAnalysisUserSettings", + variantAnalysisUserSettings: { + shouldShowViewAutofixesButton: isCanary(), + }, + }); } public async updateView(variantAnalysis: VariantAnalysis): Promise { @@ -135,6 +143,12 @@ export class VariantAnalysisView case "openQueryText": await this.manager.openQueryText(this.variantAnalysisId); break; + case "viewAutofixes": + await this.manager.viewAutofixes( + this.variantAnalysisId, + msg.filterSort, + ); + break; case "copyRepositoryList": await this.manager.copyRepoListToClipboard( this.variantAnalysisId, diff --git a/extensions/ql-vscode/src/variant-analysis/view-autofixes.ts b/extensions/ql-vscode/src/variant-analysis/view-autofixes.ts new file mode 100644 index 00000000000..0d0214b07cf --- /dev/null +++ b/extensions/ql-vscode/src/variant-analysis/view-autofixes.ts @@ -0,0 +1,914 @@ +import type { RepositoriesFilterSortStateWithIds } from "./shared/variant-analysis-filter-sort"; +import { + defaultFilterSortState, + filterAndSortRepositoriesWithResults, +} from "./shared/variant-analysis-filter-sort"; +import type { + VariantAnalysis, + VariantAnalysisRepositoryTask, +} from "./shared/variant-analysis"; +import type { Credentials } from "../common/authentication"; +import { extLogger } from "../common/logging/vscode"; +import type { App } from "../common/app"; +import type { CodeQLCliServer } from "../codeql-cli/cli"; +import { + pathExists, + ensureDir, + remove, + unlink, + readFile, + writeFile, + createWriteStream, +} from "fs-extra"; +import { + withProgress, + progressUpdate, + reportStreamProgress, +} from "../common/vscode/progress"; +import type { ProgressCallback } from "../common/vscode/progress"; +import { join, parse } from "path"; +import { pluralize } from "../common/word"; +import { readRepoTask } from "./repo-tasks-store"; +import { tmpDir } from "../tmp-dir"; +import { spawn } from "child_process"; +import type { execFileSync } from "child_process"; +import { tryOpenExternalFile } from "../common/vscode/external-files"; +import type { VariantAnalysisManager } from "./variant-analysis-manager"; +import type { VariantAnalysisResultsManager } from "./variant-analysis-results-manager"; +import { + getAutofixPath, + getAutofixModel, + downloadTimeout, + AUTOFIX_PATH, + AUTOFIX_MODEL, +} from "../config"; +import { asError, getErrorMessage } from "../common/helpers-pure"; +import { createTimeoutSignal } from "../common/fetch-stream"; +import { unzipToDirectoryConcurrently } from "../common/unzip-concurrently"; +import { reportUnzipProgress } from "../common/vscode/unzip-progress"; +import { getDirectoryNamesInsidePath } from "../common/files"; +import { Readable } from "stream"; + +// Limit to three repos when generating autofixes so not sending +// too many requests to autofix. Since we only need to validate +// a handle of autofixes for each query, this should be sufficient. +// Consider increasing this in the future if needed. +const MAX_NUM_REPOS: number = 3; +// Similarly, limit to three fixes per repo. +const MAX_NUM_FIXES: number = 3; + +/** + * Generates autofixes for the results of a variant analysis. + */ +export async function viewAutofixesForVariantAnalysisResults( + variantAnalysisManager: VariantAnalysisManager, + variantAnalysisResultsManager: VariantAnalysisResultsManager, + variantAnalysisId: number, + filterSort: RepositoriesFilterSortStateWithIds = defaultFilterSortState, + credentials: Credentials, + app: App, + cliServer: CodeQLCliServer, +): Promise { + await withProgress( + async (progress: ProgressCallback) => { + // Get the path to the local autofix installation. + const localAutofixPath = await findLocalAutofix(); + + // Get the variant analysis with the given id. + const variantAnalysis = + variantAnalysisManager.tryGetVariantAnalysis(variantAnalysisId); + if (!variantAnalysis) { + throw new Error(`No variant analysis with id: ${variantAnalysisId}`); + } + + // Generate the query help and output it to the override directory. + await overrideQueryHelp(variantAnalysis, cliServer, localAutofixPath); + + // Get the full names (nwos) of the selected repositories. + const selectedRepoNames = getSelectedRepositoryNames( + variantAnalysis, + filterSort, + ); + + // Get storage paths for the autofix results. + const { + variantAnalysisIdStoragePath, + sourceRootsStoragePath, + autofixOutputStoragePath, + } = await getStoragePaths(variantAnalysisManager, variantAnalysisId); + + // Process the selected repositories: + // Get sarif + // Download source root + // Run autofix and output results + progress( + progressUpdate( + 1, + 2, + `Processing ${pluralize(selectedRepoNames.length, "repository", "repositories")}`, + ), + ); + const outputTextFiles = await processSelectedRepositories( + variantAnalysisResultsManager, + selectedRepoNames, + variantAnalysisIdStoragePath, + sourceRootsStoragePath, + autofixOutputStoragePath, + localAutofixPath, + credentials, + ); + + // Output results from all repos to a combined markdown file. + progress(progressUpdate(2, 2, `Finalizing autofix results`)); + const combinedOutputMarkdownFile = join( + autofixOutputStoragePath, + "autofix-output.md", + ); + await mergeFiles(outputTextFiles, combinedOutputMarkdownFile, false); + + // Open the combined markdown file. + await tryOpenExternalFile(app.commands, combinedOutputMarkdownFile); + }, + { + title: "Generating Autofixes", + cancellable: false, // not cancellable for now + }, + ); +} + +/** + * Finds the local autofix installation path from the `codeQL.autofix.path` setting. + * Throws an error if the path is not set or does not exist. + * @returns An object containing the local autofix path. + * @throws Error if the `codeQL.autofix.path` setting is not set or the path does not exist. + */ +async function findLocalAutofix(): Promise { + const localAutofixPath = getAutofixPath(); + if (!localAutofixPath) { + throw new Error( + `Path to local autofix installation not found. Make sure ${AUTOFIX_PATH.qualifiedName} is set correctly. Internal GitHub access required.`, + ); + } + if (!(await pathExists(localAutofixPath))) { + throw new Error(`Local autofix path ${localAutofixPath} does not exist.`); + } + return localAutofixPath; +} + +/** + * Overrides the query help from a given variant analysis + * at a location within the `localAutofixPath` directory . + */ +async function overrideQueryHelp( + variantAnalysis: VariantAnalysis, + cliServer: CodeQLCliServer, + localAutofixPath: string, +): Promise { + // Get path to the query used by the variant analysis. + const queryFilePath = variantAnalysis.query.filePath; + if (!(await pathExists(queryFilePath))) { + throw new Error(`Query file used by variant analysis not found.`); + } + const parsedQueryFilePath = parse(queryFilePath); + const queryFilePathNoExt = join( + parsedQueryFilePath.dir, + parsedQueryFilePath.name, + ); + + // Get the path to the query help, which may be either a `.qhelp` or a `.md` file. + // Note: we assume that the name of the query file is the same as the name of the query help file. + const queryHelpFilePathQhelp = `${queryFilePathNoExt}.qhelp`; + const queryHelpFilePathMarkdown = `${queryFilePathNoExt}.md`; + + // Set `queryHelpFilePath` to the existing extension type. + let queryHelpFilePath: string; + if (await pathExists(queryHelpFilePathQhelp)) { + queryHelpFilePath = queryHelpFilePathQhelp; + } else if (await pathExists(queryHelpFilePathMarkdown)) { + queryHelpFilePath = queryHelpFilePathMarkdown; + } else { + throw new Error( + `Could not find query help file at either ${queryHelpFilePathQhelp} or ${queryHelpFilePathMarkdown}. Check that the query help file exists and is named correctly.`, + ); + } + + // Get the query metadata. + let metadata; + try { + metadata = await cliServer.resolveMetadata(queryFilePath); + } catch (e) { + throw new Error( + `Could not resolve query metadata for ${queryFilePath}. Reason: ${getErrorMessage(e)}`, + ); + } + // Get the query ID (used for the overridden query help's filename). + const queryId = metadata.id; + if (!queryId) { + throw new Error(`Query metadata for ${queryFilePath} is missing an ID.`); + } + // Replace `/` with `-` for use with the overridden query help's filename. + // Use `replaceAll` since some query IDs have multiple slashes. + const queryIdWithDash = queryId.replaceAll("/", "-"); + + // Get the path to the output directory for overriding the query help. + // Note: the path to this directory may change in the future. + const queryHelpOverrideDirectory = join( + localAutofixPath, + "prompt-templates", + "qhelps", + `${queryIdWithDash}.md`, + ); + + await cliServer.generateQueryHelp( + queryHelpFilePath, + queryHelpOverrideDirectory, + ); +} + +/** + * Gets the full names (owner/repo) of the selected + * repositories from the given variant analysis while + * limiting the number of repositories to `MAX_NUM_REPOS`. + */ +function getSelectedRepositoryNames( + variantAnalysis: VariantAnalysis, + filterSort: RepositoriesFilterSortStateWithIds, +): string[] { + // Get the repositories that were selected by the user. + const filteredRepositories = filterAndSortRepositoriesWithResults( + variantAnalysis.scannedRepos, + filterSort, + ); + + // Get the full names (owner/repo = nwo) of the selected repos. + let fullNames = filteredRepositories + ?.filter((a) => a.resultCount && a.resultCount > 0) + .map((a) => a.repository.fullName); + if (!fullNames || fullNames.length === 0) { + throw new Error("No repositories with results found."); + } + + // Limit to MAX_NUM_REPOS by slicing the array. + if (fullNames.length > MAX_NUM_REPOS) { + fullNames = fullNames.slice(0, MAX_NUM_REPOS); + void extLogger.showWarningMessage( + `Only the first ${MAX_NUM_REPOS} repos (${fullNames.join(", ")}) will be included in the Autofix results.`, + ); + } + + return fullNames; +} + +/** + * Gets the storage paths needed for the autofix results. + */ +async function getStoragePaths( + variantAnalysisManager: VariantAnalysisManager, + variantAnalysisId: number, +): Promise<{ + variantAnalysisIdStoragePath: string; + sourceRootsStoragePath: string; + autofixOutputStoragePath: string; +}> { + // Confirm storage path for the variant analysis ID exists. + const variantAnalysisIdStoragePath = + variantAnalysisManager.getVariantAnalysisStorageLocation(variantAnalysisId); + if (!(await pathExists(variantAnalysisIdStoragePath))) { + throw new Error( + `Variant analysis storage location does not exist: ${variantAnalysisIdStoragePath}`, + ); + } + + // Storage path for all autofix info. + const autofixStoragePath = join(variantAnalysisIdStoragePath, "autofix"); + + // Storage path for the source roots used with autofix. + const sourceRootsStoragePath = join(autofixStoragePath, "source-roots"); + await ensureDir(sourceRootsStoragePath); + + // Storage path for the autofix output. + let autofixOutputStoragePath = join(autofixStoragePath, "output"); + // If the path already exists, assume that it's a previous run + // and append "-n" to the end of the path where n is the next available number. + if (await pathExists(autofixOutputStoragePath)) { + let i = 1; + while (await pathExists(autofixOutputStoragePath + i.toString())) { + i++; + } + autofixOutputStoragePath = autofixOutputStoragePath += i.toString(); + } + await ensureDir(autofixOutputStoragePath); + + return { + variantAnalysisIdStoragePath, + sourceRootsStoragePath, + autofixOutputStoragePath, + }; +} + +/** + * Processes the selected repositories for autofix generation. + */ +async function processSelectedRepositories( + variantAnalysisResultsManager: VariantAnalysisResultsManager, + selectedRepoNames: string[], + variantAnalysisIdStoragePath: string, + sourceRootsStoragePath: string, + autofixOutputStoragePath: string, + localAutofixPath: string, + credentials: Credentials, +): Promise { + const outputTextFiles: string[] = []; + await Promise.all( + selectedRepoNames.map(async (nwo) => + withProgress( + async (progressForRepo: ProgressCallback) => { + // Get the sarif file. + progressForRepo(progressUpdate(1, 3, `Getting sarif...`)); + const sarifFile = await getRepoSarifFile( + variantAnalysisResultsManager, + variantAnalysisIdStoragePath, + nwo, + ); + + // Read the contents of the variant analysis' `repo_task.json` file, + // and confirm that the `databaseCommitSha` and `resultCount` exist. + const repoTask: VariantAnalysisRepositoryTask = await readRepoTask( + variantAnalysisResultsManager.getRepoStorageDirectory( + variantAnalysisIdStoragePath, + nwo, + ), + ); + if (!repoTask.databaseCommitSha) { + throw new Error(`Missing database commit SHA for ${nwo}`); + } + if (!repoTask.resultCount) { + throw new Error(`Missing variant analysis result count for ${nwo}`); + } + + // Download the source root. + // Using `0` as the progress step to force a dynamic vs static progress bar. + progressForRepo(progressUpdate(0, 3, `Fetching source root...`)); + const srcRootPath = await downloadPublicCommitSource( + nwo, + repoTask.databaseCommitSha, + sourceRootsStoragePath, + credentials, + progressForRepo, + ); + + // Run autofix. + progressForRepo(progressUpdate(2, 3, `Running autofix...`)); + await runAutofixForRepository( + nwo, + sarifFile, + srcRootPath, + localAutofixPath, + autofixOutputStoragePath, + repoTask.resultCount, + outputTextFiles, + ); + }, + { + title: `${nwo}`, + cancellable: false, + }, + ), + ), + ); + + return outputTextFiles; +} + +/** + * Gets the path to a SARIF file for a given `nwo`. + */ +async function getRepoSarifFile( + variantAnalysisResultsManager: VariantAnalysisResultsManager, + variantAnalysisIdStoragePath: string, + nwo: string, +): Promise { + if ( + !(await variantAnalysisResultsManager.isVariantAnalysisRepoDownloaded( + variantAnalysisIdStoragePath, + nwo, + )) + ) { + throw new Error(`Variant analysis results not downloaded for ${nwo}`); + } + const sarifFile = + variantAnalysisResultsManager.getRepoResultsSarifStoragePath( + variantAnalysisIdStoragePath, + nwo, + ); + if (!(await pathExists(sarifFile))) { + throw new Error(`SARIF file not found for ${nwo}`); + } + return sarifFile; +} + +/** + * Downloads the source code of a public commit from a GitHub repository. + */ +async function downloadPublicCommitSource( + nwo: string, + sha: string, + outputPath: string, + credentials: Credentials, + progressCallback: ProgressCallback, +): Promise { + const [owner, repo] = nwo.split("/"); + if (!owner || !repo) { + throw new Error(`Invalid repository name: ${nwo}`); + } + + // Create output directory if it doesn't exist + await ensureDir(outputPath); + + // Define the final checkout directory + const checkoutDir = join( + outputPath, + `${owner}-${repo}-${sha.substring(0, 7)}`, + ); + + // Check if directory already exists to avoid re-downloading + if (await pathExists(checkoutDir)) { + const dirNames = await getDirectoryNamesInsidePath(checkoutDir); + if (dirNames.length === 1) { + // The path to the source code should be a single directory inside `checkoutDir`. + const sourceRootDir = join(checkoutDir, dirNames[0]); + void extLogger.log( + `Source for ${nwo} at ${sha} already exists at ${sourceRootDir}.`, + ); + return sourceRootDir; + } else { + // Remove `checkoutDir` to allow a re-download if the directory structure is unexpected. + void extLogger.log( + `Unexpected directory structure. Removing ${checkoutDir}`, + ); + await remove(checkoutDir); + } + } + + void extLogger.log(`Fetching source of repository ${nwo} at ${sha}...`); + + try { + const octokit = await credentials.getOctokit(); + + // Get the zipball URL + const { url } = await octokit.rest.repos.downloadZipballArchive({ + owner, + repo, + ref: sha, + }); + + // Create a temporary directory for downloading + const archivePath = join( + tmpDir.name, + `source-${owner}-${repo}-${Date.now()}.zip`, + ); + + // Set timeout + const { + signal, + onData, + dispose: disposeTimeout, + } = createTimeoutSignal(downloadTimeout()); + + // Fetch the url + let response: Response; + try { + response = await fetch(url, { + headers: { + Accept: "application/zip", + }, + signal, + }); + } catch (e) { + disposeTimeout(); + + if (e instanceof DOMException && e.name === "AbortError") { + const thrownError = new Error("The request timed out."); + thrownError.stack = e.stack; + throw thrownError; + } + throw new Error( + `Error fetching source root. Reason: ${getErrorMessage(e)}`, + ); + } + + // Download the source root from the response body + const body = response.body; + if (!body) { + throw new Error("No response body found"); + } + + const archiveFileStream = createWriteStream(archivePath); + + const contentLength = response.headers.get("content-length"); + const totalNumBytes = contentLength + ? parseInt(contentLength, 10) + : undefined; + + const reportProgress = reportStreamProgress( + "Downloading source root...", + totalNumBytes, + progressCallback, + ); + + try { + const readable = Readable.fromWeb(body); + readable.on("data", (chunk) => { + onData(); + reportProgress(chunk?.length ?? 0); + }); + await new Promise((resolve, reject) => { + readable + .pipe(archiveFileStream) + .on("error", (err) => { + reject(err); + }) + .on("finish", () => resolve(undefined)); + }); + + await new Promise((resolve, reject) => { + archiveFileStream.close((err) => { + if (err) { + reject(err); + } + resolve(undefined); + }); + }); + } catch (e) { + // Close and remove the file if an error occurs + archiveFileStream.close(() => { + void remove(archivePath); + }); + + if (e instanceof DOMException && e.name === "AbortError") { + const thrownError = new Error("The download timed out."); + thrownError.stack = e.stack; + throw thrownError; + } + + throw new Error( + `Error downloading source root. Reason: ${getErrorMessage(e)}`, + ); + } finally { + disposeTimeout(); + } + + void extLogger.log(`Download complete, extracting source...`); + + // Extract the downloaded zip file + await unzipToDirectoryConcurrently( + archivePath, + checkoutDir, + reportUnzipProgress(`Unzipping source root...`, progressCallback), + ); + await remove(archivePath); + + // Since `unzipToDirectoryConcurrently` extracts to a directory within + // `checkoutDir`, we need to return the path to that extracted directory. + const dirNames = await getDirectoryNamesInsidePath(checkoutDir); + if (dirNames.length === 1) { + return join(checkoutDir, dirNames[0]); + } else { + throw new Error( + `Expected exactly one unzipped source directory for ${nwo}, but found ${dirNames.length}.`, + ); + } + } catch (error) { + await remove(checkoutDir); + throw new Error( + `Failed to download ${nwo} at ${sha}:. Reason: ${getErrorMessage(error)}`, + ); + } +} + +/** + * Runs autofix for a given repository (nwo). + */ +async function runAutofixForRepository( + nwo: string, + sarifFile: string, + srcRootPath: string, + localAutofixPath: string, + autofixOutputStoragePath: string, + resultCount: number, + outputTextFiles: string[], +): Promise { + // Get storage paths for the autofix results for this repository. + const { + repoAutofixOutputStoragePath, + outputTextFilePath, + transcriptFilePath, + fixDescriptionFilePath, + } = await getRepoStoragePaths(autofixOutputStoragePath, nwo); + + // Get autofix binary. + // Switch to Go binary in the future and have user pass full path + // in an environment variable instead of hardcoding part here. + const cocofixBin = join(process.cwd(), localAutofixPath, "bin", "cocofix.js"); + + // Limit number of fixes generated. + const limitFixesBoolean: boolean = resultCount > MAX_NUM_FIXES; + if (limitFixesBoolean) { + void extLogger.log( + `Only generating autofixes for the first ${MAX_NUM_FIXES} alerts for ${nwo}.`, + ); + + // Run autofix in a loop for the first MAX_NUM_FIXES alerts. + // Not an ideal solution, but avoids modifying the input SARIF file. + const tempOutputTextFiles: string[] = []; + const fixDescriptionFiles: string[] = []; + const transcriptFiles: string[] = []; + for (let i = 0; i < MAX_NUM_FIXES; i++) { + const tempOutputTextFilePath = appendSuffixToFilePath( + outputTextFilePath, + i.toString(), + ); + const tempFixDescriptionFilePath = appendSuffixToFilePath( + fixDescriptionFilePath, + i.toString(), + ); + const tempTranscriptFilePath = appendSuffixToFilePath( + transcriptFilePath, + i.toString(), + ); + + tempOutputTextFiles.push(tempOutputTextFilePath); + fixDescriptionFiles.push(tempFixDescriptionFilePath); + transcriptFiles.push(tempTranscriptFilePath); + + await runAutofixOnResults( + cocofixBin, + sarifFile, + srcRootPath, + tempOutputTextFilePath, + tempFixDescriptionFilePath, + tempTranscriptFilePath, + repoAutofixOutputStoragePath, + i, + ); + } + + // Merge the output files together. + // Caveat that autofix will call each alert "alert 0", which will look a bit odd in the merged output file. + await mergeFiles(tempOutputTextFiles, outputTextFilePath); + await mergeFiles(fixDescriptionFiles, fixDescriptionFilePath); + await mergeFiles(transcriptFiles, transcriptFilePath); + } else { + // Run autofix once for all alerts. + await runAutofixOnResults( + cocofixBin, + sarifFile, + srcRootPath, + outputTextFilePath, + fixDescriptionFilePath, + transcriptFilePath, + repoAutofixOutputStoragePath, + ); + } + + // Format the output text file with markdown. + await formatWithMarkdown(outputTextFilePath, `${nwo}`); + + // Save output text files from each repo to later merge + // into a single markdown file containing all results. + outputTextFiles.push(outputTextFilePath); +} + +/** + * Gets the storage paths for the autofix results for a given repository. + */ +async function getRepoStoragePaths( + autofixOutputStoragePath: string, + nwo: string, +) { + // Create output directories for repo's autofix results. + const repoAutofixOutputStoragePath = join( + autofixOutputStoragePath, + nwo.replaceAll("/", "-"), + ); + await ensureDir(repoAutofixOutputStoragePath); + return { + repoAutofixOutputStoragePath, + outputTextFilePath: join(repoAutofixOutputStoragePath, "output.txt"), + transcriptFilePath: join(repoAutofixOutputStoragePath, "transcript.md"), + fixDescriptionFilePath: join( + repoAutofixOutputStoragePath, + "fix-description.md", + ), + }; +} + +/** + * Runs autofix on the results in the given SARIF file. + */ +async function runAutofixOnResults( + cocofixBin: string, + sarifFile: string, + srcRootPath: string, + outputTextFilePath: string, + fixDescriptionFilePath: string, + transcriptFilePath: string, + workDir: string, + alertNumber?: number, // Optional parameter for specific alert +): Promise { + // Get autofix model from user settings. + const autofixModel = getAutofixModel(); + if (!autofixModel) { + throw new Error( + `Autofix model not found. Make sure ${AUTOFIX_MODEL.qualifiedName} is set correctly.`, + ); + } + // Set up args for autofix command. + const autofixArgs = [ + "--sarif", + sarifFile, + "--source-root", + srcRootPath, + "--model", + autofixModel, + "--dev", + "--no-cache", + "--format", + "text", + "--diff-style", + "diff", // could do "text" instead if want line of "=" between fixes + "--output", + outputTextFilePath, + "--fix-description", + fixDescriptionFilePath, + "--transcript", + transcriptFilePath, + ]; + + // Add alert number argument if provided + if (alertNumber !== undefined) { + autofixArgs.push("--only-alert-number", alertNumber.toString()); + } + + await execAutofix( + cocofixBin, + autofixArgs, + { + cwd: workDir, + env: { + CAPI_DEV_KEY: process.env.CAPI_DEV_KEY, + PATH: process.env.PATH, + }, + }, + true, + ); +} + +/** + * Executes the autofix command. + */ +function execAutofix( + bin: string, + args: string[], + options: Parameters[2], + showCommand?: boolean, +): Promise { + return new Promise((resolve, reject) => { + try { + const cwd = options?.cwd || process.cwd(); + if (showCommand) { + void extLogger.log( + `Spawning '${bin} ${args.join(" ")}' in ${cwd.toString()}`, + ); + } + + let stdoutBuffer = ""; + let stderrBuffer = ""; + + const p = spawn(bin, args, { + stdio: ["ignore", "pipe", "pipe"], + ...options, + }); + + // Listen for stdout + p.stdout?.on("data", (data) => { + stdoutBuffer += data.toString(); + }); + + // Listen for stderr + p.stderr?.on("data", (data) => { + stderrBuffer += data.toString(); + }); + + // Listen for errors + p.on("error", reject); + + // Listen for process exit + p.on("exit", (code) => { + // Log collected output + if (stdoutBuffer.trim()) { + void extLogger.log(`Autofix stdout:\n${stdoutBuffer.trim()}`); + } + + if (stderrBuffer.trim()) { + void extLogger.log(`Autofix stderr:\n${stderrBuffer.trim()}`); + } + + if (code === 0) { + resolve(); + } else { + reject(new Error(`Autofix process exited with code ${code}.`)); + } + }); + } catch (e) { + reject(asError(e)); + } + }); +} + +/** + * Creates a new file path by appending the given suffix. + * @param filePath The original file path. + * @param suffix The suffix to append to the file name (before the extension). + * @returns The new file path with the suffix appended. + */ +function appendSuffixToFilePath(filePath: string, suffix: string): string { + const { dir, name, ext } = parse(filePath); + return join(dir, `${name}-${suffix}${ext}`); +} + +/** + * Merges the given `inputFiles` into a single `outputFile`. + * @param inputFiles - The list of input files to merge. + * @param outputFile - The output file path. + * @param deleteOriginalFiles - Whether to delete the original input files after merging. + */ +async function mergeFiles( + inputFiles: string[], + outputFile: string, + deleteOriginalFiles: boolean = true, +): Promise { + try { + // Check if any input files do not exist and return if so. + const pathChecks = await Promise.all( + inputFiles.map(async (path) => ({ + exists: await pathExists(path), + })), + ); + const anyPathMissing = pathChecks.some((check) => !check.exists); + if (inputFiles.length === 0 || anyPathMissing) { + return; + } + + // Merge the files + const contents = await Promise.all( + inputFiles.map((file) => readFile(file, "utf8")), + ); + + // Write merged content + await writeFile(outputFile, contents.join("\n")); + + // Delete original files + if (deleteOriginalFiles) { + await Promise.all(inputFiles.map((file) => unlink(file))); + } + } catch (error) { + throw new Error(`Error merging files. Reason: ${getErrorMessage(error)}`); + } +} + +/** + * Formats the given input file with the specified header. + * @param inputFile The path to the input file to format. + * @param header The header to include in the formatted output. + */ +async function formatWithMarkdown( + inputFile: string, + header: string, +): Promise { + try { + // Check if the input file exists + const exists = await pathExists(inputFile); + if (!exists) { + return; + } + + // Read the input file content + const content = await readFile(inputFile, "utf8"); + + const frontFormatting: string = + "
Fix suggestion details\n\n```diff\n"; + + const backFormatting: string = + "```\n\n
\n\n ### Notes\n - notes placeholder\n\n"; + + // Format the content with Markdown + // Replace ``` in the content with \``` to avoid breaking the Markdown code block + const formattedContent = `## ${header}\n\n${frontFormatting}${content.replaceAll("```", "\\```")}${backFormatting}`; + + // Write the formatted content back to the file + await writeFile(inputFile, formattedContent); + } catch (error) { + throw new Error(`Error formatting file. Reason: ${getErrorMessage(error)}`); + } +} diff --git a/extensions/ql-vscode/src/view/common/ActionButton/ActionButton.module.css b/extensions/ql-vscode/src/view/common/ActionButton/ActionButton.module.css new file mode 100644 index 00000000000..70a8e8a1577 --- /dev/null +++ b/extensions/ql-vscode/src/view/common/ActionButton/ActionButton.module.css @@ -0,0 +1,56 @@ +/* Styles have been copied from https://vscode-elements.github.io/elements-lite/components/action-button/configurator/ */ +.actionButton { + align-items: center; + background-color: transparent; + border-color: transparent; + border-style: solid; + border-width: 1px; + border-radius: 5px; + color: var(--vscode-foreground); + display: inline-flex; + cursor: pointer; + padding: 0; + user-select: none; +} + +.actionButton:disabled { + color: var(--vscode-disabledForeground); + cursor: default; + pointer-events: none; +} + +.actionButton :global(.codicon), +.actionButton svg { + color: var(--vscode-icon-foreground); + display: block; + padding: 2px; +} + +.actionButton svg { + box-sizing: content-box; + height: 16px; + width: 16px; +} + +.actionButton:disabled :global(.codicon), +.actionButton:disabled svg { + color: var(--vscode-disabledForeground); +} + +.actionButton:hover { + background-color: var(--vscode-toolbar-hoverBackground); + outline: 1px dotted var(--vscode-contrastActiveBorder, transparent); + outline-offset: -1px; +} + +.actionButton:active { + background-color: var(--vscode-toolbar-activeBackground); +} + +.actionButton:focus { + outline: none; +} + +.actionButton:focus-visible { + border-color: var(--vscode-focusBorder); +} diff --git a/extensions/ql-vscode/src/view/common/ActionButton/ActionButton.module.css.d.ts b/extensions/ql-vscode/src/view/common/ActionButton/ActionButton.module.css.d.ts new file mode 100644 index 00000000000..e29a2ad9062 --- /dev/null +++ b/extensions/ql-vscode/src/view/common/ActionButton/ActionButton.module.css.d.ts @@ -0,0 +1,2 @@ +declare const styles: { [className: string]: string }; +export default styles; diff --git a/extensions/ql-vscode/src/view/common/ActionButton/ActionButton.tsx b/extensions/ql-vscode/src/view/common/ActionButton/ActionButton.tsx new file mode 100644 index 00000000000..f673fd56f96 --- /dev/null +++ b/extensions/ql-vscode/src/view/common/ActionButton/ActionButton.tsx @@ -0,0 +1,9 @@ +import styles from "./ActionButton.module.css"; + +// This is needed because vscode-elements/elements does not implement +// the same styles for icon buttons as vscode/webview-ui-toolkit +export const ActionButton = (props: React.ComponentProps<"button">) => ( + +); diff --git a/extensions/ql-vscode/src/view/common/Badge.tsx b/extensions/ql-vscode/src/view/common/Badge.tsx new file mode 100644 index 00000000000..cb9826bcab8 --- /dev/null +++ b/extensions/ql-vscode/src/view/common/Badge.tsx @@ -0,0 +1,8 @@ +import { VscodeBadge } from "@vscode-elements/react-elements"; + +// This applies the counter variant by default so the border-radius attribute is set +export const Badge = (props: React.ComponentProps) => ( + + {props.children} + +); diff --git a/extensions/ql-vscode/src/view/common/CodePaths/CodeFlowsDropdown.tsx b/extensions/ql-vscode/src/view/common/CodePaths/CodeFlowsDropdown.tsx index 277013084f1..cc232060f0a 100644 --- a/extensions/ql-vscode/src/view/common/CodePaths/CodeFlowsDropdown.tsx +++ b/extensions/ql-vscode/src/view/common/CodePaths/CodeFlowsDropdown.tsx @@ -1,6 +1,9 @@ import type { ChangeEvent, SetStateAction } from "react"; import { useCallback } from "react"; -import { VSCodeDropdown, VSCodeOption } from "@vscode/webview-ui-toolkit/react"; +import { + VscodeOption, + VscodeSingleSelect, +} from "@vscode-elements/react-elements"; import type { CodeFlow } from "../../../variant-analysis/shared/analysis-result"; @@ -35,12 +38,12 @@ export const CodeFlowsDropdown = ({ .toString(); return ( - + {codeFlows.map((codeFlow, index) => ( - + {getCodeFlowName(codeFlow)} - + ))} - + ); }; diff --git a/extensions/ql-vscode/src/view/common/CodePaths/CodePaths.tsx b/extensions/ql-vscode/src/view/common/CodePaths/CodePaths.tsx index 301107afcc5..520d26a3d83 100644 --- a/extensions/ql-vscode/src/view/common/CodePaths/CodePaths.tsx +++ b/extensions/ql-vscode/src/view/common/CodePaths/CodePaths.tsx @@ -1,5 +1,5 @@ import { styled } from "styled-components"; -import { VSCodeLink } from "@vscode/webview-ui-toolkit/react"; +import { Link } from "../Link"; import type { AnalysisMessage, @@ -8,7 +8,7 @@ import type { } from "../../../variant-analysis/shared/analysis-result"; import { vscode } from "../../vscode-api"; -const ShowPathsLink = styled(VSCodeLink)` +const ShowPathsLink = styled(Link)` cursor: pointer; `; diff --git a/extensions/ql-vscode/src/view/common/CodePaths/ThreadPath.tsx b/extensions/ql-vscode/src/view/common/CodePaths/ThreadPath.tsx index 99659a36c18..fd2204daab6 100644 --- a/extensions/ql-vscode/src/view/common/CodePaths/ThreadPath.tsx +++ b/extensions/ql-vscode/src/view/common/CodePaths/ThreadPath.tsx @@ -1,5 +1,5 @@ import { styled } from "styled-components"; -import { VSCodeTag } from "@vscode/webview-ui-toolkit/react"; +import { Tag } from "../Tag"; import type { AnalysisMessage, @@ -56,12 +56,12 @@ export const ThreadPath = ({ {isSource && ( - Source + Source )} {isSink && ( - Sink + Sink )} diff --git a/extensions/ql-vscode/src/view/common/FileCodeSnippet/CodeSnippetMessage.tsx b/extensions/ql-vscode/src/view/common/FileCodeSnippet/CodeSnippetMessage.tsx index 6e209a340d4..09ec16d4288 100644 --- a/extensions/ql-vscode/src/view/common/FileCodeSnippet/CodeSnippetMessage.tsx +++ b/extensions/ql-vscode/src/view/common/FileCodeSnippet/CodeSnippetMessage.tsx @@ -1,5 +1,5 @@ import { styled } from "styled-components"; -import { VSCodeLink } from "@vscode/webview-ui-toolkit/react"; +import { Link } from "../Link"; import type { AnalysisMessage, @@ -39,7 +39,7 @@ const CodeSnippetMessageContainer = styled.div padding-bottom: 1em; `; -const LocationLink = styled(VSCodeLink)` +const LocationLink = styled(Link)` font-family: var(--vscode-editor-font-family); `; diff --git a/extensions/ql-vscode/src/view/common/FileCodeSnippet/FileCodeSnippet.tsx b/extensions/ql-vscode/src/view/common/FileCodeSnippet/FileCodeSnippet.tsx index c6fdb624156..b97c7d79c0c 100644 --- a/extensions/ql-vscode/src/view/common/FileCodeSnippet/FileCodeSnippet.tsx +++ b/extensions/ql-vscode/src/view/common/FileCodeSnippet/FileCodeSnippet.tsx @@ -1,5 +1,4 @@ import { styled } from "styled-components"; -import { VSCodeLink } from "@vscode/webview-ui-toolkit/react"; import type { AnalysisMessage, @@ -12,6 +11,7 @@ import { createRemoteFileRef } from "../../../common/location-link-utils"; import { CodeSnippetMessage } from "./CodeSnippetMessage"; import { CodeSnippetLine } from "./CodeSnippetLine"; import { sendTelemetry } from "../telemetry"; +import { Link } from "../Link"; const borderColor = "var(--vscode-editor-snippetFinalTabstopHighlightBorder)"; @@ -72,12 +72,9 @@ export const FileCodeSnippet = ({ return ( - + {fileLink.filePath} - + {message && severity && ( @@ -93,12 +90,9 @@ export const FileCodeSnippet = ({ return ( - + {fileLink.filePath} - + {code.map((line, index) => ( diff --git a/extensions/ql-vscode/src/view/common/Link.tsx b/extensions/ql-vscode/src/view/common/Link.tsx new file mode 100644 index 00000000000..a0e37b92bcd --- /dev/null +++ b/extensions/ql-vscode/src/view/common/Link.tsx @@ -0,0 +1,25 @@ +import { styled } from "styled-components"; + +export const Link = styled.a` + background: transparent; + box-sizing: border-box; + color: var(--vscode-textLink-foreground); + cursor: pointer; + fill: currentcolor; + font-family: var(--vscode-font-family); + font-size: var(--vscode-font-size); + line-height: normal; + outline: none; + + &:hover { + text-decoration: underline; + } + + &:focus-visible { + border: 1px solid var(--vscode-focusBorder); + } + + &:focus { + border: 1px solid var(--vscode-focusBorder); + } +`; diff --git a/extensions/ql-vscode/src/view/common/LinkIconButton.tsx b/extensions/ql-vscode/src/view/common/LinkIconButton.tsx index 8a8e4bbeba5..f282fb646f3 100644 --- a/extensions/ql-vscode/src/view/common/LinkIconButton.tsx +++ b/extensions/ql-vscode/src/view/common/LinkIconButton.tsx @@ -1,7 +1,7 @@ -import { VSCodeLink } from "@vscode/webview-ui-toolkit/react"; import { styled } from "styled-components"; +import { Link } from "./Link"; -export const LinkIconButton = styled(VSCodeLink)` +export const LinkIconButton = styled(Link)` .codicon { vertical-align: text-bottom; } diff --git a/extensions/ql-vscode/src/view/common/SearchBox.tsx b/extensions/ql-vscode/src/view/common/SearchBox.tsx index 464d303fa7e..7837c143e76 100644 --- a/extensions/ql-vscode/src/view/common/SearchBox.tsx +++ b/extensions/ql-vscode/src/view/common/SearchBox.tsx @@ -1,12 +1,16 @@ import { useCallback } from "react"; import { styled } from "styled-components"; -import { VSCodeTextField } from "@vscode/webview-ui-toolkit/react"; +import { VscodeTextfield } from "@vscode-elements/react-elements"; import { Codicon } from "./icon"; -const TextField = styled(VSCodeTextField)` +const TextField = styled(VscodeTextfield)` width: 100%; `; +const SearchIcon = styled(Codicon)` + margin: 0 8px; +`; + type Props = { value: string; placeholder: string; @@ -37,7 +41,7 @@ export const SearchBox = ({ onInput={handleInput} className={className} > - + ); }; diff --git a/extensions/ql-vscode/src/view/common/SuggestBox/SuggestBox.tsx b/extensions/ql-vscode/src/view/common/SuggestBox/SuggestBox.tsx index 32240fac67e..facfeedf0dd 100644 --- a/extensions/ql-vscode/src/view/common/SuggestBox/SuggestBox.tsx +++ b/extensions/ql-vscode/src/view/common/SuggestBox/SuggestBox.tsx @@ -14,19 +14,23 @@ import { useRole, } from "@floating-ui/react"; import { css, styled } from "styled-components"; -import { VSCodeTextField } from "@vscode/webview-ui-toolkit/react"; import type { Option } from "./options"; import { findMatchingOptions } from "./options"; import { SuggestBoxItem } from "./SuggestBoxItem"; import { LabelText } from "./LabelText"; import type { Diagnostic } from "./diagnostics"; import { useOpenKey } from "./useOpenKey"; +import { VscodeTextfield } from "@vscode-elements/react-elements"; -const Input = styled(VSCodeTextField)<{ $error: boolean }>` +interface InputProps { + $error: boolean; +} + +const Input = styled(VscodeTextfield)` width: 100%; font-family: var(--vscode-editor-font-family); - ${(props) => + ${(props: InputProps) => props.$error && css` --dropdown-border: var(--vscode-inputValidation-errorBorder); @@ -96,7 +100,7 @@ export type SuggestBoxProps< /** * Can be used to render a different component for the input. This is used - * in testing to use default HTML components rather than the VSCodeTextField + * in testing to use default HTML components rather than the VscodeTextfield * for easier testing. * @param props The props returned by `getReferenceProps` of {@link useInteractions} */ @@ -200,8 +204,6 @@ export const SuggestBox = < }, [disabled]); return ( - // Disabled because the div is used to stop click propagation, it's not a button - // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
{renderInputComponent( getReferenceProps({ diff --git a/extensions/ql-vscode/src/view/common/SuggestBox/SuggestBoxItem.tsx b/extensions/ql-vscode/src/view/common/SuggestBox/SuggestBoxItem.tsx index 1693d46f1d2..97a9d1a7486 100644 --- a/extensions/ql-vscode/src/view/common/SuggestBox/SuggestBoxItem.tsx +++ b/extensions/ql-vscode/src/view/common/SuggestBox/SuggestBoxItem.tsx @@ -64,23 +64,35 @@ type Props = { export const SuggestBoxItem = forwardRef< HTMLDivElement, Props & HTMLProps ->(({ children, active, icon, labelText, details, ...props }, ref) => { - const id = useId(); - return ( - - {icon} - - - {details && {details}} - - - ); -}); +>( + ( + { + children, + active, + icon, + labelText, + details, + ...props + }: Props & HTMLProps, + ref, + ) => { + const id = useId(); + return ( + + {icon} + + + {details && {details}} + + + ); + }, +); SuggestBoxItem.displayName = "SuggestBoxItem"; diff --git a/extensions/ql-vscode/src/view/common/SuggestBox/useEffectEvent.ts b/extensions/ql-vscode/src/view/common/SuggestBox/useEffectEvent.ts index 13707487ad1..3bd2f92f4e0 100644 --- a/extensions/ql-vscode/src/view/common/SuggestBox/useEffectEvent.ts +++ b/extensions/ql-vscode/src/view/common/SuggestBox/useEffectEvent.ts @@ -18,6 +18,7 @@ export function useEffectEvent any>(callback: T) { }); return useCallback<(...args: Parameters) => ReturnType>( + // eslint-disable-next-line @typescript-eslint/no-unsafe-return (...args) => ref.current(...args), [], ) as T; diff --git a/extensions/ql-vscode/src/view/common/SuggestBox/useOpenKey.ts b/extensions/ql-vscode/src/view/common/SuggestBox/useOpenKey.ts index e0d158c8930..5e646286cd1 100644 --- a/extensions/ql-vscode/src/view/common/SuggestBox/useOpenKey.ts +++ b/extensions/ql-vscode/src/view/common/SuggestBox/useOpenKey.ts @@ -16,24 +16,22 @@ export const useOpenKey = ( ): ElementProps => { const { open, onOpenChange } = context; - const openOnOpenKey = useEffectEvent( - (event: KeyboardEvent | KeyboardEvent) => { - if (open) { - return; - } + const openOnOpenKey = useEffectEvent((event: KeyboardEvent) => { + if (open) { + return; + } - if ( - event.key === " " && - event.ctrlKey && - !event.altKey && - !event.metaKey && - !event.shiftKey - ) { - event.preventDefault(); - onOpenChange(true, isReactEvent(event) ? event.nativeEvent : event); - } - }, - ); + if ( + event.key === " " && + event.ctrlKey && + !event.altKey && + !event.metaKey && + !event.shiftKey + ) { + event.preventDefault(); + onOpenChange(true, isReactEvent(event) ? event.nativeEvent : event); + } + }); return useMemo((): ElementProps => { return { diff --git a/extensions/ql-vscode/src/view/common/Tag.tsx b/extensions/ql-vscode/src/view/common/Tag.tsx new file mode 100644 index 00000000000..ca83c7c6bca --- /dev/null +++ b/extensions/ql-vscode/src/view/common/Tag.tsx @@ -0,0 +1,14 @@ +import { styled } from "styled-components"; + +export const Tag = styled.span` + background-color: var(--vscode-badge-background); + border: 1px solid var(--vscode-button-border, transparent); + border-radius: 2px; + color: var(--vscode-badge-foreground); + padding: 2px 4px; + text-transform: uppercase; + box-sizing: border-box; + font-family: var(--vscode-font-family); + font-size: 11px; + line-height: 16px; +`; diff --git a/extensions/ql-vscode/src/view/common/WarningBox.tsx b/extensions/ql-vscode/src/view/common/WarningBox.tsx new file mode 100644 index 00000000000..b8003d83e57 --- /dev/null +++ b/extensions/ql-vscode/src/view/common/WarningBox.tsx @@ -0,0 +1,31 @@ +import { styled } from "styled-components"; +import { WarningIcon } from "./icon/WarningIcon"; + +const WarningBoxDiv = styled.div` + max-width: 100em; + padding: 0.5em 1em; + border: 1px solid var(--vscode-widget-border); + box-shadow: var(--vscode-widget-shadow) 0px 3px 8px; + display: flex; +`; + +const IconPane = styled.p` + width: 3em; + flex-shrink: 0; + text-align: center; +`; + +export interface WarningBoxProps { + children: React.ReactNode; +} + +export function WarningBox(props: WarningBoxProps) { + return ( + + + + +

{props.children}

+
+ ); +} diff --git a/extensions/ql-vscode/src/view/common/index.ts b/extensions/ql-vscode/src/view/common/index.ts index 7d3564bed43..fe1f4a6ec63 100644 --- a/extensions/ql-vscode/src/view/common/index.ts +++ b/extensions/ql-vscode/src/view/common/index.ts @@ -6,3 +6,4 @@ export * from "./HorizontalSpace"; export * from "./SectionTitle"; export * from "./VerticalSpace"; export * from "./ViewTitle"; +export * from "./WarningBox"; diff --git a/extensions/ql-vscode/src/view/common/useMessageFromExtension.ts b/extensions/ql-vscode/src/view/common/useMessageFromExtension.ts new file mode 100644 index 00000000000..2ba13a99858 --- /dev/null +++ b/extensions/ql-vscode/src/view/common/useMessageFromExtension.ts @@ -0,0 +1,27 @@ +import { useEffect } from "react"; + +/** + * Invokes the given callback when a message is received from the extension. + */ +export function useMessageFromExtension( + onEvent: (event: T) => void, + onEventDependencies: unknown[], +): void { + useEffect(() => { + const listener = (evt: MessageEvent) => { + if (evt.origin === window.origin) { + onEvent(evt.data as T); + } else { + // sanitize origin + const origin = evt.origin.replace(/\n|\r/g, ""); + console.error(`Invalid event origin ${origin}`); + } + }; + window.addEventListener("message", listener); + + return () => { + window.removeEventListener("message", listener); + }; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, onEventDependencies); +} diff --git a/extensions/ql-vscode/src/view/compare-performance/ComparePerformance.tsx b/extensions/ql-vscode/src/view/compare-performance/ComparePerformance.tsx new file mode 100644 index 00000000000..c9fac0a09dc --- /dev/null +++ b/extensions/ql-vscode/src/view/compare-performance/ComparePerformance.tsx @@ -0,0 +1,985 @@ +import type { ChangeEvent } from "react"; +import { + Fragment, + memo, + useDeferredValue, + useMemo, + useRef, + useState, +} from "react"; +import type { + SetPerformanceComparisonQueries, + ToComparePerformanceViewMessage, +} from "../../common/interface-types"; +import { useMessageFromExtension } from "../common/useMessageFromExtension"; +import type { + PerformanceComparisonDataFromLog, + PipelineSummary, +} from "../../log-insights/performance-comparison"; +import { formatDecimal } from "../../common/number"; +import { styled } from "styled-components"; +import { Codicon, ViewTitle } from "../common"; +import { abbreviateRANames, abbreviateRASteps } from "./RAPrettyPrinter"; +import { Renaming, RenamingInput } from "./RenamingInput"; + +const enum AbsentReason { + NotSeen = "NotSeen", + CacheHit = "CacheHit", + Sentinel = "Sentinel", +} + +type Optional = AbsentReason | T; + +function isPresent(x: Optional): x is T { + return typeof x !== "string"; +} + +interface PredicateInfo { + name: string; + raHash: string; + tuples: number; + evaluationCount: number; + iterationCount: number; + timeCost: number; + pipelines: Record; +} + +class ComparisonDataset { + /** + * Predicates indexed by a key consisting of the name and its pipeline hash. + * Unlike the RA hash, the pipeline hash only depends on the predicate's own pipeline. + */ + public keyToIndex = new Map(); + public raToIndex = new Map(); + public nameToIndex = new Map(); + public cacheHitIndices: Set; + public sentinelEmptyIndices: Set; + + constructor(private data: PerformanceComparisonDataFromLog) { + const { names, raHashes, pipelineSummaryList } = data; + const { keyToIndex, raToIndex, nameToIndex } = this; + for (let i = 0; i < names.length; i++) { + const name = names[i]; + const pipelineHash = getPipelineSummaryHash(pipelineSummaryList[i]); + keyToIndex.set(`${name}@${pipelineHash}`, i); + nameToIndex.set(name, i); + raToIndex.set(raHashes[i], i); + } + this.cacheHitIndices = new Set(data.cacheHitIndices); + this.sentinelEmptyIndices = new Set(data.sentinelEmptyIndices); + } + + keys() { + return Array.from(this.keyToIndex.keys()); + } + + getTupleCountInfo(key: string): Optional { + const { data, keyToIndex, cacheHitIndices, sentinelEmptyIndices } = this; + const index = keyToIndex.get(key); + if (index == null) { + return AbsentReason.NotSeen; + } + const tupleCost = data.tupleCosts[index]; + if (tupleCost === 0) { + if (sentinelEmptyIndices.has(index)) { + return AbsentReason.Sentinel; + } else if (cacheHitIndices.has(index)) { + return AbsentReason.CacheHit; + } + } + return { + name: data.names[index], + raHash: data.raHashes[index], + evaluationCount: data.evaluationCounts[index], + iterationCount: data.iterationCounts[index], + timeCost: data.timeCosts[index], + tuples: tupleCost, + pipelines: data.pipelineSummaryList[index], + }; + } + + /** + * Returns the RA hashes of all predicates that were evaluated in this data set, but not seen in `other`, + * because in `other` the dependency upon these predicates was cut off by a cache hit. + * + * For example, suppose predicate `A` depends on `B`, which depends on `C`, and the + * predicates were evaluated in the first log but not the second: + * ``` + * first eval. log second eval. log + * predicate A seen evaluation seen cache hit + * | + * V + * predicate B seen evaluation not seen + * | + * V + * predicate C seen evaluation not seen + * ``` + * + * To ensure a meaningful comparison, we want to omit `predicate A` from the comparison view because of the cache hit. + * + * But predicates B and C did not have a recorded cache hit in the second log, because they were never scheduled for evaluation. + * Given the dependency graph, the most likely explanation is that they would have been evaluated if `A` had not been a cache hit. + * We therefore say that B and C are "shadowed" by the cache hit on A. + * + * The dependency graph is only visible in the first evaluation log, because `B` and `C` do not exist in the second log. + * So to compute this, we use the dependency graph from one log together with the set of cache hits in the other log. + */ + getPredicatesShadowedByCacheHit(other: ComparisonDataset) { + const { + data: { dependencyLists, raHashes, names }, + raToIndex, + } = this; + const cacheHits = new Set(); + + function visit(index: number, raHash: string) { + if (cacheHits.has(raHash)) { + return; + } + cacheHits.add(raHash); + const dependencies = dependencyLists[index]; + for (const dep of dependencies) { + const name = names[dep]; + if (!other.nameToIndex.has(name)) { + visit(dep, raHashes[dep]); + } + } + } + + for (const otherCacheHit of other.cacheHitIndices) { + { + // Look up by RA hash + const raHash = other.data.raHashes[otherCacheHit]; + const ownIndex = raToIndex.get(raHash); + if (ownIndex != null) { + visit(ownIndex, raHash); + } + } + { + // Look up by name + const name = other.data.names[otherCacheHit]; + const ownIndex = this.nameToIndex.get(name); + if (ownIndex != null) { + visit(ownIndex, raHashes[ownIndex]); + } + } + } + + return cacheHits; + } +} + +function renderOptionalValue(x: Optional, unit: string | undefined) { + switch (x) { + case AbsentReason.NotSeen: + return n/a; + case AbsentReason.CacheHit: + return cache hit; + case AbsentReason.Sentinel: + return sentinel empty; + default: + return ( + + {formatDecimal(x)} + {renderUnit(unit)} + + ); + } +} + +function renderPredicateMetric( + x: Optional, + metric: Metric, + isPerEvaluation: boolean, +) { + return renderOptionalValue( + metricGetOptional(metric, x, isPerEvaluation), + metric.unit, + ); +} + +function renderDelta(x: number, unit?: string) { + const sign = x > 0 ? "+" : ""; + return ( + 0 ? "bad-value" : x < 0 ? "good-value" : ""}> + {sign} + {formatDecimal(x)} + {renderUnit(unit)} + + ); +} + +function renderUnit(unit: string | undefined) { + return unit == null ? "" : ` ${unit}`; +} + +function orderBy(fn: (x: T) => number | string) { + return (x: T, y: T) => { + const fx = fn(x); + const fy = fn(y); + return fx === fy ? 0 : fx < fy ? -1 : 1; + }; +} + +const ChevronCell = styled.td` + width: 1em !important; +`; + +const NameHeader = styled.th` + text-align: left; +`; + +const NumberHeader = styled.th` + text-align: right; + width: 10em !important; +`; + +const NameCell = styled.td``; + +const NumberCell = styled.td` + text-align: right; + width: 10em !important; + + &.bad-value { + color: var(--vscode-problemsErrorIcon-foreground); + tr.expanded & { + color: inherit; + } + } + &.good-value { + color: var(--vscode-problemsInfoIcon-foreground); + tr.expanded & { + color: inherit; + } + } +`; + +const AbsentNumberCell = styled.td` + text-align: right; + color: var(--vscode-disabledForeground); + + tr.expanded & { + color: inherit; + } + width: 10em !important; +`; + +const Table = styled.table` + border-collapse: collapse; + width: 100%; + border-spacing: 0; + background-color: var(--vscode-background); + color: var(--vscode-foreground); + & td { + padding: 0.5em; + } + & th { + padding: 0.5em; + } + &.expanded { + border: 1px solid var(--vscode-list-activeSelectionBackground); + margin-bottom: 1em; + } + word-break: break-all; +`; + +const PredicateTR = styled.tr` + cursor: pointer; + + &.expanded { + background-color: var(--vscode-list-activeSelectionBackground); + color: var(--vscode-list-activeSelectionForeground); + position: sticky; + top: 0; + } + + & .codicon-chevron-right { + visibility: hidden; + } + + &:hover:not(.expanded) { + background-color: var(--vscode-list-hoverBackground); + & .codicon-chevron-right { + visibility: visible; + } + } +`; + +const PipelineStepTR = styled.tr` + & td { + padding-top: 0.3em; + padding-bottom: 0.3em; + } +`; + +const Dropdown = styled.select``; + +interface PipelineStepProps { + before: number | undefined; + after: number | undefined; + comparison: boolean; + step: React.ReactNode; +} + +/** + * Row with details of a pipeline step, or one of the high-level stats appearing above the pipelines (evaluation/iteration counts). + */ +function PipelineStep(props: PipelineStepProps) { + let { before, after, comparison, step } = props; + if (before != null && before < 0) { + before = undefined; + } + if (after != null && after < 0) { + after = undefined; + } + const delta = before != null && after != null ? after - before : undefined; + return ( + + + {comparison && ( + {before != null ? formatDecimal(before) : ""} + )} + {after != null ? formatDecimal(after) : ""} + {comparison && (delta != null ? renderDelta(delta) : )} + {step} + + ); +} + +const HeaderTR = styled.tr` + background-color: var(--vscode-sideBar-background); +`; + +interface HeaderRowProps { + hasBefore?: boolean; + hasAfter?: boolean; + comparison: boolean; + title: React.ReactNode; +} + +function HeaderRow(props: HeaderRowProps) { + const { comparison, hasBefore, hasAfter, title } = props; + return ( + + + {comparison ? ( + <> + {hasBefore ? "Before" : ""} + {hasAfter ? "After" : ""} + {hasBefore && hasAfter ? "Delta" : ""} + + ) : ( + Value + )} + {title} + + ); +} + +interface HighLevelStatsProps { + before: Optional; + after: Optional; + comparison: boolean; +} + +function HighLevelStats(props: HighLevelStatsProps) { + const { before, after, comparison } = props; + const hasBefore = isPresent(before); + const hasAfter = isPresent(after); + const showEvaluationCount = + (hasBefore && before.evaluationCount > 1) || + (hasAfter && after.evaluationCount > 1); + return ( + <> + + {showEvaluationCount && ( + + )} + + + ); +} + +interface Row { + key: string; + name: string; + before: Optional; + after: Optional; + diff: number; +} + +/** + * A set of predicates that have been grouped together because their names have the same fingerprint. + */ +interface RowGroup { + name: string; + rows: Row[]; + before: Optional; + after: Optional; + diff: number; +} + +function getSortOrder(sortOrder: "delta" | "absDelta") { + if (sortOrder === "absDelta") { + return orderBy((row: { diff: number }) => -Math.abs(row.diff)); + } + return orderBy((row: { diff: number }) => row.diff); +} + +interface Metric { + title: string; + get(info: PredicateInfo): number; + unit?: string; +} + +const metrics: Record = { + tuples: { + title: "Tuple count", + get: (info) => info.tuples, + }, + time: { + title: "Time spent", + get: (info) => info.timeCost, + unit: "ms", + }, + evaluations: { + title: "Evaluations", + get: (info) => info.evaluationCount, + }, + iterationsTotal: { + title: "Iterations", + get: (info) => info.iterationCount, + }, +}; + +function metricGetOptional( + metric: Metric, + info: Optional, + isPerEvaluation: boolean, +): Optional { + if (!isPresent(info)) { + return info; + } + const value = metric.get(info); + return isPerEvaluation ? (value / info.evaluationCount) | 0 : value; +} + +function addOptionals(a: Optional, b: Optional) { + if (isPresent(a) && isPresent(b)) { + return a + b; + } + if (isPresent(a)) { + return a; + } + if (isPresent(b)) { + return b; + } + if (a === b) { + return a; // If absent for the same reason, preserve that reason + } + return 0; // Otherwise collapse to zero +} + +/** + * Returns a "fingerprint" from the given name, which is used to group together similar names. + */ +function getNameFingerprint(name: string, renamings: Renaming[]) { + for (const { patternRegexp, replacement } of renamings) { + if (patternRegexp != null) { + name = name.replace(patternRegexp, replacement); + } + } + return name; +} + +function Chevron({ expanded }: { expanded: boolean }) { + return ; +} + +function union(a: Set | T[], b: Set | T[]) { + const result = new Set(a); + for (const x of b) { + result.add(x); + } + return result; +} + +export function ComparePerformance(_: Record) { + const [data, setData] = useState< + SetPerformanceComparisonQueries | undefined + >(); + + useMessageFromExtension( + (msg) => { + setData(msg); + }, + [setData], + ); + + if (!data) { + return
Loading performance comparison...
; + } + + return ; +} + +function ComparePerformanceWithData(props: { + data: SetPerformanceComparisonQueries; +}) { + const { data } = props; + + const { from, to } = useMemo( + () => ({ + from: new ComparisonDataset(data.from), + to: new ComparisonDataset(data.to), + }), + [data], + ); + + const comparison = data?.comparison; + + const [hideCacheHits, setHideCacheHits] = useState(true); + + const [sortOrder, setSortOrder] = useState<"delta" | "absDelta">("absDelta"); + + const [metric, setMetric] = useState(metrics.tuples); + + const [isPerEvaluation, setPerEvaluation] = useState(false); + + const keySet = useMemo(() => union(from.keys(), to.keys()), [from, to]); + + const hasCacheHitMismatch = useRef(false); + + const shadowedCacheHitsFrom = useMemo( + () => + hideCacheHits ? from.getPredicatesShadowedByCacheHit(to) : new Set(), + [from, to, hideCacheHits], + ); + const shadowedCacheHitsTo = useMemo( + () => + hideCacheHits ? to.getPredicatesShadowedByCacheHit(from) : new Set(), + [from, to, hideCacheHits], + ); + + const rows: Row[] = useMemo(() => { + hasCacheHitMismatch.current = false; + return Array.from(keySet) + .map((key) => { + const before = from.getTupleCountInfo(key); + const after = to.getTupleCountInfo(key); + const beforeValue = metricGetOptional(metric, before, isPerEvaluation); + const afterValue = metricGetOptional(metric, after, isPerEvaluation); + if (beforeValue === afterValue) { + return undefined!; + } + if ( + before === AbsentReason.CacheHit || + after === AbsentReason.CacheHit + ) { + hasCacheHitMismatch.current = true; + if (hideCacheHits) { + return undefined!; + } + } + if ( + (isPresent(before) && + !isPresent(after) && + shadowedCacheHitsFrom.has(before.raHash)) || + (isPresent(after) && + !isPresent(before) && + shadowedCacheHitsTo.has(after.raHash)) + ) { + return undefined!; + } + const diff = + (isPresent(afterValue) ? afterValue : 0) - + (isPresent(beforeValue) ? beforeValue : 0); + const name = isPresent(before) + ? before.name + : isPresent(after) + ? after.name + : key; + return { key, name, before, after, diff } satisfies Row; + }) + .filter((x) => !!x) + .sort(getSortOrder(sortOrder)); + }, [ + keySet, + from, + to, + metric, + hideCacheHits, + sortOrder, + isPerEvaluation, + shadowedCacheHitsFrom, + shadowedCacheHitsTo, + ]); + + const { totalBefore, totalAfter, totalDiff } = useMemo(() => { + let totalBefore = 0; + let totalAfter = 0; + let totalDiff = 0; + for (const row of rows) { + totalBefore += isPresent(row.before) ? metric.get(row.before) : 0; + totalAfter += isPresent(row.after) ? metric.get(row.after) : 0; + totalDiff += row.diff; + } + return { totalBefore, totalAfter, totalDiff }; + }, [rows, metric]); + + const [renamings, setRenamings] = useState(() => [ + new Renaming("#[0-9a-f]{8}(?![0-9a-f])", "#"), + ]); + + // Use deferred value to avoid expensive re-rendering for every keypress in the renaming editor + const deferredRenamings = useDeferredValue(renamings); + + const rowGroups = useMemo(() => { + const groupedRows = new Map(); + for (const row of rows) { + const fingerprint = getNameFingerprint(row.name, deferredRenamings); + const rows = groupedRows.get(fingerprint); + if (rows) { + rows.push(row); + } else { + groupedRows.set(fingerprint, [row]); + } + } + return Array.from(groupedRows.entries()) + .map(([fingerprint, rows]) => { + const before = rows + .map((row) => metricGetOptional(metric, row.before, isPerEvaluation)) + .reduce(addOptionals); + const after = rows + .map((row) => metricGetOptional(metric, row.after, isPerEvaluation)) + .reduce(addOptionals); + return { + name: rows.length === 1 ? rows[0].name : fingerprint, + before, + after, + diff: + (isPresent(after) ? after : 0) - (isPresent(before) ? before : 0), + rows, + } satisfies RowGroup; + }) + .sort(getSortOrder(sortOrder)); + }, [rows, metric, sortOrder, deferredRenamings, isPerEvaluation]); + + const rowGroupNames = useMemo( + () => abbreviateRANames(rowGroups.map((group) => group.name)), + [rowGroups], + ); + + return ( + <> + Performance comparison + {comparison && hasCacheHitMismatch.current && ( + + )} + + Compare{" "} + ) => + setMetric(metrics[e.target.value]) + } + > + {Object.entries(metrics).map(([key, value]) => ( + + ))} + {" "} + ) => + setPerEvaluation(e.target.value === "per-evaluation") + } + > + + + {" "} + {comparison && ( + <> + sorted by{" "} + ) => + setSortOrder(e.target.value as "delta" | "absDelta") + } + value={sortOrder} + > + + + + + )} + + + + + + + + {comparison && renderOptionalValue(totalBefore, metric.unit)} + {renderOptionalValue(totalAfter, metric.unit)} + {comparison && renderDelta(totalDiff, metric.unit)} + + TOTAL + + + + + + +
+ + + ); +} + +interface PredicateTableProps { + rowGroups: RowGroup[]; + rowGroupNames: React.ReactNode[]; + comparison: boolean; + metric: Metric; + isPerEvaluation: boolean; +} + +function PredicateTableRaw(props: PredicateTableProps) { + const { comparison, metric, rowGroupNames, rowGroups, isPerEvaluation } = + props; + return rowGroups.map((rowGroup, rowGroupIndex) => ( + + )); +} + +const PredicateTable = memo(PredicateTableRaw); + +interface PredicateRowGroupProps { + renderedName: React.ReactNode; + rowGroup: RowGroup; + comparison: boolean; + metric: Metric; + isPerEvaluation: boolean; +} + +function PredicateRowGroup(props: PredicateRowGroupProps) { + const { renderedName, rowGroup, comparison, metric, isPerEvaluation } = props; + const [isExpanded, setExpanded] = useState(false); + const rowNames = useMemo( + () => abbreviateRANames(rowGroup.rows.map((row) => row.name)), + [rowGroup], + ); + if (rowGroup.rows.length === 1) { + return ; + } + return ( + + + setExpanded(!isExpanded)} + > + + + + {comparison && renderOptionalValue(rowGroup.before, metric.unit)} + {renderOptionalValue(rowGroup.after, metric.unit)} + {comparison && renderDelta(rowGroup.diff, metric.unit)} + + {renderedName} ({rowGroup.rows.length} predicates) + + + {isExpanded && + rowGroup.rows.map((row, rowIndex) => ( + + + + ))} + +
+ +
+ ); +} + +interface PredicateRowProps { + renderedName: React.ReactNode; + row: Row; + comparison: boolean; + metric: Metric; + isPerEvaluation: boolean; +} + +function PredicateRow(props: PredicateRowProps) { + const [isExpanded, setExpanded] = useState(false); + const { renderedName, row, comparison, metric, isPerEvaluation } = props; + const evaluationFactorBefore = + isPerEvaluation && isPresent(row.before) ? row.before.evaluationCount : 1; + const evaluationFactorAfter = + isPerEvaluation && isPresent(row.after) ? row.after.evaluationCount : 1; + return ( + + + setExpanded(!isExpanded)} + > + + + + {comparison && + renderPredicateMetric(row.before, metric, isPerEvaluation)} + {renderPredicateMetric(row.after, metric, isPerEvaluation)} + {comparison && renderDelta(row.diff, metric.unit)} + {renderedName} + + {isExpanded && ( + <> + + {collatePipelines( + isPresent(row.before) ? row.before.pipelines : {}, + isPresent(row.after) ? row.after.pipelines : {}, + ).map(({ name, first, second }, pipelineIndex) => ( + + + Tuple counts for '{name}' pipeline + {comparison && + (first == null + ? " (after)" + : second == null + ? " (before)" + : "")} + + } + /> + {abbreviateRASteps(first?.steps ?? second?.steps ?? []).map( + (step, index) => ( + + ), + )} + + ))} + + )} + +
+ ); +} + +interface PipelinePair { + name: string; + first: PipelineSummary | undefined; + second: PipelineSummary | undefined; +} + +function collatePipelines( + before: Record, + after: Record, +): PipelinePair[] { + const result: PipelinePair[] = []; + + for (const [name, first] of Object.entries(before)) { + const second = after[name]; + if (second == null) { + result.push({ name, first, second: undefined }); + } else if (samePipeline(first.steps, second.steps)) { + result.push({ name, first, second }); + } else { + result.push({ name, first, second: undefined }); + result.push({ name, first: undefined, second }); + } + } + + for (const [name, second] of Object.entries(after)) { + if (before[name] == null) { + result.push({ name, first: undefined, second }); + } + } + + return result; +} + +function samePipeline(a: string[], b: string[]) { + return a.length === b.length && a.every((x, i) => x === b[i]); +} + +function getPipelineSummaryHash(pipelines: Record) { + // Note: we can't import "crypto" here because it is not available in the browser, + // so we just concatenate the hashes of the individual pipelines. + const keys = Object.keys(pipelines).sort(); + let result = ""; + for (const key of keys) { + result += `${pipelines[key].hash};`; + } + return result; +} diff --git a/extensions/ql-vscode/src/view/compare-performance/RAPrettyPrinter.tsx b/extensions/ql-vscode/src/view/compare-performance/RAPrettyPrinter.tsx new file mode 100644 index 00000000000..b2595dd4c38 --- /dev/null +++ b/extensions/ql-vscode/src/view/compare-performance/RAPrettyPrinter.tsx @@ -0,0 +1,282 @@ +import { Fragment, useState } from "react"; +import { styled } from "styled-components"; + +/** + * A set of names, for generating unambiguous abbreviations. + */ +class NameSet { + private readonly abbreviations = new Map(); + + constructor(readonly names: string[]) { + const qnames = names.map(parseName); + const builder = new TrieBuilder(); + qnames + .map((qname) => builder.visitQName(qname)) + .forEach((r, index) => { + this.abbreviations.set(names[index], r.abbreviate(true)); + }); + } + + public getAbbreviation(name: string): React.ReactNode { + return this.abbreviations.get(name) ?? name; + } +} + +/** Name parsed into the form `prefix::name` */ +interface QualifiedName { + prefix?: QualifiedName; + name: string; + args?: QualifiedName[]; +} + +function qnameToString(name: QualifiedName): string { + const parts: string[] = []; + if (name.prefix != null) { + parts.push(qnameToString(name.prefix)); + parts.push("::"); + } + parts.push(name.name); + if (name.args != null && name.args.length > 0) { + parts.push("<"); + parts.push(name.args.map(qnameToString).join(",")); + parts.push(">"); + } + return parts.join(""); +} + +function tokeniseName(text: string) { + return Array.from(text.matchAll(/:+|<|>|,|"[^"]+"|`[^`]+`|[^:<>,"`]+/g)); +} + +function parseName(text: string): QualifiedName { + const tokens = tokeniseName(text); + + function next() { + return tokens.pop()![0]; + } + function peek() { + return tokens[tokens.length - 1][0]; + } + function skipToken(token: string) { + if (tokens.length > 0 && peek() === token) { + tokens.pop(); + return true; + } else { + return false; + } + } + + function parseQName(): QualifiedName { + // Note that the tokens stream is parsed in reverse order. This is simpler, but may look confusing initially. + let args: QualifiedName[] | undefined; + if (skipToken(">")) { + args = []; + while (tokens.length > 0 && peek() !== "<") { + args.push(parseQName()); + skipToken(","); + } + args.reverse(); + skipToken("<"); + } + const name = tokens.length === 0 ? "" : next(); + const prefix = skipToken("::") ? parseQName() : undefined; + return { + prefix, + name, + args, + }; + } + + const result = parseQName(); + if (tokens.length > 0) { + // It's a parse error if we did not consume all tokens. + // Just treat the whole text as the 'name'. + return { prefix: undefined, name: text, args: undefined }; + } + return result; +} + +class TrieNode { + children = new Map(); + constructor(readonly index: number) {} +} + +interface VisitResult { + node: TrieNode; + abbreviate: (isRoot?: boolean) => React.ReactNode; +} + +class TrieBuilder { + root = new TrieNode(0); + nextId = 1; + + getOrCreate(trieNode: TrieNode, child: string) { + const { children } = trieNode; + let node = children.get(child); + if (node == null) { + node = new TrieNode(this.nextId++); + children.set(child, node); + } + return node; + } + + visitQName(qname: QualifiedName): VisitResult { + const prefix = + qname.prefix != null ? this.visitQName(qname.prefix) : undefined; + const trieNodeBeforeArgs = this.getOrCreate( + prefix?.node ?? this.root, + qname.name, + ); + let trieNode = trieNodeBeforeArgs; + const args = qname.args?.map((arg) => this.visitQName(arg)); + if (args != null) { + const argKey = args.map((arg) => arg.node.index).join(","); + trieNode = this.getOrCreate(trieNodeBeforeArgs, argKey); + } + return { + node: trieNode, + abbreviate: (isRoot = false) => { + const result: React.ReactNode[] = []; + if (prefix != null) { + result.push(prefix.abbreviate()); + result.push("::"); + } + const { name } = qname; + const hash = name.indexOf("#"); + if (hash !== -1 && isRoot) { + const shortName = name.substring(0, hash); + result.push({shortName}); + result.push(name.substring(hash)); + } else { + result.push(isRoot ? {name} : name); + } + if (args != null) { + result.push("<"); + if (trieNodeBeforeArgs.children.size === 1) { + const argsText = qname + .args!.map((arg) => qnameToString(arg)) + .join(","); + result.push({argsText}); + } else { + let first = true; + for (const arg of args) { + result.push(arg.abbreviate()); + if (first) { + first = false; + } else { + result.push(","); + } + } + } + result.push(">"); + } + return result; + }, + }; + } +} + +const ExpandableTextButton = styled.button` + background: none; + border: none; + cursor: pointer; + padding: 0; + color: inherit; + &:hover { + background-color: rgba(128, 128, 128, 0.2); + } +`; + +interface ExpandableNamePartProps { + children: React.ReactNode; +} + +function ExpandableNamePart(props: ExpandableNamePartProps) { + const [isExpanded, setExpanded] = useState(false); + return ( + { + setExpanded(!isExpanded); + event.stopPropagation(); + }} + > + {isExpanded ? props.children : "..."} + + ); +} + +/** + * Span enclosing an entire qualified name. + * + * Can be used to gray out uninteresting parts of the name, though this looks worse than expected. + */ +const QNameSpan = styled.span` + /* color: var(--vscode-disabledForeground); */ +`; + +/** Span enclosing the innermost identifier, e.g. the `foo` in `A::B::foo#abc` */ +const IdentifierSpan = styled.span` + font-weight: 600; +`; + +/** Span enclosing keywords such as `JOIN` and `WITH`. */ +const KeywordSpan = styled.span` + font-weight: 500; +`; + +const nameTokenRegex = /\b[^ (]+\b/g; + +function traverseMatches( + text: string, + regex: RegExp, + callbacks: { + onMatch: (match: RegExpMatchArray) => void; + onText: (text: string) => void; + }, +) { + const matches = Array.from(text.matchAll(regex)); + let lastIndex = 0; + for (const match of matches) { + const before = text.substring(lastIndex, match.index); + if (before !== "") { + callbacks.onText(before); + } + callbacks.onMatch(match); + lastIndex = match.index + match[0].length; + } + const after = text.substring(lastIndex); + if (after !== "") { + callbacks.onText(after); + } +} + +export function abbreviateRASteps(steps: string[]): React.ReactNode[] { + const nameTokens = steps.flatMap((step) => + Array.from(step.matchAll(nameTokenRegex)).map((tok) => tok[0]), + ); + const nameSet = new NameSet(nameTokens.filter((name) => name.includes("::"))); + return steps.map((step, index) => { + const result: React.ReactNode[] = []; + traverseMatches(step, nameTokenRegex, { + onMatch(match) { + const text = match[0]; + if (text.includes("::")) { + result.push({nameSet.getAbbreviation(text)}); + } else if (/[A-Z]+/.test(text)) { + result.push({text}); + } else { + result.push(match[0]); + } + }, + onText(text) { + result.push(text); + }, + }); + return {result}; + }); +} + +export function abbreviateRANames(names: string[]): React.ReactNode[] { + const nameSet = new NameSet(names); + return names.map((name) => nameSet.getAbbreviation(name)); +} diff --git a/extensions/ql-vscode/src/view/compare-performance/RenamingInput.tsx b/extensions/ql-vscode/src/view/compare-performance/RenamingInput.tsx new file mode 100644 index 00000000000..c938cc6d1a4 --- /dev/null +++ b/extensions/ql-vscode/src/view/compare-performance/RenamingInput.tsx @@ -0,0 +1,103 @@ +import type { ChangeEvent } from "react"; +import { styled } from "styled-components"; +import { VscodeButton, VscodeTextfield } from "@vscode-elements/react-elements"; +import { Codicon } from "../common"; + +export class Renaming { + patternRegexp: RegExp | undefined; + + constructor( + public pattern: string, + public replacement: string, + ) { + this.patternRegexp = tryCompilePattern(pattern); + } +} + +function tryCompilePattern(pattern: string): RegExp | undefined { + try { + return new RegExp(pattern, "i"); + } catch { + return undefined; + } +} + +const Input = styled(VscodeTextfield)` + width: 20em; +`; + +const Row = styled.div` + display: flex; + padding-bottom: 0.25em; +`; + +const Details = styled.details` + padding: 1em; +`; + +interface RenamingInputProps { + renamings: Renaming[]; + setRenamings: (renamings: Renaming[]) => void; +} + +export function RenamingInput(props: RenamingInputProps) { + const { renamings, setRenamings } = props; + return ( +
+ Predicate renaming +

+ The following regexp replacements are applied to every predicate name on + both sides. Predicates whose names clash after renaming are grouped + together. Can be used to correlate predicates that were renamed between + the two runs. +
+ Can also be used to group related predicates, for example, renaming{" "} + .*ssa.* to SSA will group all SSA-related + predicates together. +

+ {renamings.map((renaming, index) => ( + + ) => { + const newRenamings = [...renamings]; + newRenamings[index] = new Renaming( + e.target.value, + renaming.replacement, + ); + setRenamings(newRenamings); + }} + > + + + ) => { + const newRenamings = [...renamings]; + newRenamings[index] = new Renaming( + renaming.pattern, + e.target.value, + ); + setRenamings(newRenamings); + }} + > + + setRenamings(renamings.filter((_, i) => i !== index)) + } + > + + +
+
+ ))} + setRenamings([...renamings, new Renaming("", "")])} + > + Add renaming rule + +
+ ); +} diff --git a/extensions/ql-vscode/src/view/compare-performance/index.tsx b/extensions/ql-vscode/src/view/compare-performance/index.tsx new file mode 100644 index 00000000000..ad0bb8f889a --- /dev/null +++ b/extensions/ql-vscode/src/view/compare-performance/index.tsx @@ -0,0 +1,8 @@ +import type { WebviewDefinition } from "../webview-definition"; +import { ComparePerformance } from "./ComparePerformance"; + +const definition: WebviewDefinition = { + component: , +}; + +export default definition; diff --git a/extensions/ql-vscode/src/view/compare/Compare.tsx b/extensions/ql-vscode/src/view/compare/Compare.tsx index f50e18fe99b..18412bac5f2 100644 --- a/extensions/ql-vscode/src/view/compare/Compare.tsx +++ b/extensions/ql-vscode/src/view/compare/Compare.tsx @@ -1,4 +1,4 @@ -import { useState, useEffect } from "react"; +import { useState, useRef } from "react"; import { styled } from "styled-components"; import type { @@ -6,6 +6,8 @@ import type { SetComparisonsMessage, SetComparisonQueryInfoMessage, UserSettings, + StreamingComparisonSetupMessage, + QueryCompareResult, } from "../../common/interface-types"; import { DEFAULT_USER_SETTINGS } from "../../common/interface-types"; import CompareSelector from "./CompareSelector"; @@ -14,6 +16,7 @@ import CompareTable from "./CompareTable"; import "../results/resultsView.css"; import { assertNever } from "../../common/helpers-pure"; +import { useMessageFromExtension } from "../common/useMessageFromExtension"; const Header = styled.div` display: flex; @@ -37,39 +40,112 @@ export function Compare(_: Record): React.JSX.Element { DEFAULT_USER_SETTINGS, ); + // This is a ref because we don't need to re-render when we get a new streaming comparison message + // and we don't want to change the listener every time we get a new message + const streamingComparisonRef = useRef( + null, + ); + const message = comparison?.message || "Empty comparison"; const hasRows = comparison?.result && (comparison.result.to.length || comparison.result.from.length); - useEffect(() => { - const listener = (evt: MessageEvent) => { - if (evt.origin === window.origin) { - const msg: ToCompareViewMessage = evt.data; - switch (msg.t) { - case "setComparisonQueryInfo": - setQueryInfo(msg); - break; - case "setComparisons": - setComparison(msg); + useMessageFromExtension((msg) => { + switch (msg.t) { + case "setComparisonQueryInfo": + setQueryInfo(msg); + break; + case "setComparisons": + setComparison(msg); + break; + case "streamingComparisonSetup": + setComparison(null); + streamingComparisonRef.current = msg; + break; + case "streamingComparisonAddResults": { + const prev = streamingComparisonRef.current; + if (prev === null) { + console.warn( + 'Received "streamingComparisonAddResults" before "streamingComparisonSetup"', + ); + break; + } + + if (prev.id !== msg.id) { + console.warn( + 'Received "streamingComparisonAddResults" with different id, ignoring', + ); + break; + } + + let result: QueryCompareResult; + switch (prev.result.kind) { + case "raw": + if (msg.result.kind !== "raw") { + throw new Error( + "Streaming comparison: expected raw results, got interpreted results", + ); + } + + result = { + ...prev.result, + from: [...prev.result.from, ...msg.result.from], + to: [...prev.result.to, ...msg.result.to], + }; break; - case "setUserSettings": - setUserSettings(msg.userSettings); + case "interpreted": + if (msg.result.kind !== "interpreted") { + throw new Error( + "Streaming comparison: expected interpreted results, got raw results", + ); + } + + result = { + ...prev.result, + from: [...prev.result.from, ...msg.result.from], + to: [...prev.result.to, ...msg.result.to], + }; break; default: - assertNever(msg); + throw new Error("Unexpected comparison result kind"); } - } else { - // sanitize origin - const origin = evt.origin.replace(/\n|\r/g, ""); - console.error(`Invalid event origin ${origin}`); + + streamingComparisonRef.current = { + ...prev, + result, + }; + + break; } - }; - window.addEventListener("message", listener); + case "streamingComparisonComplete": + if (streamingComparisonRef.current === null) { + console.warn( + 'Received "streamingComparisonComplete" before "streamingComparisonSetup"', + ); + setComparison(null); + break; + } + + if (streamingComparisonRef.current.id !== msg.id) { + console.warn( + 'Received "streamingComparisonComplete" with different id, ignoring', + ); + break; + } - return () => { - window.removeEventListener("message", listener); - }; + setComparison({ + ...streamingComparisonRef.current, + t: "setComparisons", + }); + streamingComparisonRef.current = null; + break; + case "setUserSettings": + setUserSettings(msg.userSettings); + break; + default: + assertNever(msg); + } }, []); if (!queryInfo || !comparison) { diff --git a/extensions/ql-vscode/src/view/data-flow-paths/DataFlowPathsView.tsx b/extensions/ql-vscode/src/view/data-flow-paths/DataFlowPathsView.tsx index 9267b81f053..6fc2b3b4ba7 100644 --- a/extensions/ql-vscode/src/view/data-flow-paths/DataFlowPathsView.tsx +++ b/extensions/ql-vscode/src/view/data-flow-paths/DataFlowPathsView.tsx @@ -1,7 +1,8 @@ -import { useEffect, useState } from "react"; +import { useState } from "react"; import type { ToDataFlowPathsMessage } from "../../common/interface-types"; import type { DataFlowPaths as DataFlowPathsDomainModel } from "../../variant-analysis/shared/data-flow-paths"; import { DataFlowPaths } from "./DataFlowPaths"; +import { useMessageFromExtension } from "../common/useMessageFromExtension"; export type DataFlowPathsViewProps = { dataFlowPaths?: DataFlowPathsDomainModel; @@ -14,28 +15,12 @@ export function DataFlowPathsView({ DataFlowPathsDomainModel | undefined >(initialDataFlowPaths); - useEffect(() => { - const listener = (evt: MessageEvent) => { - if (evt.origin === window.origin) { - const msg: ToDataFlowPathsMessage = evt.data; - if (msg.t === "setDataFlowPaths") { - setDataFlowPaths(msg.dataFlowPaths); + useMessageFromExtension((msg) => { + setDataFlowPaths(msg.dataFlowPaths); - // Scroll to the top of the page when we're rendering - // new data flow paths. - window.scrollTo(0, 0); - } - } else { - // sanitize origin - const origin = evt.origin.replace(/\n|\r/g, ""); - console.error(`Invalid event origin ${origin}`); - } - }; - window.addEventListener("message", listener); - - return () => { - window.removeEventListener("message", listener); - }; + // Scroll to the top of the page when we're rendering + // new data flow paths. + window.scrollTo(0, 0); }, []); if (!dataFlowPaths) { diff --git a/extensions/ql-vscode/src/view/jest-environment-jsdom.ts b/extensions/ql-vscode/src/view/jest-environment-jsdom.ts new file mode 100644 index 00000000000..a43586ddbd3 --- /dev/null +++ b/extensions/ql-vscode/src/view/jest-environment-jsdom.ts @@ -0,0 +1,15 @@ +// eslint-disable-next-line import/no-namespace -- We need a type of JSDOM so we can't use named imports. +import * as JSDOM from "jsdom"; +import type { + EnvironmentContext, + JestEnvironmentConfig, +} from "@jest/environment"; +import BaseEnv from "@jest/environment-jsdom-abstract"; + +export default class JSDOMEnvironment extends BaseEnv { + constructor(config: JestEnvironmentConfig, context: EnvironmentContext) { + super(config, context, JSDOM); + } +} + +export const TestEnvironment = JSDOMEnvironment; diff --git a/extensions/ql-vscode/src/view/jest.config.ts b/extensions/ql-vscode/src/view/jest.config.ts index 441e0e970ca..c197b277e62 100644 --- a/extensions/ql-vscode/src/view/jest.config.ts +++ b/extensions/ql-vscode/src/view/jest.config.ts @@ -1,4 +1,5 @@ import type { Config } from "jest"; +import { transformIgnorePatterns } from "../../test/jest-config"; /* * For a detailed explanation regarding each configuration property and type check, visit: @@ -141,7 +142,7 @@ const config: Config = { // snapshotSerializers: [], // The test environment that will be used for testing - testEnvironment: "jsdom", + testEnvironment: "/jest-environment-jsdom.ts", // Options that will be passed to the testEnvironment // testEnvironmentOptions: {}, @@ -184,10 +185,7 @@ const config: Config = { }, // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - transformIgnorePatterns: [ - // These use ES modules, so need to be transformed - "node_modules/(?!(?:@vscode/webview-ui-toolkit|@microsoft/.+|exenv-es6|d3|d3-(.*)|internmap|delaunator|robust-predicates)/.*)", - ], + transformIgnorePatterns, // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them // unmockedModulePathPatterns: undefined, diff --git a/extensions/ql-vscode/src/view/jest.setup.ts b/extensions/ql-vscode/src/view/jest.setup.ts index 23cb3e2f973..31dc6657d40 100644 --- a/extensions/ql-vscode/src/view/jest.setup.ts +++ b/extensions/ql-vscode/src/view/jest.setup.ts @@ -18,6 +18,20 @@ Object.defineProperty(window, "matchMedia", { // Used by Primer React window.CSS.supports = jest.fn().mockResolvedValue(false); +// Functions that are not implemented in jsdom +window.CSSStyleSheet.prototype.replaceSync = jest + .fn() + .mockReturnValue(undefined); +window.ElementInternals.prototype.setFormValue = jest + .fn() + .mockReturnValue(undefined); +window.ElementInternals.prototype.setValidity = jest + .fn() + .mockReturnValue(undefined); +window.HTMLSlotElement.prototype.assignedElements = jest + .fn() + .mockReturnValue([]); + // Store this on the window so we can mock it window.vsCodeApi = { postMessage: jest.fn(), diff --git a/extensions/ql-vscode/src/view/method-modeling/MethodModeling.tsx b/extensions/ql-vscode/src/view/method-modeling/MethodModeling.tsx index fcb3ed333c1..9e16ed67bb9 100644 --- a/extensions/ql-vscode/src/view/method-modeling/MethodModeling.tsx +++ b/extensions/ql-vscode/src/view/method-modeling/MethodModeling.tsx @@ -4,7 +4,7 @@ import { ModelingStatusIndicator } from "../model-editor/ModelingStatusIndicator import type { Method } from "../../model-editor/method"; import { MethodName } from "../model-editor/MethodName"; import type { ModeledMethod } from "../../model-editor/modeled-method"; -import { VSCodeTag } from "@vscode/webview-ui-toolkit/react"; +import { Tag } from "../common/Tag"; import { ReviewInEditorButton } from "./ReviewInEditorButton"; import { MultipleModeledMethodsPanel } from "./MultipleModeledMethodsPanel"; import type { QueryLanguage } from "../../common/query-language"; @@ -39,14 +39,12 @@ const DependencyContainer = styled.div` margin-bottom: 0.8rem; `; -const StyledVSCodeTag = styled(VSCodeTag)<{ $visible: boolean }>` +const StyledTag = styled(Tag)<{ $visible: boolean }>` visibility: ${(props) => (props.$visible ? "visible" : "hidden")}; `; const UnsavedTag = ({ modelingStatus }: { modelingStatus: ModelingStatus }) => ( - - Unsaved - + Unsaved ); export type MethodModelingProps = { @@ -55,8 +53,6 @@ export type MethodModelingProps = { modelingStatus: ModelingStatus; method: Method; modeledMethods: ModeledMethod[]; - isModelingInProgress: boolean; - isProcessedByAutoModel: boolean; onChange: (methodSignature: string, modeledMethods: ModeledMethod[]) => void; }; @@ -66,8 +62,6 @@ export const MethodModeling = ({ modelingStatus, modeledMethods, method, - isModelingInProgress, - isProcessedByAutoModel, onChange, }: MethodModelingProps): React.JSX.Element => { return ( @@ -86,9 +80,6 @@ export const MethodModeling = ({ modelConfig={modelConfig} method={method} modeledMethods={modeledMethods} - isModelingInProgress={isModelingInProgress} - isProcessedByAutoModel={isProcessedByAutoModel} - modelingStatus={modelingStatus} onChange={onChange} /> diff --git a/extensions/ql-vscode/src/view/method-modeling/MethodModelingInputs.tsx b/extensions/ql-vscode/src/view/method-modeling/MethodModelingInputs.tsx index 18b33ce6577..5db0705be44 100644 --- a/extensions/ql-vscode/src/view/method-modeling/MethodModelingInputs.tsx +++ b/extensions/ql-vscode/src/view/method-modeling/MethodModelingInputs.tsx @@ -5,7 +5,6 @@ import { ModelTypeDropdown } from "../model-editor/ModelTypeDropdown"; import { ModelInputDropdown } from "../model-editor/ModelInputDropdown"; import { ModelOutputDropdown } from "../model-editor/ModelOutputDropdown"; import { ModelKindDropdown } from "../model-editor/ModelKindDropdown"; -import { InProgressDropdown } from "../model-editor/InProgressDropdown"; import type { QueryLanguage } from "../../common/query-language"; import type { ModelConfig } from "../../model-editor/languages"; @@ -28,8 +27,6 @@ export type MethodModelingInputsProps = { modelConfig: ModelConfig; method: Method; modeledMethod: ModeledMethod | undefined; - modelPending: boolean; - isModelingInProgress: boolean; onChange: (modeledMethod: ModeledMethod) => void; }; @@ -38,15 +35,12 @@ export const MethodModelingInputs = ({ modelConfig, method, modeledMethod, - modelPending, - isModelingInProgress, onChange, }: MethodModelingInputsProps): React.JSX.Element => { const inputProps = { language, method, modeledMethod, - modelPending, onChange, }; @@ -55,41 +49,25 @@ export const MethodModelingInputs = ({ Model Type - {isModelingInProgress ? ( - - ) : ( - - )} + Input - {isModelingInProgress ? ( - - ) : ( - - )} + Output - {isModelingInProgress ? ( - - ) : ( - - )} + Kind - {isModelingInProgress ? ( - - ) : ( - - )} + diff --git a/extensions/ql-vscode/src/view/method-modeling/MethodModelingView.tsx b/extensions/ql-vscode/src/view/method-modeling/MethodModelingView.tsx index 8e68a351be6..53ec8d1101a 100644 --- a/extensions/ql-vscode/src/view/method-modeling/MethodModelingView.tsx +++ b/extensions/ql-vscode/src/view/method-modeling/MethodModelingView.tsx @@ -1,4 +1,4 @@ -import { useEffect, useMemo, useState } from "react"; +import { useMemo, useState } from "react"; import { MethodModeling } from "./MethodModeling"; import { getModelingStatus } from "../../model-editor/shared/modeling-status"; import type { Method } from "../../model-editor/method"; @@ -12,6 +12,7 @@ import { NoMethodSelected } from "./NoMethodSelected"; import type { MethodModelingPanelViewState } from "../../model-editor/shared/view-state"; import { MethodAlreadyModeled } from "./MethodAlreadyModeled"; import { defaultModelConfig } from "../../model-editor/languages"; +import { useMessageFromExtension } from "../common/useMessageFromExtension"; type Props = { initialViewState?: MethodModelingPanelViewState; @@ -31,68 +32,38 @@ export function MethodModelingView({ const [isMethodModified, setIsMethodModified] = useState(false); - const [isModelingInProgress, setIsModelingInProgress] = - useState(false); - - const [isProcessedByAutoModel, setIsProcessedByAutoModel] = - useState(false); - const modelingStatus = useMemo( () => getModelingStatus(modeledMethods, isMethodModified), [modeledMethods, isMethodModified], ); - useEffect(() => { - const listener = (evt: MessageEvent) => { - if (evt.origin === window.origin) { - const msg: ToMethodModelingMessage = evt.data; - switch (msg.t) { - case "setMethodModelingPanelViewState": - setViewState(msg.viewState); - break; - case "setInModelingMode": - setInModelingMode(msg.inModelingMode); - break; - case "setMultipleModeledMethods": - setModeledMethods(msg.modeledMethods); - break; - case "setMethodModified": - setIsMethodModified(msg.isModified); - break; - case "setNoMethodSelected": - setMethod(undefined); - setModeledMethods([]); - setIsMethodModified(false); - setIsModelingInProgress(false); - setIsProcessedByAutoModel(false); - break; - case "setSelectedMethod": - setMethod(msg.method); - setModeledMethods(msg.modeledMethods); - setIsMethodModified(msg.isModified); - setIsModelingInProgress(msg.isInProgress); - setIsProcessedByAutoModel(msg.processedByAutoModel); - break; - case "setInProgress": - setIsModelingInProgress(msg.inProgress); - break; - case "setProcessedByAutoModel": - setIsProcessedByAutoModel(msg.processedByAutoModel); - break; - default: - assertNever(msg); - } - } else { - // sanitize origin - const origin = evt.origin.replace(/\n|\r/g, ""); - console.error(`Invalid event origin ${origin}`); - } - }; - window.addEventListener("message", listener); - - return () => { - window.removeEventListener("message", listener); - }; + useMessageFromExtension((msg) => { + switch (msg.t) { + case "setMethodModelingPanelViewState": + setViewState(msg.viewState); + break; + case "setInModelingMode": + setInModelingMode(msg.inModelingMode); + break; + case "setMultipleModeledMethods": + setModeledMethods(msg.modeledMethods); + break; + case "setMethodModified": + setIsMethodModified(msg.isModified); + break; + case "setNoMethodSelected": + setMethod(undefined); + setModeledMethods([]); + setIsMethodModified(false); + break; + case "setSelectedMethod": + setMethod(msg.method); + setModeledMethods(msg.modeledMethods); + setIsMethodModified(msg.isModified); + break; + default: + assertNever(msg); + } }, []); if (!inModelingMode || !viewState?.language) { @@ -125,8 +96,6 @@ export function MethodModelingView({ modelingStatus={modelingStatus} method={method} modeledMethods={modeledMethods} - isModelingInProgress={isModelingInProgress} - isProcessedByAutoModel={isProcessedByAutoModel} onChange={onChange} /> ); diff --git a/extensions/ql-vscode/src/view/method-modeling/MultipleModeledMethodsPanel.tsx b/extensions/ql-vscode/src/view/method-modeling/MultipleModeledMethodsPanel.tsx index dff8c55c8e7..ed55c497d71 100644 --- a/extensions/ql-vscode/src/view/method-modeling/MultipleModeledMethodsPanel.tsx +++ b/extensions/ql-vscode/src/view/method-modeling/MultipleModeledMethodsPanel.tsx @@ -1,31 +1,26 @@ import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import type { Method } from "../../model-editor/method"; import type { ModeledMethod } from "../../model-editor/modeled-method"; -import { isModelPending } from "../../model-editor/modeled-method"; import { canAddNewModeledMethod, canRemoveModeledMethod, } from "../../model-editor/shared/multiple-modeled-methods"; import { styled } from "styled-components"; import { MethodModelingInputs } from "./MethodModelingInputs"; -import { VSCodeButton } from "@vscode/webview-ui-toolkit/react"; import { Codicon } from "../common"; import { validateModeledMethods } from "../../model-editor/shared/validation"; import { ModeledMethodAlert } from "./ModeledMethodAlert"; import type { QueryLanguage } from "../../common/query-language"; import { createEmptyModeledMethod } from "../../model-editor/modeled-method-empty"; import { sendTelemetry } from "../common/telemetry"; -import type { ModelingStatus } from "../../model-editor/shared/modeling-status"; import type { ModelConfig } from "../../model-editor/languages"; +import { ActionButton } from "../common/ActionButton/ActionButton"; export type MultipleModeledMethodsPanelProps = { language: QueryLanguage; modelConfig: ModelConfig; method: Method; modeledMethods: ModeledMethod[]; - modelingStatus: ModelingStatus; - isModelingInProgress: boolean; - isProcessedByAutoModel: boolean; onChange: (methodSignature: string, modeledMethods: ModeledMethod[]) => void; }; @@ -66,9 +61,6 @@ export const MultipleModeledMethodsPanel = ({ modelConfig, method, modeledMethods, - modelingStatus, - isModelingInProgress, - isProcessedByAutoModel, onChange, }: MultipleModeledMethodsPanelProps) => { const [selectedIndex, setSelectedIndex] = useState(0); @@ -163,12 +155,6 @@ export const MultipleModeledMethodsPanel = ({ modelConfig={modelConfig} method={method} modeledMethod={modeledMethods[selectedIndex]} - modelPending={isModelPending( - modeledMethods[selectedIndex], - modelingStatus, - isProcessedByAutoModel, - )} - isModelingInProgress={isModelingInProgress} onChange={handleChange} /> ) : ( @@ -177,32 +163,24 @@ export const MultipleModeledMethodsPanel = ({ modelConfig={modelConfig} method={method} modeledMethod={undefined} - modelPending={isModelPending( - modeledMethods[selectedIndex], - modelingStatus, - isProcessedByAutoModel, - )} - isModelingInProgress={isModelingInProgress} onChange={handleChange} /> )}
- - + {modeledMethods.length > 1 && (
{selectedIndex + 1}/{modeledMethods.length}
)} - - +
- - - + - +
diff --git a/extensions/ql-vscode/src/view/method-modeling/__tests__/MethodModeling.spec.tsx b/extensions/ql-vscode/src/view/method-modeling/__tests__/MethodModeling.spec.tsx index 3c3325d41e1..9a6496aea20 100644 --- a/extensions/ql-vscode/src/view/method-modeling/__tests__/MethodModeling.spec.tsx +++ b/extensions/ql-vscode/src/view/method-modeling/__tests__/MethodModeling.spec.tsx @@ -13,8 +13,6 @@ describe(MethodModeling.name, () => { it("renders method modeling panel", () => { const method = createMethod(); const modeledMethod = createSinkModeledMethod(); - const isModelingInProgress = false; - const isProcessedByAutoModel = false; const onChange = jest.fn(); render({ @@ -23,8 +21,6 @@ describe(MethodModeling.name, () => { modelingStatus: "saved", method, modeledMethods: [modeledMethod], - isModelingInProgress, - isProcessedByAutoModel, onChange, }); diff --git a/extensions/ql-vscode/src/view/method-modeling/__tests__/MethodModelingInputs.spec.tsx b/extensions/ql-vscode/src/view/method-modeling/__tests__/MethodModelingInputs.spec.tsx index e5dc9bb5bde..0734a7064e3 100644 --- a/extensions/ql-vscode/src/view/method-modeling/__tests__/MethodModelingInputs.spec.tsx +++ b/extensions/ql-vscode/src/view/method-modeling/__tests__/MethodModelingInputs.spec.tsx @@ -18,8 +18,6 @@ describe(MethodModelingInputs.name, () => { const language = QueryLanguage.Java; const method = createMethod(); const modeledMethod = createSinkModeledMethod(); - const modelPending = false; - const isModelingInProgress = false; const modelConfig = defaultModelConfig; const onChange = jest.fn(); @@ -28,8 +26,6 @@ describe(MethodModelingInputs.name, () => { language, method, modeledMethod, - modelPending, - isModelingInProgress, modelConfig, onChange, }); @@ -56,8 +52,6 @@ describe(MethodModelingInputs.name, () => { language, method, modeledMethod, - modelPending, - isModelingInProgress, modelConfig, onChange, }); @@ -80,8 +74,6 @@ describe(MethodModelingInputs.name, () => { language, method, modeledMethod, - modelPending, - isModelingInProgress, modelConfig, onChange, }); @@ -96,8 +88,6 @@ describe(MethodModelingInputs.name, () => { language={language} method={method} modeledMethod={updatedModeledMethod} - modelPending={modelPending} - isModelingInProgress={isModelingInProgress} modelConfig={modelConfig} onChange={onChange} />, @@ -121,32 +111,4 @@ describe(MethodModelingInputs.name, () => { expect(modelOutputDropdown).toHaveValue("ReturnValue"); expect(modelKindDropdown).toHaveValue("local"); }); - - it("sets in progress dropdowns when modeling is in progress", () => { - render({ - language, - method, - modeledMethod, - modelPending, - isModelingInProgress: true, - modelConfig, - onChange, - }); - - // Check that all the labels are rendered. - expect(screen.getByText("Model Type")).toBeInTheDocument(); - expect(screen.getByText("Input")).toBeInTheDocument(); - expect(screen.getByText("Output")).toBeInTheDocument(); - expect(screen.getByText("Kind")).toBeInTheDocument(); - - // Check that all the dropdowns are rendered. - const dropdowns = screen.getAllByRole("combobox"); - expect(dropdowns.length).toBe(4); - - // Check that all the dropdowns are disabled and indicate have the value "Thinking...". - dropdowns.forEach((dropdown) => { - expect(dropdown).toBeDisabled(); - expect(dropdown).toHaveValue("Thinking..."); - }); - }); }); diff --git a/extensions/ql-vscode/src/view/method-modeling/__tests__/MultipleModeledMethodsPanel.spec.tsx b/extensions/ql-vscode/src/view/method-modeling/__tests__/MultipleModeledMethodsPanel.spec.tsx index 87c220c7c05..27372287bfc 100644 --- a/extensions/ql-vscode/src/view/method-modeling/__tests__/MultipleModeledMethodsPanel.spec.tsx +++ b/extensions/ql-vscode/src/view/method-modeling/__tests__/MultipleModeledMethodsPanel.spec.tsx @@ -10,25 +10,18 @@ import { MultipleModeledMethodsPanel } from "../MultipleModeledMethodsPanel"; import { userEvent } from "@testing-library/user-event"; import type { ModeledMethod } from "../../../model-editor/modeled-method"; import { QueryLanguage } from "../../../common/query-language"; -import type { ModelingStatus } from "../../../model-editor/shared/modeling-status"; import { defaultModelConfig } from "../../../model-editor/languages"; describe(MultipleModeledMethodsPanel.name, () => { const language = QueryLanguage.Java; const method = createMethod(); - const isModelingInProgress = false; - const isProcessedByAutoModel = false; - const modelingStatus: ModelingStatus = "unmodeled"; const onChange = jest.fn(); const modelConfig = defaultModelConfig; const baseProps = { language, method, - modelingStatus, - isModelingInProgress, modelConfig, - isProcessedByAutoModel, onChange, }; @@ -59,32 +52,26 @@ describe(MultipleModeledMethodsPanel.name, () => { ).toHaveValue("none"); }); - it("disables all pagination", () => { + it("disables all pagination", async () => { render(); - expect( - screen - .getByLabelText("Previous modeling") - .getElementsByTagName("input")[0], - ).toBeDisabled(); - expect( - screen.getByLabelText("Next modeling").getElementsByTagName("input")[0], - ).toBeDisabled(); + const prevButton = await screen.findByLabelText("Previous modeling"); + const nextButton = await screen.findByLabelText("Next modeling"); + + expect(prevButton).toBeDisabled(); + expect(nextButton).toBeDisabled(); expect(screen.queryByText("0/0")).not.toBeInTheDocument(); expect(screen.queryByText("1/0")).not.toBeInTheDocument(); }); - it("cannot add or delete modeling", () => { + it("cannot add or delete modeling", async () => { render(); - expect( - screen - .getByLabelText("Delete modeling") - .getElementsByTagName("input")[0], - ).toBeDisabled(); - expect( - screen.getByLabelText("Add modeling").getElementsByTagName("input")[0], - ).toBeDisabled(); + const deleteButton = await screen.findByLabelText("Delete modeling"); + const addButton = await screen.findByLabelText("Add modeling"); + + expect(deleteButton).toBeDisabled(); + expect(addButton).toBeDisabled(); }); }); @@ -111,28 +98,22 @@ describe(MultipleModeledMethodsPanel.name, () => { ).toHaveValue("sink"); }); - it("disables all pagination", () => { + it("disables all pagination", async () => { render(); - expect( - screen - .getByLabelText("Previous modeling") - .getElementsByTagName("input")[0], - ).toBeDisabled(); - expect( - screen.getByLabelText("Next modeling").getElementsByTagName("input")[0], - ).toBeDisabled(); + const prevButton = await screen.findByLabelText("Previous modeling"); + const nextButton = await screen.findByLabelText("Next modeling"); + + expect(prevButton).toBeDisabled(); + expect(nextButton).toBeDisabled(); expect(screen.queryByText("1/1")).not.toBeInTheDocument(); }); - it("cannot delete modeling", () => { + it("cannot delete modeling", async () => { render(); - expect( - screen - .getByLabelText("Delete modeling") - .getElementsByTagName("input")[0], - ).toBeDisabled(); + const deleteButton = await screen.findByLabelText("Delete modeling"); + expect(deleteButton).toBeDisabled(); }); it("can add modeling", async () => { @@ -206,37 +187,26 @@ describe(MultipleModeledMethodsPanel.name, () => { it("disables the correct pagination", async () => { render(); - expect( - screen - .getByLabelText("Previous modeling") - .getElementsByTagName("input")[0], - ).toBeDisabled(); - expect( - screen.getByLabelText("Next modeling").getElementsByTagName("input")[0], - ).toBeEnabled(); + const prevButton = await screen.findByLabelText("Previous modeling"); + const nextButton = await screen.findByLabelText("Next modeling"); + + expect(prevButton).toBeDisabled(); + expect(nextButton).toBeEnabled(); }); it("can use the pagination", async () => { render(); - await userEvent.click(screen.getByLabelText("Next modeling")); + const prevButton = await screen.findByLabelText("Previous modeling"); + const nextButton = await screen.findByLabelText("Next modeling"); + await userEvent.click(nextButton); await waitFor(() => { - expect( - screen - .getByLabelText("Previous modeling") - .getElementsByTagName("input")[0], - ).toBeEnabled(); + expect(prevButton).toBeEnabled(); }); - expect( - screen - .getByLabelText("Previous modeling") - .getElementsByTagName("input")[0], - ).toBeEnabled(); - expect( - screen.getByLabelText("Next modeling").getElementsByTagName("input")[0], - ).toBeDisabled(); + expect(prevButton).toBeEnabled(); + expect(nextButton).toBeDisabled(); expect(screen.getByText("2/2")).toBeInTheDocument(); expect( @@ -452,34 +422,20 @@ describe(MultipleModeledMethodsPanel.name, () => { it("can use the pagination", async () => { render(); - expect( - screen - .getByLabelText("Previous modeling") - .getElementsByTagName("input")[0], - ).toBeDisabled(); - expect( - screen.getByLabelText("Next modeling").getElementsByTagName("input")[0], - ).toBeEnabled(); + const prevButton = await screen.findByLabelText("Previous modeling"); + const nextButton = await screen.findByLabelText("Next modeling"); + expect(prevButton).toBeDisabled(); + expect(nextButton).toBeEnabled(); expect(screen.getByText("1/3")).toBeInTheDocument(); - await userEvent.click(screen.getByLabelText("Next modeling")); + await userEvent.click(nextButton); await waitFor(() => { - expect( - screen - .getByLabelText("Previous modeling") - .getElementsByTagName("input")[0], - ).toBeEnabled(); + expect(prevButton).toBeEnabled(); }); - expect( - screen - .getByLabelText("Previous modeling") - .getElementsByTagName("input")[0], - ).toBeEnabled(); - expect( - screen.getByLabelText("Next modeling").getElementsByTagName("input")[0], - ).toBeEnabled(); + expect(prevButton).toBeEnabled(); + expect(nextButton).toBeEnabled(); expect(screen.getByText("2/3")).toBeInTheDocument(); expect( @@ -488,16 +444,10 @@ describe(MultipleModeledMethodsPanel.name, () => { }), ).toHaveValue("source"); - await userEvent.click(screen.getByLabelText("Next modeling")); + await userEvent.click(nextButton); - expect( - screen - .getByLabelText("Previous modeling") - .getElementsByTagName("input")[0], - ).toBeEnabled(); - expect( - screen.getByLabelText("Next modeling").getElementsByTagName("input")[0], - ).toBeDisabled(); + expect(prevButton).toBeEnabled(); + expect(nextButton).toBeDisabled(); expect(screen.getByText("3/3")).toBeInTheDocument(); expect( @@ -506,24 +456,14 @@ describe(MultipleModeledMethodsPanel.name, () => { }), ).toHaveValue("local"); - await userEvent.click(screen.getByLabelText("Previous modeling")); + await userEvent.click(prevButton); await waitFor(() => { - expect( - screen - .getByLabelText("Next modeling") - .getElementsByTagName("input")[0], - ).toBeEnabled(); + expect(nextButton).toBeEnabled(); }); - expect( - screen - .getByLabelText("Previous modeling") - .getElementsByTagName("input")[0], - ).toBeEnabled(); - expect( - screen.getByLabelText("Next modeling").getElementsByTagName("input")[0], - ).toBeEnabled(); + expect(prevButton).toBeEnabled(); + expect(nextButton).toBeEnabled(); expect(screen.getByText("2/3")).toBeInTheDocument(); expect( @@ -581,12 +521,11 @@ describe(MultipleModeledMethodsPanel.name, () => { const render = createRender(modeledMethods); - it("can add modeling", () => { + it("can add modeling", async () => { render(); - expect( - screen.getByLabelText("Add modeling").getElementsByTagName("input")[0], - ).toBeEnabled(); + const addButton = await screen.findByLabelText("Add modeling"); + expect(addButton).toBeEnabled(); }); it("can delete first modeling", async () => { diff --git a/extensions/ql-vscode/src/view/model-alerts/ModelAlerts.tsx b/extensions/ql-vscode/src/view/model-alerts/ModelAlerts.tsx index 6f065286336..70169f0a9f4 100644 --- a/extensions/ql-vscode/src/view/model-alerts/ModelAlerts.tsx +++ b/extensions/ql-vscode/src/view/model-alerts/ModelAlerts.tsx @@ -1,4 +1,4 @@ -import { useCallback, useEffect, useMemo, useState } from "react"; +import { useCallback, useMemo, useState } from "react"; import { styled } from "styled-components"; import { ModelAlertsHeader } from "./ModelAlertsHeader"; import type { ModelAlertsViewState } from "../../model-editor/shared/view-state"; @@ -18,6 +18,7 @@ import { } from "../../model-editor/shared/model-alerts-filter-sort"; import type { ModelAlertsFilterSortState } from "../../model-editor/shared/model-alerts-filter-sort"; import type { ModeledMethod } from "../../model-editor/modeled-method"; +import { useMessageFromExtension } from "../common/useMessageFromExtension"; type Props = { initialViewState?: ModelAlertsViewState; @@ -67,47 +68,33 @@ export function ModelAlerts({ null, ); - useEffect(() => { - const listener = (evt: MessageEvent) => { - if (evt.origin === window.origin) { - const msg: ToModelAlertsMessage = evt.data; - switch (msg.t) { - case "setModelAlertsViewState": { - setViewState(msg.viewState); - break; - } - case "setVariantAnalysis": { - setVariantAnalysis(msg.variantAnalysis); - break; - } - case "setRepoResults": { - setRepoResults((oldRepoResults) => { - const newRepoIds = msg.repoResults.map((r) => r.repositoryId); - return [ - ...oldRepoResults.filter( - (v) => !newRepoIds.includes(v.repositoryId), - ), - ...msg.repoResults, - ]; - }); - break; - } - case "revealModel": { - setRevealedModel(msg.modeledMethod); - break; - } - } - } else { - // sanitize origin - const origin = evt.origin.replace(/\n|\r/g, ""); - console.error(`Invalid event origin ${origin}`); + useMessageFromExtension((msg) => { + switch (msg.t) { + case "setModelAlertsViewState": { + setViewState(msg.viewState); + break; } - }; - window.addEventListener("message", listener); - - return () => { - window.removeEventListener("message", listener); - }; + case "setVariantAnalysis": { + setVariantAnalysis(msg.variantAnalysis); + break; + } + case "setRepoResults": { + setRepoResults((oldRepoResults) => { + const newRepoIds = msg.repoResults.map((r) => r.repositoryId); + return [ + ...oldRepoResults.filter( + (v) => !newRepoIds.includes(v.repositoryId), + ), + ...msg.repoResults, + ]; + }); + break; + } + case "revealModel": { + setRevealedModel(msg.modeledMethod); + break; + } + } }, []); const modelAlerts = useMemo(() => { diff --git a/extensions/ql-vscode/src/view/model-alerts/ModelAlertsActions.tsx b/extensions/ql-vscode/src/view/model-alerts/ModelAlertsActions.tsx index e99689634d2..da73126d2fc 100644 --- a/extensions/ql-vscode/src/view/model-alerts/ModelAlertsActions.tsx +++ b/extensions/ql-vscode/src/view/model-alerts/ModelAlertsActions.tsx @@ -1,6 +1,6 @@ import { styled } from "styled-components"; -import { VSCodeButton } from "@vscode/webview-ui-toolkit/react"; import { VariantAnalysisStatus } from "../../variant-analysis/shared/variant-analysis"; +import { VscodeButton } from "@vscode-elements/react-elements"; type ModelAlertsActionsProps = { variantAnalysisStatus: VariantAnalysisStatus; @@ -14,7 +14,7 @@ const Container = styled.div` gap: 1em; `; -const Button = styled(VSCodeButton)` +const Button = styled(VscodeButton)` white-space: nowrap; `; @@ -25,12 +25,12 @@ export const ModelAlertsActions = ({ return ( {variantAnalysisStatus === VariantAnalysisStatus.InProgress && ( - )} {variantAnalysisStatus === VariantAnalysisStatus.Canceling && ( - )} diff --git a/extensions/ql-vscode/src/view/model-alerts/ModelAlertsResults.tsx b/extensions/ql-vscode/src/view/model-alerts/ModelAlertsResults.tsx index 51ea31ee88d..d10757e3748 100644 --- a/extensions/ql-vscode/src/view/model-alerts/ModelAlertsResults.tsx +++ b/extensions/ql-vscode/src/view/model-alerts/ModelAlertsResults.tsx @@ -1,7 +1,6 @@ import { styled } from "styled-components"; import type { ModelAlerts } from "../../model-editor/model-alerts/model-alerts"; import { Codicon } from "../common"; -import { VSCodeBadge, VSCodeLink } from "@vscode/webview-ui-toolkit/react"; import { useCallback, useEffect, useRef, useState } from "react"; import { formatDecimal } from "../../common/number"; import AnalysisAlertResult from "../variant-analysis/AnalysisAlertResult"; @@ -10,6 +9,8 @@ import { ModelDetails } from "./ModelDetails"; import { vscode } from "../vscode-api"; import { createModeledMethodKey } from "../../model-editor/modeled-method"; import type { ModeledMethod } from "../../model-editor/modeled-method"; +import { Link } from "../common/Link"; +import { Badge } from "../common/Badge"; // This will ensure that these icons have a className which we can use in the TitleContainer const ExpandCollapseCodicon = styled(Codicon)``; @@ -39,7 +40,7 @@ const ModelTypeText = styled.span` color: var(--vscode-descriptionForeground); `; -const ViewLink = styled(VSCodeLink)` +const ViewLink = styled(Link)` white-space: nowrap; padding: 0 0 0.25em 1em; `; @@ -102,7 +103,7 @@ export const ModelAlertsResults = ({ {!isExpanded && ( )} - {formatDecimal(modelAlerts.alerts.length)} + {formatDecimal(modelAlerts.alerts.length)} {modelAlerts.model.type} { ); return ( - + - Alphabetically - + Alphabetically + Number of results - + ); }; diff --git a/extensions/ql-vscode/src/view/model-editor/InProgressDropdown.tsx b/extensions/ql-vscode/src/view/model-editor/InProgressDropdown.tsx deleted file mode 100644 index ef4b7aae061..00000000000 --- a/extensions/ql-vscode/src/view/model-editor/InProgressDropdown.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { styled } from "styled-components"; -import { Dropdown } from "../common/Dropdown"; - -const StyledDropdown = styled(Dropdown)` - font-style: italic; -`; - -export const InProgressDropdown = () => { - return ( - - ); -}; diff --git a/extensions/ql-vscode/src/view/model-editor/InputDropdown.tsx b/extensions/ql-vscode/src/view/model-editor/InputDropdown.tsx index df4e3d50e48..59811fc0c18 100644 --- a/extensions/ql-vscode/src/view/model-editor/InputDropdown.tsx +++ b/extensions/ql-vscode/src/view/model-editor/InputDropdown.tsx @@ -1,6 +1,4 @@ import { styled } from "styled-components"; import { Dropdown } from "../common/Dropdown"; -export const InputDropdown = styled(Dropdown)<{ $pending: boolean }>` - font-style: ${(props) => (props.$pending ? "italic" : "normal")}; -`; +export const InputDropdown = styled(Dropdown)``; diff --git a/extensions/ql-vscode/src/view/model-editor/LibraryRow.tsx b/extensions/ql-vscode/src/view/model-editor/LibraryRow.tsx index 0b4db064280..f2f1065b4d9 100644 --- a/extensions/ql-vscode/src/view/model-editor/LibraryRow.tsx +++ b/extensions/ql-vscode/src/view/model-editor/LibraryRow.tsx @@ -7,15 +7,12 @@ import { calculateModeledPercentage } from "../../model-editor/shared/modeled-pe import { percentFormatter } from "./formatters"; import { Codicon } from "../common"; import { Mode } from "../../model-editor/shared/mode"; -import { - VSCodeButton, - VSCodeDivider, - VSCodeTag, -} from "@vscode/webview-ui-toolkit/react"; +import { VscodeButton, VscodeDivider } from "@vscode-elements/react-elements"; import type { ModelEditorViewState } from "../../model-editor/shared/view-state"; import type { AccessPathSuggestionOptions } from "../../model-editor/suggestions"; -import { getCandidates } from "../../model-editor/shared/auto-model-candidates"; import type { ModelEvaluationRunState } from "../../model-editor/shared/model-evaluation-run-state"; +import { Tag } from "../common/Tag"; +import { ActionButton } from "../common/ActionButton/ActionButton"; const LibraryContainer = styled.div` background-color: var(--vscode-peekViewResult-background); @@ -38,9 +35,9 @@ const TitleContainer = styled.button` cursor: pointer; `; -const SectionDivider = styled(VSCodeDivider)` - padding-top: 0.3rem; - padding-bottom: 0.3rem; +const SectionDivider = styled(VscodeDivider)` + margin-top: 0.3rem; + margin-bottom: 0.8rem; `; const NameContainer = styled.div` @@ -75,8 +72,6 @@ export type LibraryRowProps = { modeledMethodsMap: Record; modifiedSignatures: Set; selectedSignatures: Set; - inProgressMethods: Set; - processedByAutoModelMethods: Set; viewState: ModelEditorViewState; hideModeledMethods: boolean; revealedMethodSignature: string | null; @@ -85,11 +80,6 @@ export type LibraryRowProps = { onChange: (methodSignature: string, modeledMethods: ModeledMethod[]) => void; onMethodClick: (methodSignature: string) => void; onSaveModelClick: (methodSignatures: string[]) => void; - onGenerateFromLlmClick: ( - dependencyName: string, - methodSignatures: string[], - ) => void; - onStopGenerateFromLlmClick: (dependencyName: string) => void; onGenerateFromSourceClick: () => void; onModelDependencyClick: () => void; }; @@ -101,8 +91,6 @@ export const LibraryRow = ({ modeledMethodsMap, modifiedSignatures, selectedSignatures, - inProgressMethods, - processedByAutoModelMethods, viewState, hideModeledMethods, revealedMethodSignature, @@ -111,8 +99,6 @@ export const LibraryRow = ({ onChange, onMethodClick, onSaveModelClick, - onGenerateFromLlmClick, - onStopGenerateFromLlmClick, onGenerateFromSourceClick, onModelDependencyClick, }: LibraryRowProps) => { @@ -134,27 +120,6 @@ export const LibraryRow = ({ } }, [methods, revealedMethodSignature]); - const handleModelWithAI = useCallback( - async (e: React.MouseEvent) => { - onGenerateFromLlmClick( - title, - methods.map((m) => m.signature), - ); - e.stopPropagation(); - e.preventDefault(); - }, - [title, methods, onGenerateFromLlmClick], - ); - - const handleStopModelWithAI = useCallback( - async (e: React.MouseEvent) => { - onStopGenerateFromLlmClick(title); - e.stopPropagation(); - e.preventDefault(); - }, - [title, onStopGenerateFromLlmClick], - ); - const handleModelFromSource = useCallback( async (e: React.MouseEvent) => { onGenerateFromSourceClick(); @@ -186,21 +151,6 @@ export const LibraryRow = ({ return methods.some((method) => modifiedSignatures.has(method.signature)); }, [methods, modifiedSignatures]); - const canStopAutoModeling = useMemo(() => { - return methods.some((method) => inProgressMethods.has(method.signature)); - }, [methods, inProgressMethods]); - - const modelWithAIDisabled = useMemo(() => { - return ( - getCandidates( - viewState.mode, - methods, - modeledMethodsMap, - processedByAutoModelMethods, - ).length === 0 - ); - }, [methods, modeledMethodsMap, processedByAutoModelMethods, viewState.mode]); - return ( @@ -217,36 +167,20 @@ export const LibraryRow = ({ {percentFormatter.format(modeledPercentage / 100)} modeled - {hasUnsavedChanges ? UNSAVED : null} + {hasUnsavedChanges ? UNSAVED : null} - {viewState.showLlmButton && !canStopAutoModeling && ( - - -  Model with AI - - )} - {viewState.showLlmButton && canStopAutoModeling && ( - - -  Stop - - )} {viewState.showGenerateButton && viewState.mode === Mode.Application && ( - +  Model from source - + )} {viewState.mode === Mode.Application && ( - +  Model dependency - + )} {isExpanded && ( @@ -257,8 +191,6 @@ export const LibraryRow = ({ modeledMethodsMap={modeledMethodsMap} modifiedSignatures={modifiedSignatures} selectedSignatures={selectedSignatures} - inProgressMethods={inProgressMethods} - processedByAutoModelMethods={processedByAutoModelMethods} viewState={viewState} hideModeledMethods={hideModeledMethods} revealedMethodSignature={revealedMethodSignature} @@ -269,9 +201,9 @@ export const LibraryRow = ({ /> - + {selectedSignatures.size === 0 ? "Save" : "Save selected"} - + )} diff --git a/extensions/ql-vscode/src/view/model-editor/MethodClassifications.tsx b/extensions/ql-vscode/src/view/model-editor/MethodClassifications.tsx index 8acfea16d93..59f9b5ea2f9 100644 --- a/extensions/ql-vscode/src/view/model-editor/MethodClassifications.tsx +++ b/extensions/ql-vscode/src/view/model-editor/MethodClassifications.tsx @@ -1,8 +1,8 @@ import { useMemo } from "react"; import type { Method } from "../../model-editor/method"; import { CallClassification } from "../../model-editor/method"; -import { VSCodeTag } from "@vscode/webview-ui-toolkit/react"; import { styled } from "styled-components"; +import { Tag } from "../common/Tag"; const ClassificationsContainer = styled.div` display: inline-flex; @@ -10,7 +10,7 @@ const ClassificationsContainer = styled.div` gap: 0.5rem; `; -const ClassificationTag = styled(VSCodeTag)` +const ClassificationTag = styled(Tag)` font-size: 0.75em; white-space: nowrap; `; diff --git a/extensions/ql-vscode/src/view/model-editor/MethodRow.tsx b/extensions/ql-vscode/src/view/model-editor/MethodRow.tsx index b0b0c428d08..6e753c3532d 100644 --- a/extensions/ql-vscode/src/view/model-editor/MethodRow.tsx +++ b/extensions/ql-vscode/src/view/model-editor/MethodRow.tsx @@ -1,9 +1,3 @@ -import { - VSCodeBadge, - VSCodeButton, - VSCodeLink, - VSCodeProgressRing, -} from "@vscode/webview-ui-toolkit/react"; import { forwardRef, useCallback, @@ -14,16 +8,16 @@ import { } from "react"; import { styled } from "styled-components"; import { vscode } from "../vscode-api"; +import { Link } from "../common/Link"; +import { ActionButton } from "../common/ActionButton/ActionButton"; import type { Method } from "../../model-editor/method"; import type { ModeledMethod } from "../../model-editor/modeled-method"; -import { isModelPending } from "../../model-editor/modeled-method"; import { ModelKindDropdown } from "./ModelKindDropdown"; import { Mode } from "../../model-editor/shared/mode"; import { MethodClassifications } from "./MethodClassifications"; import { getModelingStatus } from "../../model-editor/shared/modeling-status"; import { ModelingStatusIndicator } from "./ModelingStatusIndicator"; -import { InProgressDropdown } from "./InProgressDropdown"; import { MethodName } from "./MethodName"; import { ModelTypeDropdown } from "./ModelTypeDropdown"; import { ModelInputDropdown } from "./ModelInputDropdown"; @@ -41,6 +35,7 @@ import { ModelOutputSuggestBox } from "./ModelOutputSuggestBox"; import { getModelsAsDataLanguage } from "../../model-editor/languages"; import { ModelAlertsIndicator } from "./ModelAlertsIndicator"; import type { ModelEvaluationRunState } from "../../model-editor/shared/model-evaluation-run-state"; +import { Badge } from "../common/Badge"; const ApiOrMethodRow = styled.div` min-height: calc(var(--input-height) * 1px); @@ -58,21 +53,16 @@ const ModelButtonsContainer = styled.div` gap: 1em; `; -const UsagesButton = styled(VSCodeBadge)` +const UsagesButton = styled(Badge)` cursor: pointer; + display: table; `; -const ViewLink = styled(VSCodeLink)` +const ViewLink = styled(Link)` white-space: nowrap; `; -const ProgressRing = styled(VSCodeProgressRing)` - width: 16px; - height: 16px; - margin-left: auto; -`; - -const CodiconRow = styled(VSCodeButton)` +const CodiconRow = styled(ActionButton)` min-height: calc(var(--input-height) * 1px); align-items: center; `; @@ -83,8 +73,6 @@ export type MethodRowProps = { modeledMethods: ModeledMethod[]; methodIsUnsaved: boolean; methodIsSelected: boolean; - modelingInProgress: boolean; - processedByAutoModel: boolean; viewState: ModelEditorViewState; revealedMethodSignature: string | null; inputAccessPathSuggestions?: AccessPathOption[]; @@ -116,13 +104,12 @@ export const MethodRow = (props: MethodRowProps) => { }; const ModelableMethodRow = forwardRef( - (props, ref) => { + (props: MethodRowProps, ref) => { const { method, modeledMethods: modeledMethodsProp, methodIsUnsaved, methodIsSelected, - processedByAutoModel, viewState, revealedMethodSignature, inputAccessPathSuggestions, @@ -269,140 +256,103 @@ const ModelableMethodRow = forwardRef( > View - {props.modelingInProgress && } - {props.modelingInProgress && ( - <> - - - - - - - - - - - - - - - - - - - )} - {!props.modelingInProgress && ( - <> - {shownModeledMethods.map((modeledMethod, index) => { - const modelPending = isModelPending( - modeledMethod, - modelingStatus, - processedByAutoModel, - ); - - return ( - - - - - - {inputAccessPathSuggestions === undefined ? ( - - ) : ( - - )} - - - {outputAccessPathSuggestions === undefined ? ( - - ) : ( - - )} - - - - - - - - {index === 0 ? ( - { - event.stopPropagation(); - handleAddModelClick(); - }} - disabled={addModelButtonDisabled} - > - - - ) : ( - { - event.stopPropagation(); - removeModelClickedHandlers[index](); - }} - > - - - )} - - - - ); - })} - {validationErrors.map((error, index) => ( - - { + return ( + + + - ))} - - )} + + {inputAccessPathSuggestions === undefined ? ( + + ) : ( + + )} + + + {outputAccessPathSuggestions === undefined ? ( + + ) : ( + + )} + + + + + + + + {index === 0 ? ( + { + event.stopPropagation(); + handleAddModelClick(); + }} + disabled={addModelButtonDisabled} + > + + + ) : ( + { + event.stopPropagation(); + removeModelClickedHandlers[index](); + }} + > + + + )} + + + + ); + })} + {validationErrors.map((error, index) => ( + + + + ))} ); }, @@ -412,7 +362,7 @@ ModelableMethodRow.displayName = "ModelableMethodRow"; const UnmodelableMethodRow = forwardRef< HTMLElement | undefined, MethodRowProps ->((props, ref) => { +>((props: MethodRowProps, ref) => { const { method, viewState, revealedMethodSignature } = props; const jumpToMethod = useCallback( diff --git a/extensions/ql-vscode/src/view/model-editor/ModelAlertsIndicator.tsx b/extensions/ql-vscode/src/view/model-editor/ModelAlertsIndicator.tsx index 117d18903ca..a99bc815f1e 100644 --- a/extensions/ql-vscode/src/view/model-editor/ModelAlertsIndicator.tsx +++ b/extensions/ql-vscode/src/view/model-editor/ModelAlertsIndicator.tsx @@ -2,10 +2,10 @@ import { styled } from "styled-components"; import type { ModeledMethod } from "../../model-editor/modeled-method"; import type { ModelEvaluationRunState } from "../../model-editor/shared/model-evaluation-run-state"; import type { ModelEditorViewState } from "../../model-editor/shared/view-state"; -import { VSCodeBadge } from "@vscode/webview-ui-toolkit/react"; import { vscode } from "../vscode-api"; +import { Badge } from "../common/Badge"; -const ModelAlertsButton = styled(VSCodeBadge)` +const ModelAlertsButton = styled(Badge)` cursor: pointer; `; diff --git a/extensions/ql-vscode/src/view/model-editor/ModelEditor.tsx b/extensions/ql-vscode/src/view/model-editor/ModelEditor.tsx index 6b478d84272..344a0d32d98 100644 --- a/extensions/ql-vscode/src/view/model-editor/ModelEditor.tsx +++ b/extensions/ql-vscode/src/view/model-editor/ModelEditor.tsx @@ -1,10 +1,6 @@ import { useCallback, useEffect, useMemo, useState } from "react"; import type { ToModelEditorMessage } from "../../common/interface-types"; -import { - VSCodeButton, - VSCodeCheckbox, - VSCodeTag, -} from "@vscode/webview-ui-toolkit/react"; +import { VscodeButton, VscodeCheckbox } from "@vscode-elements/react-elements"; import { styled } from "styled-components"; import type { Method } from "../../model-editor/method"; import type { ModeledMethod } from "../../model-editor/modeled-method"; @@ -21,6 +17,8 @@ import { INITIAL_HIDE_MODELED_METHODS_VALUE } from "../../model-editor/shared/hi import type { AccessPathSuggestionOptions } from "../../model-editor/suggestions"; import type { ModelEvaluationRunState } from "../../model-editor/shared/model-evaluation-run-state"; import { ModelEvaluation } from "./ModelEvaluation"; +import { useMessageFromExtension } from "../common/useMessageFromExtension"; +import { Tag } from "../common/Tag"; const LoadingContainer = styled.div` text-align: center; @@ -102,12 +100,6 @@ export function ModelEditor({ new Set(), ); - const [inProgressMethods, setInProgressMethods] = useState>( - new Set(), - ); - const [processedByAutoModelMethods, setProcessedByAutoModelMethods] = - useState>(new Set()); - const [hideModeledMethods, setHideModeledMethods] = useState( initialHideModeledMethods, ); @@ -135,55 +127,33 @@ export function ModelEditor({ AccessPathSuggestionOptions | undefined >(undefined); - useEffect(() => { - const listener = (evt: MessageEvent) => { - if (evt.origin === window.origin) { - const msg: ToModelEditorMessage = evt.data; - switch (msg.t) { - case "setModelEditorViewState": - setViewState(msg.viewState); - break; - case "setMethods": - setMethods(msg.methods); - break; - case "setModeledAndModifiedMethods": - setModeledMethods(msg.methods); - setModifiedSignatures(new Set(msg.modifiedMethodSignatures)); - break; - case "setModifiedMethods": - setModifiedSignatures(new Set(msg.methodSignatures)); - break; - case "setInProgressMethods": { - setInProgressMethods(new Set(msg.methods)); - break; - } - case "setProcessedByAutoModelMethods": { - setProcessedByAutoModelMethods(new Set(msg.methods)); - break; - } - case "revealMethod": - setRevealedMethodSignature(msg.methodSignature); - break; - case "setAccessPathSuggestions": - setAccessPathSuggestions(msg.accessPathSuggestions); - break; - case "setModelEvaluationRun": - setEvaluationRun(msg.run); - break; - default: - assertNever(msg); - } - } else { - // sanitize origin - const origin = evt.origin.replace(/\n|\r/g, ""); - console.error(`Invalid event origin ${origin}`); - } - }; - window.addEventListener("message", listener); - - return () => { - window.removeEventListener("message", listener); - }; + useMessageFromExtension((msg) => { + switch (msg.t) { + case "setModelEditorViewState": + setViewState(msg.viewState); + break; + case "setMethods": + setMethods(msg.methods); + break; + case "setModeledAndModifiedMethods": + setModeledMethods(msg.methods); + setModifiedSignatures(new Set(msg.modifiedMethodSignatures)); + break; + case "setModifiedMethods": + setModifiedSignatures(new Set(msg.methodSignatures)); + break; + case "revealMethod": + setRevealedMethodSignature(msg.methodSignature); + break; + case "setAccessPathSuggestions": + setAccessPathSuggestions(msg.accessPathSuggestions); + break; + case "setModelEvaluationRun": + setEvaluationRun(msg.run); + break; + default: + assertNever(msg); + } }, []); useEffect(() => { @@ -294,24 +264,6 @@ export function ModelEditor({ }); }, []); - const onGenerateFromLlmClick = useCallback( - (packageName: string, methodSignatures: string[]) => { - vscode.postMessage({ - t: "generateMethodsFromLlm", - packageName, - methodSignatures, - }); - }, - [], - ); - - const onStopGenerateFromLlmClick = useCallback((packageName: string) => { - vscode.postMessage({ - t: "stopGeneratingMethodsFromLlm", - packageName, - }); - }, []); - const onOpenDatabaseClick = useCallback(() => { vscode.postMessage({ t: "openDatabase", @@ -350,9 +302,9 @@ export function ModelEditor({ {getLanguageDisplayName(viewState.extensionPack.language)} - + {percentFormatter.format(modeledPercentage / 100)} modeled - +
<>{viewState.extensionPack.name} @@ -379,27 +331,27 @@ export function ModelEditor({ - {selectedSignatures.size === 0 ? "Save all" : "Save selected"} - - + Deselect all - - + + Refresh - + {viewState.showGenerateButton && viewState.mode === Mode.Framework && ( - + Generate - + )} - Hide modeled methods - + @@ -430,8 +382,6 @@ export function ModelEditor({ modeledMethodsMap={modeledMethods} modifiedSignatures={modifiedSignatures} selectedSignatures={selectedSignatures} - inProgressMethods={inProgressMethods} - processedByAutoModelMethods={processedByAutoModelMethods} viewState={viewState} hideModeledMethods={hideModeledMethods} revealedMethodSignature={revealedMethodSignature} @@ -440,8 +390,6 @@ export function ModelEditor({ onChange={onChange} onMethodClick={onMethodClick} onSaveModelClick={onSaveModelClick} - onGenerateFromLlmClick={onGenerateFromLlmClick} - onStopGenerateFromLlmClick={onStopGenerateFromLlmClick} onGenerateFromSourceClick={onGenerateFromSourceClick} onModelDependencyClick={onModelDependencyClick} /> diff --git a/extensions/ql-vscode/src/view/model-editor/ModelEditorProgressRing.tsx b/extensions/ql-vscode/src/view/model-editor/ModelEditorProgressRing.tsx index 3994caddf82..523e8fd32c8 100644 --- a/extensions/ql-vscode/src/view/model-editor/ModelEditorProgressRing.tsx +++ b/extensions/ql-vscode/src/view/model-editor/ModelEditorProgressRing.tsx @@ -1,7 +1,7 @@ -import { VSCodeProgressRing } from "@vscode/webview-ui-toolkit/react"; +import { VscodeProgressRing } from "@vscode-elements/react-elements"; import { styled } from "styled-components"; -export const ModelEditorProgressRing = styled(VSCodeProgressRing)` +export const ModelEditorProgressRing = styled(VscodeProgressRing)` width: 16px; height: 16px; margin-right: 5px; diff --git a/extensions/ql-vscode/src/view/model-editor/ModelEvaluation.tsx b/extensions/ql-vscode/src/view/model-editor/ModelEvaluation.tsx index de87fc663eb..ba0266c083f 100644 --- a/extensions/ql-vscode/src/view/model-editor/ModelEvaluation.tsx +++ b/extensions/ql-vscode/src/view/model-editor/ModelEvaluation.tsx @@ -1,11 +1,12 @@ import { styled } from "styled-components"; -import { VSCodeButton, VSCodeLink } from "@vscode/webview-ui-toolkit/react"; import type { ModeledMethod } from "../../model-editor/modeled-method"; import type { ModelEditorViewState } from "../../model-editor/shared/view-state"; import type { ModelEvaluationRunState } from "../../model-editor/shared/model-evaluation-run-state"; import { modelEvaluationRunIsRunning } from "../../model-editor/shared/model-evaluation-run-state"; import { ModelEditorProgressRing } from "./ModelEditorProgressRing"; import { LinkIconButton } from "../common/LinkIconButton"; +import { Link } from "../common/Link"; +import { VscodeButton } from "@vscode-elements/react-elements"; export type Props = { viewState: ModelEditorViewState; @@ -17,7 +18,7 @@ export type Props = { evaluationRun: ModelEvaluationRunState | undefined; }; -const RunLink = styled(VSCodeLink)` +const RunLink = styled(Link)` display: flex; align-items: center; `; @@ -52,19 +53,19 @@ export const ModelEvaluation = ({ return ( <> {shouldShowEvaluateButton && ( - Evaluate - + )} {shouldShowStopButton && ( - + Stop evaluation - + )} {shouldShowEvaluationRunLink && ( diff --git a/extensions/ql-vscode/src/view/model-editor/ModelInputDropdown.tsx b/extensions/ql-vscode/src/view/model-editor/ModelInputDropdown.tsx index a4604582438..a02d6d8346d 100644 --- a/extensions/ql-vscode/src/view/model-editor/ModelInputDropdown.tsx +++ b/extensions/ql-vscode/src/view/model-editor/ModelInputDropdown.tsx @@ -15,7 +15,6 @@ type Props = { language: QueryLanguage; method: Method; modeledMethod: ModeledMethod | undefined; - modelPending: boolean; onChange: (modeledMethod: ModeledMethod) => void; }; @@ -23,7 +22,6 @@ export const ModelInputDropdown = ({ language, method, modeledMethod, - modelPending, onChange, }: Props): React.JSX.Element => { const options = useMemo(() => { @@ -80,7 +78,6 @@ export const ModelInputDropdown = ({ value={value} options={options} disabled={!enabled} - $pending={modelPending} onChange={handleChange} aria-label="Input" /> diff --git a/extensions/ql-vscode/src/view/model-editor/ModelKindDropdown.tsx b/extensions/ql-vscode/src/view/model-editor/ModelKindDropdown.tsx index 563463ec436..3f9ef6d3e7d 100644 --- a/extensions/ql-vscode/src/view/model-editor/ModelKindDropdown.tsx +++ b/extensions/ql-vscode/src/view/model-editor/ModelKindDropdown.tsx @@ -15,14 +15,12 @@ import { InputDropdown } from "./InputDropdown"; type Props = { language: QueryLanguage; modeledMethod: ModeledMethod | undefined; - modelPending: boolean; onChange: (modeledMethod: ModeledMethod) => void; }; export const ModelKindDropdown = ({ language, modeledMethod, - modelPending, onChange, }: Props) => { const predicate = useMemo(() => { @@ -92,7 +90,6 @@ export const ModelKindDropdown = ({ value={value} options={options} disabled={disabled} - $pending={modelPending} onChange={handleChange} aria-label="Kind" /> diff --git a/extensions/ql-vscode/src/view/model-editor/ModelOutputDropdown.tsx b/extensions/ql-vscode/src/view/model-editor/ModelOutputDropdown.tsx index a04f82c582f..22a3ea8afd6 100644 --- a/extensions/ql-vscode/src/view/model-editor/ModelOutputDropdown.tsx +++ b/extensions/ql-vscode/src/view/model-editor/ModelOutputDropdown.tsx @@ -15,7 +15,6 @@ type Props = { language: QueryLanguage; method: Method; modeledMethod: ModeledMethod | undefined; - modelPending: boolean; onChange: (modeledMethod: ModeledMethod) => void; }; @@ -23,7 +22,6 @@ export const ModelOutputDropdown = ({ language, method, modeledMethod, - modelPending, onChange, }: Props): React.JSX.Element => { const options = useMemo(() => { @@ -81,7 +79,6 @@ export const ModelOutputDropdown = ({ value={value} options={options} disabled={!enabled} - $pending={modelPending} onChange={handleChange} aria-label="Output" /> diff --git a/extensions/ql-vscode/src/view/model-editor/ModelTypeDropdown.tsx b/extensions/ql-vscode/src/view/model-editor/ModelTypeDropdown.tsx index 7ea0d83ef90..369851d98fd 100644 --- a/extensions/ql-vscode/src/view/model-editor/ModelTypeDropdown.tsx +++ b/extensions/ql-vscode/src/view/model-editor/ModelTypeDropdown.tsx @@ -22,7 +22,6 @@ type Props = { modelConfig: ModelConfig; method: Method; modeledMethod: ModeledMethod | undefined; - modelPending: boolean; onChange: (modeledMethod: ModeledMethod) => void; }; @@ -41,7 +40,6 @@ export const ModelTypeDropdown = ({ modelConfig, method, modeledMethod, - modelPending, onChange, }: Props): React.JSX.Element => { const options = useMemo(() => { @@ -126,7 +124,6 @@ export const ModelTypeDropdown = ({ diff --git a/extensions/ql-vscode/src/view/model-editor/ModelTypeTextbox.tsx b/extensions/ql-vscode/src/view/model-editor/ModelTypeTextbox.tsx index d52ab1306bf..69f9a0829b9 100644 --- a/extensions/ql-vscode/src/view/model-editor/ModelTypeTextbox.tsx +++ b/extensions/ql-vscode/src/view/model-editor/ModelTypeTextbox.tsx @@ -4,8 +4,8 @@ import type { ModeledMethod, TypeModeledMethod, } from "../../model-editor/modeled-method"; -import { VSCodeTextField } from "@vscode/webview-ui-toolkit/react"; import { useDebounceCallback } from "../common/useDebounceCallback"; +import { VscodeTextfield } from "@vscode-elements/react-elements"; type Props = { modeledMethod: TypeModeledMethod; @@ -53,7 +53,7 @@ export const ModelTypeTextbox = ({ ); return ( - ; modifiedSignatures: Set; selectedSignatures: Set; - inProgressMethods: Set; - processedByAutoModelMethods: Set; viewState: ModelEditorViewState; hideModeledMethods: boolean; revealedMethodSignature: string | null; @@ -34,8 +32,6 @@ export const ModeledMethodDataGrid = ({ modeledMethodsMap, modifiedSignatures, selectedSignatures, - inProgressMethods, - processedByAutoModelMethods, viewState, hideModeledMethods, revealedMethodSignature, @@ -96,10 +92,6 @@ export const ModeledMethodDataGrid = ({ modeledMethods={modeledMethods} methodIsUnsaved={modifiedSignatures.has(method.signature)} methodIsSelected={selectedSignatures.has(method.signature)} - modelingInProgress={inProgressMethods.has(method.signature)} - processedByAutoModel={processedByAutoModelMethods.has( - method.signature, - )} viewState={viewState} revealedMethodSignature={revealedMethodSignature} inputAccessPathSuggestions={inputAccessPathSuggestions} diff --git a/extensions/ql-vscode/src/view/model-editor/ModeledMethodsList.tsx b/extensions/ql-vscode/src/view/model-editor/ModeledMethodsList.tsx index b6370ffc424..7d0a6c1b597 100644 --- a/extensions/ql-vscode/src/view/model-editor/ModeledMethodsList.tsx +++ b/extensions/ql-vscode/src/view/model-editor/ModeledMethodsList.tsx @@ -16,8 +16,6 @@ export type ModeledMethodsListProps = { modeledMethodsMap: Record; modifiedSignatures: Set; selectedSignatures: Set; - inProgressMethods: Set; - processedByAutoModelMethods: Set; revealedMethodSignature: string | null; accessPathSuggestions?: AccessPathSuggestionOptions; evaluationRun: ModelEvaluationRunState | undefined; @@ -26,11 +24,6 @@ export type ModeledMethodsListProps = { onChange: (methodSignature: string, modeledMethods: ModeledMethod[]) => void; onMethodClick: (methodSignature: string) => void; onSaveModelClick: (methodSignatures: string[]) => void; - onGenerateFromLlmClick: ( - packageName: string, - methodSignatures: string[], - ) => void; - onStopGenerateFromLlmClick: (packageName: string) => void; onGenerateFromSourceClick: () => void; onModelDependencyClick: () => void; }; @@ -44,8 +37,6 @@ export const ModeledMethodsList = ({ modeledMethodsMap, modifiedSignatures, selectedSignatures, - inProgressMethods, - processedByAutoModelMethods, viewState, hideModeledMethods, revealedMethodSignature, @@ -54,8 +45,6 @@ export const ModeledMethodsList = ({ onChange, onMethodClick, onSaveModelClick, - onGenerateFromLlmClick, - onStopGenerateFromLlmClick, onGenerateFromSourceClick, onModelDependencyClick, }: ModeledMethodsListProps) => { @@ -95,8 +84,6 @@ export const ModeledMethodsList = ({ modeledMethodsMap={modeledMethodsMap} modifiedSignatures={modifiedSignatures} selectedSignatures={selectedSignatures} - inProgressMethods={inProgressMethods} - processedByAutoModelMethods={processedByAutoModelMethods} viewState={viewState} hideModeledMethods={hideModeledMethods} revealedMethodSignature={revealedMethodSignature} @@ -105,8 +92,6 @@ export const ModeledMethodsList = ({ onChange={onChange} onMethodClick={onMethodClick} onSaveModelClick={onSaveModelClick} - onGenerateFromLlmClick={onGenerateFromLlmClick} - onStopGenerateFromLlmClick={onStopGenerateFromLlmClick} onGenerateFromSourceClick={onGenerateFromSourceClick} onModelDependencyClick={onModelDependencyClick} /> diff --git a/extensions/ql-vscode/src/view/model-editor/__tests__/LibraryRow.spec.tsx b/extensions/ql-vscode/src/view/model-editor/__tests__/LibraryRow.spec.tsx index 19caa8fd826..661c9f214c5 100644 --- a/extensions/ql-vscode/src/view/model-editor/__tests__/LibraryRow.spec.tsx +++ b/extensions/ql-vscode/src/view/model-editor/__tests__/LibraryRow.spec.tsx @@ -10,8 +10,6 @@ describe(LibraryRow.name, () => { const onChange = jest.fn(); const onMethodClick = jest.fn(); const onSaveModelClick = jest.fn(); - const onGenerateFromLlmClick = jest.fn(); - const onStopGenerateFromLlmClick = jest.fn(); const onModelDependencyClick = jest.fn(); const viewState = createMockModelEditorViewState(); @@ -35,8 +33,6 @@ describe(LibraryRow.name, () => { }} modifiedSignatures={new Set([method.signature])} selectedSignatures={new Set()} - inProgressMethods={new Set()} - processedByAutoModelMethods={new Set()} evaluationRun={undefined} viewState={viewState} hideModeledMethods={false} @@ -44,8 +40,6 @@ describe(LibraryRow.name, () => { onChange={onChange} onMethodClick={onMethodClick} onSaveModelClick={onSaveModelClick} - onGenerateFromLlmClick={onGenerateFromLlmClick} - onStopGenerateFromLlmClick={onStopGenerateFromLlmClick} onGenerateFromSourceClick={jest.fn()} onModelDependencyClick={onModelDependencyClick} {...props} @@ -74,33 +68,6 @@ describe(LibraryRow.name, () => { expect(screen.queryByText("Model dependency")).toBeInTheDocument(); }); - it("renders the row when LLM is enabled", () => { - render({ - viewState: { - ...viewState, - showLlmButton: true, - }, - }); - - expect(screen.queryByText("Model from source")).not.toBeInTheDocument(); - expect(screen.queryByText("Model with AI")).toBeInTheDocument(); - expect(screen.queryByText("Model dependency")).toBeInTheDocument(); - }); - - it("renders the row when generate button and LLM are enabled", () => { - render({ - viewState: { - ...viewState, - showGenerateButton: true, - showLlmButton: true, - }, - }); - - expect(screen.queryByText("Model from source")).toBeInTheDocument(); - expect(screen.queryByText("Model with AI")).toBeInTheDocument(); - expect(screen.queryByText("Model dependency")).toBeInTheDocument(); - }); - it("can expand the row", async () => { render(); diff --git a/extensions/ql-vscode/src/view/model-editor/__tests__/MethodRow.spec.tsx b/extensions/ql-vscode/src/view/model-editor/__tests__/MethodRow.spec.tsx index 5213dc15d3a..6ce364b4393 100644 --- a/extensions/ql-vscode/src/view/model-editor/__tests__/MethodRow.spec.tsx +++ b/extensions/ql-vscode/src/view/model-editor/__tests__/MethodRow.spec.tsx @@ -42,8 +42,6 @@ describe(MethodRow.name, () => { modeledMethods={[modeledMethod]} methodIsUnsaved={false} methodIsSelected={false} - modelingInProgress={false} - processedByAutoModel={false} revealedMethodSignature={null} evaluationRun={undefined} viewState={viewState} @@ -186,14 +184,6 @@ describe(MethodRow.name, () => { expect(screen.getByLabelText("Method not modeled")).toBeInTheDocument(); }); - it("shows the in progress indicator when in progress", () => { - render({ - modelingInProgress: true, - }); - - expect(screen.getByLabelText("Loading")).toBeInTheDocument(); - }); - it("can render multiple models", () => { render({ modeledMethods: [ @@ -253,9 +243,9 @@ describe(MethodRow.name, () => { modeledMethods: [], }); - const addButton = screen.queryByLabelText("Add new model"); + const addButton = await screen.findByLabelText("Add new model"); expect(addButton).toBeInTheDocument(); - expect(addButton?.getElementsByTagName("input")[0]).toBeDisabled(); + expect(addButton).toBeDisabled(); expect(screen.queryByLabelText("Remove model")).not.toBeInTheDocument(); }); @@ -265,9 +255,9 @@ describe(MethodRow.name, () => { modeledMethods: [{ ...modeledMethod, type: "none" }], }); - const addButton = screen.queryByLabelText("Add new model"); + const addButton = await screen.findByLabelText("Add new model"); expect(addButton).toBeInTheDocument(); - expect(addButton?.getElementsByTagName("input")[0]).toBeDisabled(); + expect(addButton).toBeDisabled(); expect(screen.queryByLabelText("Remove model")).not.toBeInTheDocument(); }); @@ -277,9 +267,9 @@ describe(MethodRow.name, () => { modeledMethods: [modeledMethod], }); - const addButton = screen.queryByLabelText("Add new model"); + const addButton = await screen.findByLabelText("Add new model"); expect(addButton).toBeInTheDocument(); - expect(addButton?.getElementsByTagName("input")[0]).toBeEnabled(); + expect(addButton).toBeEnabled(); expect(screen.queryByLabelText("Remove model")).not.toBeInTheDocument(); }); @@ -292,16 +282,16 @@ describe(MethodRow.name, () => { ], }); - const addButton = screen.queryByLabelText("Add new model"); + const addButton = await screen.findByLabelText("Add new model"); expect(addButton).toBeInTheDocument(); - expect(addButton?.getElementsByTagName("input")[0]).toBeEnabled(); + expect(addButton).toBeEnabled(); - const removeButton = screen.queryByLabelText("Remove model"); + const removeButton = await screen.findByLabelText("Remove model"); expect(removeButton).toBeInTheDocument(); - expect(removeButton?.getElementsByTagName("input")[0]).toBeEnabled(); + expect(removeButton).toBeEnabled(); }); - it("shows add model button on first row and remove model button on all other rows", async () => { + it("shows add model button on first row and remove model button on all other rows", () => { render({ modeledMethods: [ { ...modeledMethod, type: "source" }, @@ -313,12 +303,12 @@ describe(MethodRow.name, () => { const addButtons = screen.queryAllByLabelText("Add new model"); expect(addButtons.length).toBe(1); - expect(addButtons[0]?.getElementsByTagName("input")[0]).toBeEnabled(); + expect(addButtons[0]).toBeEnabled(); const removeButtons = screen.queryAllByLabelText("Remove model"); expect(removeButtons.length).toBe(3); for (const removeButton of removeButtons) { - expect(removeButton?.getElementsByTagName("input")[0]).toBeEnabled(); + expect(removeButton).toBeEnabled(); } }); diff --git a/extensions/ql-vscode/src/view/model-editor/__tests__/ModelEvaluation.spec.tsx b/extensions/ql-vscode/src/view/model-editor/__tests__/ModelEvaluation.spec.tsx index 24897bfa098..150ace05b53 100644 --- a/extensions/ql-vscode/src/view/model-editor/__tests__/ModelEvaluation.spec.tsx +++ b/extensions/ql-vscode/src/view/model-editor/__tests__/ModelEvaluation.spec.tsx @@ -1,4 +1,4 @@ -import { render as reactRender, screen } from "@testing-library/react"; +import { render as reactRender, screen, waitFor } from "@testing-library/react"; import type { Props } from "../ModelEvaluation"; import { ModelEvaluation } from "../ModelEvaluation"; import { createMockModelEditorViewState } from "../../../../test/factories/model-editor/view-state"; @@ -39,47 +39,51 @@ describe(ModelEvaluation.name, () => { }); describe("when showEvaluationUi is true", () => { - it("renders evaluation UI with 'Evaluate' button enabled", () => { + it("renders evaluation UI with 'Evaluate' button enabled", async () => { render(); - const evaluateButton = screen.queryByText("Evaluate"); + const evaluateButton = await screen.findByText("Evaluate"); expect(evaluateButton).toBeInTheDocument(); - expect(evaluateButton?.getElementsByTagName("input")[0]).toBeEnabled(); + expect(evaluateButton).toBeEnabled(); expect(screen.queryByText("Stop evaluation")).not.toBeInTheDocument(); expect(screen.queryByText("Evaluation run")).not.toBeInTheDocument(); }); - it("disables 'Evaluate' button when there are no custom models", () => { + it("disables 'Evaluate' button when there are no custom models", async () => { render({ modeledMethods: {}, }); - const evaluateButton = screen.queryByText("Evaluate"); + const evaluateButton = await screen.findByText("Evaluate"); expect(evaluateButton).toBeInTheDocument(); - expect(evaluateButton?.getElementsByTagName("input")[0]).toBeDisabled(); + await waitFor(() => { + expect(evaluateButton).toBeDisabled(); + }); expect(screen.queryByText("Stop evaluation")).not.toBeInTheDocument(); expect(screen.queryByText("Evaluation run")).not.toBeInTheDocument(); }); - it("disables 'Evaluate' button when there are unsaved changes", () => { + it("disables 'Evaluate' button when there are unsaved changes", async () => { render({ modifiedSignatures: new Set([method.signature]), }); - const evaluateButton = screen.queryByText("Evaluate"); + const evaluateButton = await screen.findByText("Evaluate"); expect(evaluateButton).toBeInTheDocument(); - expect(evaluateButton?.getElementsByTagName("input")[0]).toBeDisabled(); + await waitFor(() => { + expect(evaluateButton).toBeDisabled(); + }); expect(screen.queryByText("Stop evaluation")).not.toBeInTheDocument(); expect(screen.queryByText("Evaluation run")).not.toBeInTheDocument(); }); - it("renders 'Evaluate' button and 'Evaluation run' link when there is a completed evaluation", () => { + it("renders 'Evaluate' button and 'Evaluation run' link when there is a completed evaluation", async () => { render({ evaluationRun: { isPreparing: false, @@ -89,16 +93,16 @@ describe(ModelEvaluation.name, () => { }, }); - const evaluateButton = screen.queryByText("Evaluate"); + const evaluateButton = await screen.findByText("Evaluate"); expect(evaluateButton).toBeInTheDocument(); - expect(evaluateButton?.getElementsByTagName("input")[0]).toBeEnabled(); + expect(evaluateButton).toBeEnabled(); expect(screen.queryByText("Evaluation run")).toBeInTheDocument(); expect(screen.queryByText("Stop evaluation")).not.toBeInTheDocument(); }); - it("renders 'Stop evaluation' button when there is an in progress evaluation, but no variant analysis yet", () => { + it("renders 'Stop evaluation' button when there is an in progress evaluation, but no variant analysis yet", async () => { render({ evaluationRun: { isPreparing: true, @@ -106,18 +110,16 @@ describe(ModelEvaluation.name, () => { }, }); - const stopEvaluationButton = screen.queryByText("Stop evaluation"); + const stopEvaluationButton = await screen.findByText("Stop evaluation"); expect(stopEvaluationButton).toBeInTheDocument(); - expect( - stopEvaluationButton?.getElementsByTagName("input")[0], - ).toBeEnabled(); + expect(stopEvaluationButton).toBeEnabled(); expect(screen.queryByText("Evaluation run")).not.toBeInTheDocument(); expect(screen.queryByText("Evaluate")).not.toBeInTheDocument(); }); - it("renders 'Stop evaluation' button and 'Evaluation run' link when there is an in progress evaluation with variant analysis", () => { + it("renders 'Stop evaluation' button and 'Evaluation run' link when there is an in progress evaluation with variant analysis", async () => { render({ evaluationRun: { isPreparing: false, @@ -127,11 +129,9 @@ describe(ModelEvaluation.name, () => { }, }); - const stopEvaluationButton = screen.queryByText("Stop evaluation"); + const stopEvaluationButton = await screen.findByText("Stop evaluation"); expect(stopEvaluationButton).toBeInTheDocument(); - expect( - stopEvaluationButton?.getElementsByTagName("input")[0], - ).toBeEnabled(); + expect(stopEvaluationButton).toBeEnabled(); expect(screen.queryByText("Evaluation run")).toBeInTheDocument(); diff --git a/extensions/ql-vscode/src/view/model-editor/__tests__/ModelKindDropdown.spec.tsx b/extensions/ql-vscode/src/view/model-editor/__tests__/ModelKindDropdown.spec.tsx index 6fcc7848b64..22d4a3a65c7 100644 --- a/extensions/ql-vscode/src/view/model-editor/__tests__/ModelKindDropdown.spec.tsx +++ b/extensions/ql-vscode/src/view/model-editor/__tests__/ModelKindDropdown.spec.tsx @@ -24,7 +24,6 @@ describe(ModelKindDropdown.name, () => { , ); @@ -47,7 +46,6 @@ describe(ModelKindDropdown.name, () => { , ); @@ -64,7 +62,6 @@ describe(ModelKindDropdown.name, () => { , ); @@ -82,7 +79,6 @@ describe(ModelKindDropdown.name, () => { , ); @@ -102,7 +98,6 @@ describe(ModelKindDropdown.name, () => { , ); diff --git a/extensions/ql-vscode/src/view/model-editor/__tests__/ModelTypeDropdown.spec.tsx b/extensions/ql-vscode/src/view/model-editor/__tests__/ModelTypeDropdown.spec.tsx index eb72f876b9f..f5ed858f3c1 100644 --- a/extensions/ql-vscode/src/view/model-editor/__tests__/ModelTypeDropdown.spec.tsx +++ b/extensions/ql-vscode/src/view/model-editor/__tests__/ModelTypeDropdown.spec.tsx @@ -21,7 +21,6 @@ describe(ModelTypeDropdown.name, () => { { { { }} modifiedSignatures={new Set([method1.signature])} selectedSignatures={new Set()} - inProgressMethods={new Set()} - processedByAutoModelMethods={new Set()} evaluationRun={undefined} viewState={viewState} hideModeledMethods={false} diff --git a/extensions/ql-vscode/src/view/model-editor/__tests__/ModeledMethodsList.spec.tsx b/extensions/ql-vscode/src/view/model-editor/__tests__/ModeledMethodsList.spec.tsx index 8136ee2df0f..6bf0078a3b7 100644 --- a/extensions/ql-vscode/src/view/model-editor/__tests__/ModeledMethodsList.spec.tsx +++ b/extensions/ql-vscode/src/view/model-editor/__tests__/ModeledMethodsList.spec.tsx @@ -35,8 +35,6 @@ describe(ModeledMethodsList.name, () => { const onChange = jest.fn(); const onMethodClick = jest.fn(); const onSaveModelClick = jest.fn(); - const onGenerateFromLlmClick = jest.fn(); - const onStopGenerateFromLlmClick = jest.fn(); const onModelDependencyClick = jest.fn(); const viewState = createMockModelEditorViewState(); @@ -58,8 +56,6 @@ describe(ModeledMethodsList.name, () => { }} modifiedSignatures={new Set([method1.signature])} selectedSignatures={new Set()} - inProgressMethods={new Set()} - processedByAutoModelMethods={new Set()} evaluationRun={undefined} viewState={viewState} hideModeledMethods={false} @@ -67,8 +63,6 @@ describe(ModeledMethodsList.name, () => { onChange={onChange} onMethodClick={onMethodClick} onSaveModelClick={onSaveModelClick} - onGenerateFromLlmClick={onGenerateFromLlmClick} - onStopGenerateFromLlmClick={onStopGenerateFromLlmClick} onGenerateFromSourceClick={jest.fn()} onModelDependencyClick={onModelDependencyClick} {...props} diff --git a/extensions/ql-vscode/src/view/results/AlertTablePathRow.tsx b/extensions/ql-vscode/src/view/results/AlertTablePathRow.tsx index ab4faff74bb..db8af0efdb9 100644 --- a/extensions/ql-vscode/src/view/results/AlertTablePathRow.tsx +++ b/extensions/ql-vscode/src/view/results/AlertTablePathRow.tsx @@ -11,8 +11,9 @@ import { AlertTableDropdownIndicatorCell } from "./AlertTableDropdownIndicatorCe import { useCallback, useMemo } from "react"; import { VerticalRule } from "../common/VerticalRule"; import type { UserSettings } from "../../common/interface-types"; +import { pluralize } from "../../common/word"; -interface Props { +export interface Props { path: ThreadFlow; pathIndex: number; resultIndex: number; @@ -65,7 +66,7 @@ export function AlertTablePathRow(props: Props) { onClick={handleDropdownClick} /> - Path + {`Path (${pluralize(path.locations.length, "step", "steps")})`} {currentPathExpanded && diff --git a/extensions/ql-vscode/src/view/results/AlertTableResultRow.tsx b/extensions/ql-vscode/src/view/results/AlertTableResultRow.tsx index c405f32006c..3ab31ed3f7f 100644 --- a/extensions/ql-vscode/src/view/results/AlertTableResultRow.tsx +++ b/extensions/ql-vscode/src/view/results/AlertTableResultRow.tsx @@ -13,8 +13,9 @@ import { SarifLocation } from "./locations/SarifLocation"; import { SarifMessageWithLocations } from "./locations/SarifMessageWithLocations"; import { AlertTablePathRow } from "./AlertTablePathRow"; import type { UserSettings } from "../../common/interface-types"; +import { Badge } from "../common/Badge"; -interface Props { +export interface Props { result: Result; resultIndex: number; expanded: Set; @@ -83,6 +84,11 @@ export function AlertTableResultRow(props: Props) { /> ); + const allPaths = getAllPaths(result); + const shortestPath = Math.min( + ...allPaths.map((path) => path.locations.length), + ); + const currentResultExpanded = expanded.has(keyToString(resultKey)); return ( <> @@ -102,6 +108,9 @@ export function AlertTableResultRow(props: Props) { onClick={handleDropdownClick} /> {listUnordered} + + {shortestPath} + {msg} )} @@ -118,7 +127,7 @@ export function AlertTableResultRow(props: Props) { {currentResultExpanded && result.codeFlows && - getAllPaths(result).map((path, pathIndex) => ( + allPaths.map((path, pathIndex) => ( jumpToLocation(loc, databaseUri)); + select(this).on("click", (event: Event) => { + jumpToLocation(loc, databaseUri); + event.preventDefault(); // Avoid resetting scroll position + }); } } if ("fill" in d.attributes) { diff --git a/extensions/ql-vscode/src/view/results/ResultTables.tsx b/extensions/ql-vscode/src/view/results/ResultTables.tsx index e84504462ea..3afcb170314 100644 --- a/extensions/ql-vscode/src/view/results/ResultTables.tsx +++ b/extensions/ql-vscode/src/view/results/ResultTables.tsx @@ -124,9 +124,11 @@ export function ResultTables(props: ResultTablesProps) { (evt: MessageEvent): void => { // sanitize origin const origin = evt.origin.replace(/\n|\r/g, ""); - evt.origin === window.origin - ? handleMessage(evt.data as IntoResultsViewMsg) - : console.error(`Invalid event origin ${origin}`); + if (evt.origin === window.origin) { + handleMessage(evt.data as IntoResultsViewMsg); + } else { + console.error(`Invalid event origin ${origin}`); + } }, [handleMessage], ); diff --git a/extensions/ql-vscode/src/view/results/ResultsApp.tsx b/extensions/ql-vscode/src/view/results/ResultsApp.tsx index 394e10df0ad..f0ff4e2cd3c 100644 --- a/extensions/ql-vscode/src/view/results/ResultsApp.tsx +++ b/extensions/ql-vscode/src/view/results/ResultsApp.tsx @@ -16,11 +16,12 @@ import { DEFAULT_USER_SETTINGS, GRAPH_TABLE_NAME, } from "../../common/interface-types"; +import { useMessageFromExtension } from "../common/useMessageFromExtension"; import { ResultTables } from "./ResultTables"; import { onNavigation } from "./navigation"; import "./resultsView.css"; -import { useCallback, useEffect, useState } from "react"; +import { useCallback, useState } from "react"; /** * ResultsApp.tsx @@ -113,8 +114,8 @@ export function ResultsApp() { [], ); - const handleMessage = useCallback( - (msg: IntoResultsViewMsg): void => { + useMessageFromExtension( + (msg) => { switch (msg.t) { case "setUserSettings": setUserSettings(msg.userSettings); @@ -189,24 +190,6 @@ export function ResultsApp() { [updateStateWithNewResultsInfo], ); - const vscodeMessageHandler = useCallback( - (evt: MessageEvent) => { - // sanitize origin - const origin = evt.origin.replace(/\n|\r/g, ""); - evt.origin === window.origin - ? handleMessage(evt.data as IntoResultsViewMsg) - : console.error(`Invalid event origin ${origin}`); - }, - [handleMessage], - ); - - useEffect(() => { - window.addEventListener("message", vscodeMessageHandler); - return () => { - window.removeEventListener("message", vscodeMessageHandler); - }; - }, [vscodeMessageHandler]); - const { displayedResults, nextResultsInfo, isExpectingResultsUpdate } = state; if ( displayedResults.results !== null && diff --git a/extensions/ql-vscode/src/view/results/__tests__/AlertTablePathRow.spec.tsx b/extensions/ql-vscode/src/view/results/__tests__/AlertTablePathRow.spec.tsx new file mode 100644 index 00000000000..001fa322a34 --- /dev/null +++ b/extensions/ql-vscode/src/view/results/__tests__/AlertTablePathRow.spec.tsx @@ -0,0 +1,40 @@ +import { render as reactRender, screen } from "@testing-library/react"; +import type { Props } from "../AlertTablePathRow"; +import { AlertTablePathRow } from "../AlertTablePathRow"; +import { createMockResults } from "../../../../test/factories/results/mockresults"; + +describe(AlertTablePathRow.name, () => { + const render = (props?: Props) => { + const mockRef = { current: null } as React.RefObject; + const results = createMockResults(); + const threadFlow = results[0]?.codeFlows?.[0]?.threadFlows?.[0]; + + if (!threadFlow) { + throw new Error("ThreadFlow is undefined"); + } + reactRender( + , + ); + }; + + it("renders number of steps", () => { + render(); + + expect(screen.getByText("Path (3 steps)")).toBeInTheDocument(); + }); +}); diff --git a/extensions/ql-vscode/src/view/results/__tests__/AlertTableResultRow.spec.tsx b/extensions/ql-vscode/src/view/results/__tests__/AlertTableResultRow.spec.tsx new file mode 100644 index 00000000000..9082384e9d2 --- /dev/null +++ b/extensions/ql-vscode/src/view/results/__tests__/AlertTableResultRow.spec.tsx @@ -0,0 +1,35 @@ +import { render as reactRender, screen } from "@testing-library/react"; +import { AlertTableResultRow } from "../AlertTableResultRow"; +import type { Props } from "../AlertTableResultRow"; +import { createMockResults } from "../../../../test/factories/results/mockresults"; + +describe(AlertTableResultRow.name, () => { + const render = (props?: Props) => { + const mockRef = { current: null } as React.RefObject; + const results = createMockResults(); + + reactRender( + , + ); + }; + + it("renders shortest path badge", () => { + render(); + + expect(screen.getByTitle("Shortest path")).toHaveTextContent("3"); + }); +}); diff --git a/extensions/ql-vscode/src/view/tsconfig.json b/extensions/ql-vscode/src/view/tsconfig.json index eceba57235f..d094c039d78 100644 --- a/extensions/ql-vscode/src/view/tsconfig.json +++ b/extensions/ql-vscode/src/view/tsconfig.json @@ -2,7 +2,7 @@ "compilerOptions": { "module": "esnext", "moduleResolution": "node", - "target": "es6", + "target": "es2021", "outDir": "out", "lib": ["ES2021", "dom"], "jsx": "react-jsx", @@ -14,7 +14,12 @@ "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, "experimentalDecorators": true, - "skipLibCheck": true + "skipLibCheck": true, + "plugins": [ + { + "name": "typescript-plugin-css-modules" + } + ] }, "exclude": ["node_modules"] } diff --git a/extensions/ql-vscode/src/view/types.d.ts b/extensions/ql-vscode/src/view/types.d.ts new file mode 100644 index 00000000000..1eabbb4297e --- /dev/null +++ b/extensions/ql-vscode/src/view/types.d.ts @@ -0,0 +1 @@ +declare module "*.module.css"; diff --git a/extensions/ql-vscode/src/view/variant-analysis/FailureReasonAlert.tsx b/extensions/ql-vscode/src/view/variant-analysis/FailureReasonAlert.tsx index d6d07400584..1b6c631dbb7 100644 --- a/extensions/ql-vscode/src/view/variant-analysis/FailureReasonAlert.tsx +++ b/extensions/ql-vscode/src/view/variant-analysis/FailureReasonAlert.tsx @@ -1,8 +1,8 @@ import type { ReactNode } from "react"; -import { VSCodeLink } from "@vscode/webview-ui-toolkit/react"; import { Alert } from "../common"; import { vscode } from "../vscode-api"; import { VariantAnalysisFailureReason } from "../../variant-analysis/shared/variant-analysis"; +import { Link } from "../common/Link"; type Props = { failureReason: VariantAnalysisFailureReason; @@ -33,8 +33,8 @@ const getMessage = (failureReason: VariantAnalysisFailureReason): ReactNode => { return ( <> The GitHub Actions workflow run has failed.{" "} - View actions logs and try - running this query again. + View actions logs and try running this + query again. ); case VariantAnalysisFailureReason.InternalError: diff --git a/extensions/ql-vscode/src/view/variant-analysis/RawResultCell.tsx b/extensions/ql-vscode/src/view/variant-analysis/RawResultCell.tsx index 0d7f589043e..7382d46f04b 100644 --- a/extensions/ql-vscode/src/view/variant-analysis/RawResultCell.tsx +++ b/extensions/ql-vscode/src/view/variant-analysis/RawResultCell.tsx @@ -1,10 +1,9 @@ -import { VSCodeLink } from "@vscode/webview-ui-toolkit/react"; - import type { CellValue } from "../../common/raw-result-types"; import { sendTelemetry } from "../common/telemetry"; import { convertNonPrintableChars } from "../../common/text-utils"; import { tryGetRemoteLocation } from "../../common/bqrs-utils"; import { RawNumberValue } from "../common/RawNumberValue"; +import { Link } from "../common/Link"; type CellProps = { value: CellValue; @@ -35,9 +34,9 @@ export const RawResultCell = ({ const safeLabel = convertNonPrintableChars(value.value.label); if (url) { return ( - + {safeLabel} - + ); } else { return {safeLabel}; diff --git a/extensions/ql-vscode/src/view/variant-analysis/RepoRow.tsx b/extensions/ql-vscode/src/view/variant-analysis/RepoRow.tsx index fc381fe016f..19edad08cc2 100644 --- a/extensions/ql-vscode/src/view/variant-analysis/RepoRow.tsx +++ b/extensions/ql-vscode/src/view/variant-analysis/RepoRow.tsx @@ -1,7 +1,7 @@ import type { ChangeEvent } from "react"; import { useCallback, useEffect, useState } from "react"; import { styled } from "styled-components"; -import { VSCodeBadge, VSCodeCheckbox } from "@vscode/webview-ui-toolkit/react"; +import { VscodeCheckbox } from "@vscode-elements/react-elements"; import type { VariantAnalysisScannedRepositoryState } from "../../variant-analysis/shared/variant-analysis"; import { isCompletedAnalysisRepoStatus, @@ -27,6 +27,7 @@ import StarCount from "../common/StarCount"; import { useTelemetryOnChange } from "../common/telemetry"; import { DeterminateProgressRing } from "../common/DeterminateProgressRing"; import { ResultFormat } from "../../variant-analysis/shared/variant-analysis-result-format"; +import { Badge } from "../common/Badge"; // This will ensure that these icons have a className which we can use in the TitleContainer const ExpandCollapseCodicon = styled(Codicon)``; @@ -61,6 +62,10 @@ const MetadataContainer = styled.div` margin-left: auto; `; +const Checkbox = styled(VscodeCheckbox)` + margin-right: -9px; // VscodeCheckbox has 9px margin on the right by default +`; + type VisibilityProps = { isPrivate?: boolean; }; @@ -254,7 +259,7 @@ export const RepoRow = ({ disabled={disabled} aria-expanded={isExpanded} > - )} {resultsLoading && } - + {resultCount === undefined ? "-" : formatDecimal(resultCount)} - + {repository.fullName} diff --git a/extensions/ql-vscode/src/view/variant-analysis/RepositoriesFilter.tsx b/extensions/ql-vscode/src/view/variant-analysis/RepositoriesFilter.tsx index 56596b2ecbf..206b33586fb 100644 --- a/extensions/ql-vscode/src/view/variant-analysis/RepositoriesFilter.tsx +++ b/extensions/ql-vscode/src/view/variant-analysis/RepositoriesFilter.tsx @@ -1,10 +1,13 @@ import { useCallback } from "react"; import { styled } from "styled-components"; -import { VSCodeDropdown, VSCodeOption } from "@vscode/webview-ui-toolkit/react"; +import { + VscodeOption, + VscodeSingleSelect, +} from "@vscode-elements/react-elements"; import { Codicon } from "../common"; import { FilterKey } from "../../variant-analysis/shared/variant-analysis-filter-sort"; -const Dropdown = styled(VSCodeDropdown)` +const Dropdown = styled(VscodeSingleSelect)` width: 100%; `; @@ -26,10 +29,10 @@ export const RepositoriesFilter = ({ value, onChange, className }: Props) => { ); return ( - + - All - With results + All + With results ); }; diff --git a/extensions/ql-vscode/src/view/variant-analysis/RepositoriesResultFormat.tsx b/extensions/ql-vscode/src/view/variant-analysis/RepositoriesResultFormat.tsx index 11ac814cc18..380599017eb 100644 --- a/extensions/ql-vscode/src/view/variant-analysis/RepositoriesResultFormat.tsx +++ b/extensions/ql-vscode/src/view/variant-analysis/RepositoriesResultFormat.tsx @@ -1,10 +1,13 @@ import { useCallback } from "react"; import { styled } from "styled-components"; -import { VSCodeDropdown, VSCodeOption } from "@vscode/webview-ui-toolkit/react"; +import { + VscodeOption, + VscodeSingleSelect, +} from "@vscode-elements/react-elements"; import { Codicon } from "../common"; import { ResultFormat } from "../../variant-analysis/shared/variant-analysis-result-format"; -const Dropdown = styled(VSCodeDropdown)` +const Dropdown = styled(VscodeSingleSelect)` width: 100%; `; @@ -30,14 +33,14 @@ export const RepositoriesResultFormat = ({ ); return ( - + - + {ResultFormat.Alerts} - - + + {ResultFormat.RawResults} - + ); }; diff --git a/extensions/ql-vscode/src/view/variant-analysis/RepositoriesSort.tsx b/extensions/ql-vscode/src/view/variant-analysis/RepositoriesSort.tsx index d4383a3e1ea..96ec4c43dd4 100644 --- a/extensions/ql-vscode/src/view/variant-analysis/RepositoriesSort.tsx +++ b/extensions/ql-vscode/src/view/variant-analysis/RepositoriesSort.tsx @@ -1,10 +1,13 @@ import { useCallback } from "react"; import { styled } from "styled-components"; -import { VSCodeDropdown, VSCodeOption } from "@vscode/webview-ui-toolkit/react"; +import { + VscodeOption, + VscodeSingleSelect, +} from "@vscode-elements/react-elements"; import { SortKey } from "../../variant-analysis/shared/variant-analysis-filter-sort"; import { Codicon } from "../common"; -const Dropdown = styled(VSCodeDropdown)` +const Dropdown = styled(VscodeSingleSelect)` width: 100%; `; @@ -26,13 +29,13 @@ export const RepositoriesSort = ({ value, onChange, className }: Props) => { ); return ( - + - Alphabetically - + Alphabetically + Number of results - - Popularity + + Popularity ); }; diff --git a/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysis.tsx b/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysis.tsx index 3a72c3548cd..3ac0599ae6c 100644 --- a/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysis.tsx +++ b/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysis.tsx @@ -1,4 +1,4 @@ -import { useCallback, useEffect, useState } from "react"; +import { useCallback, useState } from "react"; import type { VariantAnalysis as VariantAnalysisDomainModel, @@ -9,10 +9,15 @@ import { VariantAnalysisStatus } from "../../variant-analysis/shared/variant-ana import { VariantAnalysisHeader } from "./VariantAnalysisHeader"; import { VariantAnalysisOutcomePanels } from "./VariantAnalysisOutcomePanels"; import { VariantAnalysisLoading } from "./VariantAnalysisLoading"; -import type { ToVariantAnalysisMessage } from "../../common/interface-types"; +import type { + ToVariantAnalysisMessage, + VariantAnalysisUserSettings, +} from "../../common/interface-types"; import { vscode } from "../vscode-api"; import { defaultFilterSortState } from "../../variant-analysis/shared/variant-analysis-filter-sort"; import { sendTelemetry, useTelemetryOnChange } from "../common/telemetry"; +import { useMessageFromExtension } from "../common/useMessageFromExtension"; +import { DEFAULT_VARIANT_ANALYSIS_USER_SETTINGS } from "../../common/interface-types"; export type VariantAnalysisProps = { variantAnalysis?: VariantAnalysisDomainModel; @@ -76,52 +81,51 @@ export function VariantAnalysis({ useTelemetryOnChange(filterSortState, "variant-analysis-filter-sort-state", { debounceTimeoutMillis: 1000, }); + const [variantAnalysisUserSettings, setVariantAnalysisUserSettings] = + useState( + DEFAULT_VARIANT_ANALYSIS_USER_SETTINGS, + ); - useEffect(() => { - const listener = (evt: MessageEvent) => { - if (evt.origin === window.origin) { - const msg: ToVariantAnalysisMessage = evt.data; - if (msg.t === "setVariantAnalysis") { - setVariantAnalysis(msg.variantAnalysis); - vscode.setState({ - variantAnalysisId: msg.variantAnalysis.id, - }); - } else if (msg.t === "setFilterSortState") { - setFilterSortState(msg.filterSortState); - } else if (msg.t === "setRepoResults") { - setRepoResults((oldRepoResults) => { - const newRepoIds = msg.repoResults.map((r) => r.repositoryId); - return [ - ...oldRepoResults.filter( - (v) => !newRepoIds.includes(v.repositoryId), - ), - ...msg.repoResults, - ]; - }); - } else if (msg.t === "setRepoStates") { - setRepoStates((oldRepoStates) => { - const newRepoIds = msg.repoStates.map((r) => r.repositoryId); - return [ - ...oldRepoStates.filter( - (v) => !newRepoIds.includes(v.repositoryId), - ), - ...msg.repoStates, - ]; - }); - } - } else { - // sanitize origin - const origin = evt.origin.replace(/\n|\r/g, ""); - console.error(`Invalid event origin ${origin}`); - } - }; - window.addEventListener("message", listener); - - return () => { - window.removeEventListener("message", listener); - }; + useMessageFromExtension((msg) => { + if (msg.t === "setVariantAnalysis") { + setVariantAnalysis(msg.variantAnalysis); + vscode.setState({ + variantAnalysisId: msg.variantAnalysis.id, + }); + } else if (msg.t === "setFilterSortState") { + setFilterSortState(msg.filterSortState); + } else if (msg.t === "setRepoResults") { + setRepoResults((oldRepoResults) => { + const newRepoIds = msg.repoResults.map((r) => r.repositoryId); + return [ + ...oldRepoResults.filter((v) => !newRepoIds.includes(v.repositoryId)), + ...msg.repoResults, + ]; + }); + } else if (msg.t === "setRepoStates") { + setRepoStates((oldRepoStates) => { + const newRepoIds = msg.repoStates.map((r) => r.repositoryId); + return [ + ...oldRepoStates.filter((v) => !newRepoIds.includes(v.repositoryId)), + ...msg.repoStates, + ]; + }); + } else if (msg.t === "setVariantAnalysisUserSettings") { + setVariantAnalysisUserSettings(msg.variantAnalysisUserSettings); + } }, []); + const viewAutofixes = useCallback(() => { + vscode.postMessage({ + t: "viewAutofixes", + filterSort: { + ...filterSortState, + repositoryIds: selectedRepositoryIds, + }, + }); + sendTelemetry("variant-analysis-view-autofixes"); + }, [filterSortState, selectedRepositoryIds]); + const copyRepositoryList = useCallback(() => { vscode.postMessage({ t: "copyRepositoryList", @@ -165,9 +169,11 @@ export function VariantAnalysis({ onOpenQueryFileClick={openQueryFile} onViewQueryTextClick={openQueryText} onStopQueryClick={stopQuery} + onViewAutofixesClick={viewAutofixes} onCopyRepositoryListClick={copyRepositoryList} onExportResultsClick={exportResults} onViewLogsClick={onViewLogsClick} + variantAnalysisUserSettings={variantAnalysisUserSettings} /> void; onCopyRepositoryListClick: () => void; onExportResultsClick: () => void; + viewAutofixesDisabled?: boolean; copyRepositoryListDisabled?: boolean; exportResultsDisabled?: boolean; hasSelectedRepositories?: boolean; hasFilteredRepositories?: boolean; + + showViewAutofixesButton: boolean; }; const Container = styled.div` @@ -24,7 +28,7 @@ const Container = styled.div` gap: 1em; `; -const Button = styled(VSCodeButton)` +const Button = styled(VscodeButton)` white-space: nowrap; `; @@ -55,19 +59,37 @@ export const VariantAnalysisActions = ({ onStopQueryClick, stopQueryDisabled, showResultActions, + onViewAutofixesClick, onCopyRepositoryListClick, onExportResultsClick, + viewAutofixesDisabled, copyRepositoryListDisabled, exportResultsDisabled, hasSelectedRepositories, hasFilteredRepositories, + showViewAutofixesButton, }: VariantAnalysisActionsProps) => { return ( {showResultActions && ( <> + {showViewAutofixesButton && ( + + )} )} {variantAnalysisStatus === VariantAnalysisStatus.Canceling && ( - )} diff --git a/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisHeader.tsx b/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisHeader.tsx index bdd9b5e11be..6f9ad00ad33 100644 --- a/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisHeader.tsx +++ b/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisHeader.tsx @@ -22,6 +22,7 @@ import { filterAndSortRepositoriesWithResults, } from "../../variant-analysis/shared/variant-analysis-filter-sort"; import { ViewTitle } from "../common"; +import type { VariantAnalysisUserSettings } from "../../common/interface-types"; type VariantAnalysisHeaderProps = { variantAnalysis: VariantAnalysis; @@ -34,10 +35,13 @@ type VariantAnalysisHeaderProps = { onStopQueryClick: () => void; + onViewAutofixesClick: () => void; onCopyRepositoryListClick: () => void; onExportResultsClick: () => void; onViewLogsClick?: () => void; + + variantAnalysisUserSettings: VariantAnalysisUserSettings; }; const Container = styled.div` @@ -82,9 +86,11 @@ export const VariantAnalysisHeader = ({ onOpenQueryFileClick, onViewQueryTextClick, onStopQueryClick, + onViewAutofixesClick, onCopyRepositoryListClick, onExportResultsClick, onViewLogsClick, + variantAnalysisUserSettings, }: VariantAnalysisHeaderProps) => { const totalScannedRepositoryCount = useMemo(() => { return variantAnalysis.scannedRepos?.length ?? 0; @@ -150,11 +156,13 @@ export const VariantAnalysisHeader = ({ variantAnalysisStatus={variantAnalysis.status} showResultActions={(resultCount ?? 0) > 0} onStopQueryClick={onStopQueryClick} + onViewAutofixesClick={onViewAutofixesClick} onCopyRepositoryListClick={onCopyRepositoryListClick} onExportResultsClick={onExportResultsClick} stopQueryDisabled={!variantAnalysis.actionsWorkflowRunId} exportResultsDisabled={!hasDownloadedRepos} copyRepositoryListDisabled={!hasReposWithResults} + viewAutofixesDisabled={!hasReposWithResults} hasFilteredRepositories={ variantAnalysis.scannedRepos?.length !== filteredRepositories?.length @@ -162,6 +170,9 @@ export const VariantAnalysisHeader = ({ hasSelectedRepositories={ selectedRepositoryIds && selectedRepositoryIds.length > 0 } + showViewAutofixesButton={ + variantAnalysisUserSettings.shouldShowViewAutofixesButton + } /> >; }; -const Tab = styled(VSCodePanelTab)` +const Tabs = styled(VscodeTabs)` + column-gap: 32px; + + > vscode-tab-header { + margin-right: 32px; + } +`; + +const TabHeader = styled(VscodeTabHeader)` text-transform: uppercase; + + > * { + // This copies the styles from @vscode/webview-ui-toolkit's VSCodePanelTab + &:last-child { + margin-left: 8px; + } + } +`; + +const TabPanel = styled(VscodeTabPanel)` + padding: 10px 6px; `; const WarningsContainer = styled.div` @@ -154,33 +173,31 @@ export const VariantAnalysisOutcomePanels = ({ onResultFormatChange={setResultFormat} variantAnalysisQueryKind={variantAnalysis.query.kind} /> - + {scannedReposCount > 0 && ( - + Analyzed - + {formatDecimal(variantAnalysis.scannedRepos?.length ?? 0)} - - - )} - {notFoundRepos?.repositoryCount && ( - - No access - - {formatDecimal(notFoundRepos.repositoryCount)} - - - )} - {noCodeqlDbRepos?.repositoryCount && ( - - No database - - {formatDecimal(noCodeqlDbRepos.repositoryCount)} - - + + )} + {notFoundRepos?.repositoryCount !== undefined && + notFoundRepos?.repositoryCount > 0 && ( + + No access + {formatDecimal(notFoundRepos.repositoryCount)} + + )} + {noCodeqlDbRepos?.repositoryCount !== undefined && + noCodeqlDbRepos?.repositoryCount > 0 && ( + + No database + {formatDecimal(noCodeqlDbRepos.repositoryCount)} + + )} {scannedReposCount > 0 && ( - + - - )} - {notFoundRepos?.repositoryCount && ( - - - - )} - {noCodeqlDbRepos?.repositoryCount && ( - - - + )} - + {notFoundRepos?.repositoryCount !== undefined && + notFoundRepos?.repositoryCount > 0 && ( + + + + )} + {noCodeqlDbRepos?.repositoryCount !== undefined && + noCodeqlDbRepos?.repositoryCount > 0 && ( + + + + )} + ); }; diff --git a/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisStatusStats.tsx b/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisStatusStats.tsx index 3969fd7951e..5f937b74682 100644 --- a/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisStatusStats.tsx +++ b/extensions/ql-vscode/src/view/variant-analysis/VariantAnalysisStatusStats.tsx @@ -1,7 +1,7 @@ import { styled } from "styled-components"; -import { VSCodeLink } from "@vscode/webview-ui-toolkit/react"; import { formatDate } from "../../common/date"; import { VariantAnalysisStatus } from "../../variant-analysis/shared/variant-analysis"; +import { Link } from "../common/Link"; export type VariantAnalysisStatusStatsProps = { variantAnalysisStatus: VariantAnalysisStatus; @@ -37,7 +37,7 @@ export const VariantAnalysisStatusStats = ({ {completedAt !== undefined ? formatDate(completedAt) : "-"} )} {onViewLogsClick && ( - View actions logs + View actions logs )} ); diff --git a/extensions/ql-vscode/src/view/variant-analysis/__tests__/RepoRow.spec.tsx b/extensions/ql-vscode/src/view/variant-analysis/__tests__/RepoRow.spec.tsx index b1f4df59a71..1c89400615d 100644 --- a/extensions/ql-vscode/src/view/variant-analysis/__tests__/RepoRow.spec.tsx +++ b/extensions/ql-vscode/src/view/variant-analysis/__tests__/RepoRow.spec.tsx @@ -1,9 +1,4 @@ -import { - act, - render as reactRender, - screen, - waitFor, -} from "@testing-library/react"; +import { act, render as reactRender, screen } from "@testing-library/react"; import { VariantAnalysisRepoStatus, VariantAnalysisScannedRepositoryDownloadStatus, @@ -403,7 +398,8 @@ describe(RepoRow.name, () => { status: VariantAnalysisRepoStatus.InProgress, }); - expect(screen.getByRole("checkbox")).toBeDisabled(); + const checkbox = await screen.findByRole("checkbox"); + expect(checkbox).toBeDisabled(); }); it("does not allow selecting the item if the item has not been downloaded", async () => { @@ -411,7 +407,8 @@ describe(RepoRow.name, () => { status: VariantAnalysisRepoStatus.Succeeded, }); - expect(screen.getByRole("checkbox")).toBeDisabled(); + const checkbox = await screen.findByRole("checkbox"); + expect(checkbox).toBeDisabled(); }); it("does not allow selecting the item if the item has not been downloaded successfully", async () => { @@ -423,11 +420,8 @@ describe(RepoRow.name, () => { }, }); - // It seems like sometimes the first render doesn't have the checkbox disabled - // Might be related to https://github.com/microsoft/vscode-webview-ui-toolkit/issues/404 - await waitFor(() => { - expect(screen.getByRole("checkbox")).toBeDisabled(); - }); + const checkbox = await screen.findByRole("checkbox"); + expect(checkbox).toBeDisabled(); }); it("allows selecting the item if the item has been downloaded", async () => { @@ -440,6 +434,7 @@ describe(RepoRow.name, () => { }, }); - expect(screen.getByRole("checkbox")).toBeEnabled(); + const checkbox = await screen.findByRole("checkbox"); + expect(checkbox).toBeEnabled(); }); }); diff --git a/extensions/ql-vscode/src/view/variant-analysis/__tests__/VariantAnalysis.spec.tsx b/extensions/ql-vscode/src/view/variant-analysis/__tests__/VariantAnalysis.spec.tsx index b8a7bfcd539..3279ed446d2 100644 --- a/extensions/ql-vscode/src/view/variant-analysis/__tests__/VariantAnalysis.spec.tsx +++ b/extensions/ql-vscode/src/view/variant-analysis/__tests__/VariantAnalysis.spec.tsx @@ -1,4 +1,4 @@ -import { render as reactRender, screen, waitFor } from "@testing-library/react"; +import { render as reactRender, screen } from "@testing-library/react"; import { VariantAnalysisFailureReason, VariantAnalysisStatus, @@ -57,9 +57,6 @@ describe(VariantAnalysis.name, () => { const variantAnalysis = createMockVariantAnalysis({}); render({ variantAnalysis }); - await waitFor(() => screen.getByDisplayValue("All")); - await waitFor(() => screen.getByDisplayValue("Number of results")); - await postMessage({ t: "setFilterSortState", filterSortState: { @@ -69,8 +66,11 @@ describe(VariantAnalysis.name, () => { }, }); - expect(screen.getByDisplayValue("With results")).toBeInTheDocument(); - expect(screen.getByDisplayValue("Alphabetically")).toBeInTheDocument(); + const withResults = await screen.findByText("With results"); + expect(withResults).toBeInTheDocument(); + + const alphabetically = await screen.findByText("Alphabetically"); + expect(alphabetically).toBeInTheDocument(); expect(screen.queryByDisplayValue("All")).not.toBeInTheDocument(); expect( diff --git a/extensions/ql-vscode/src/view/variant-analysis/__tests__/VariantAnalysisActions.spec.tsx b/extensions/ql-vscode/src/view/variant-analysis/__tests__/VariantAnalysisActions.spec.tsx index de19458646e..08d3fe84b54 100644 --- a/extensions/ql-vscode/src/view/variant-analysis/__tests__/VariantAnalysisActions.spec.tsx +++ b/extensions/ql-vscode/src/view/variant-analysis/__tests__/VariantAnalysisActions.spec.tsx @@ -6,11 +6,13 @@ import { VariantAnalysisActions } from "../VariantAnalysisActions"; describe(VariantAnalysisActions.name, () => { const onStopQueryClick = jest.fn(); + const onViewAutofixesClick = jest.fn(); const onCopyRepositoryListClick = jest.fn(); const onExportResultsClick = jest.fn(); afterEach(() => { onStopQueryClick.mockReset(); + onViewAutofixesClick.mockReset(); onCopyRepositoryListClick.mockReset(); onExportResultsClick.mockReset(); }); @@ -22,8 +24,10 @@ describe(VariantAnalysisActions.name, () => { reactRender( , ); @@ -50,9 +54,9 @@ describe(VariantAnalysisActions.name, () => { variantAnalysisStatus: VariantAnalysisStatus.Canceling, }); - const button = screen.getByText("Stopping query"); + const button = await screen.findByText("Stopping query"); expect(button).toBeInTheDocument(); - expect(button.getElementsByTagName("input")[0]).toBeDisabled(); + expect(button).toBeDisabled(); }); it("does not render a stop query button when canceling", async () => { diff --git a/extensions/ql-vscode/src/view/webview.tsx b/extensions/ql-vscode/src/view/webview.tsx index d3adadf74a1..5081dbaffe3 100644 --- a/extensions/ql-vscode/src/view/webview.tsx +++ b/extensions/ql-vscode/src/view/webview.tsx @@ -6,6 +6,7 @@ import { registerUnhandledErrorListener } from "./common/errors"; import type { WebviewDefinition } from "./webview-definition"; import compareView from "./compare"; +import comparePerformance from "./compare-performance"; import dataFlowPathsView from "./data-flow-paths"; import methodModelingView from "./method-modeling"; import modelEditorView from "./model-editor"; @@ -18,6 +19,7 @@ import "@vscode/codicons/dist/codicon.css"; const views: Record = { compare: compareView, + "compare-performance": comparePerformance, "data-flow-paths": dataFlowPathsView, "method-modeling": methodModelingView, "model-editor": modelEditorView, diff --git a/extensions/ql-vscode/supported_cli_versions.json b/extensions/ql-vscode/supported_cli_versions.json index 31666d596d4..2a5361eb498 100644 --- a/extensions/ql-vscode/supported_cli_versions.json +++ b/extensions/ql-vscode/supported_cli_versions.json @@ -1,7 +1,7 @@ [ - "v2.18.1", - "v2.17.6", - "v2.16.6", - "v2.15.5", + "v2.23.3", + "v2.22.4", + "v2.21.4", + "v2.20.7", "nightly" ] diff --git a/extensions/ql-vscode/syntaxes/ql.tmLanguage.yml b/extensions/ql-vscode/syntaxes/ql.tmLanguage.yml index fe10a86d03d..9348f74f763 100644 --- a/extensions/ql-vscode/syntaxes/ql.tmLanguage.yml +++ b/extensions/ql-vscode/syntaxes/ql.tmLanguage.yml @@ -1065,7 +1065,7 @@ repository: beginPattern: '#as' # Ends after the first identifier we encounter. # REVIEW: Make similar to import-as-clause. - end: '(?<=(?#id-character)(?#end-of-id))' + end: '(?<=(?#id-character))(?#end-of-id)' match: meta.block.select-as-clause.ql patterns: - include: '#non-context-sensitive' diff --git a/extensions/ql-vscode/test/benchmarks/jsonl-reader.bench.ts b/extensions/ql-vscode/test/benchmarks/jsonl-reader.bench.ts new file mode 100644 index 00000000000..a5a3b64b0b2 --- /dev/null +++ b/extensions/ql-vscode/test/benchmarks/jsonl-reader.bench.ts @@ -0,0 +1,87 @@ +/** + * Benchmarks the jsonl-parser against a reference implementation and checks that it generates + * the same output. + * + * Usage: + * + * ts-node json-reader.bench.ts [evaluator-log.summary.jsonl] [count] + * + * The log file defaults to a small checked-in log and count defaults to 100 + * (and should be lowered significantly for large files). + * + * At the time of writing it is about as fast as the synchronous reference implementation, + * but doesn't run out of memory for large files. + */ +import { readFile } from "fs-extra"; +import { readJsonlFile } from "../../src/common/jsonl-reader"; +import { performance } from "perf_hooks"; +import { join } from "path"; + +/** An "obviously correct" implementation to test against. */ +async function readJsonlReferenceImpl( + path: string, + handler: (value: T) => Promise, +): Promise { + const logSummary = await readFile(path, "utf-8"); + + // Remove newline delimiters because summary is in .jsonl format. + const jsonSummaryObjects: string[] = logSummary.split(/\r?\n\r?\n/g); + + for (const obj of jsonSummaryObjects) { + const jsonObj = JSON.parse(obj) as T; + await handler(jsonObj); + } +} + +type ParserFn = ( + text: string, + callback: (v: unknown) => Promise, +) => Promise; + +const parsers: Record = { + readJsonlReferenceImpl, + readJsonlFile, +}; + +async function main() { + const args = process.argv.slice(2); + const file = + args.length > 0 + ? args[0] + : join( + __dirname, + "../unit-tests/data/evaluator-log-summaries/bad-join-order.jsonl", + ); + const numTrials = args.length > 1 ? Number(args[1]) : 100; + const referenceValues: any[] = []; + await readJsonlReferenceImpl(file, async (event) => { + referenceValues.push(event); + }); + const referenceValueString = JSON.stringify(referenceValues); + // Do warm-up runs and check against reference implementation + for (const [name, parser] of Object.entries(parsers)) { + const values: unknown[] = []; + await parser(file, async (event) => { + values.push(event); + }); + if (JSON.stringify(values) !== referenceValueString) { + console.error(`${name}: failed to match reference implementation`); + } + } + for (const [name, parser] of Object.entries(parsers)) { + const startTime = performance.now(); + for (let i = 0; i < numTrials; ++i) { + await Promise.all([ + parser(file, async () => {}), + parser(file, async () => {}), + ]); + } + const duration = performance.now() - startTime; + const durationPerTrial = duration / numTrials; + console.log(`${name}: ${durationPerTrial.toFixed(1)} ms`); + } +} + +main().catch((err: unknown) => { + console.error(err); +}); diff --git a/extensions/ql-vscode/test/common/logging/output-channel-logger.test.ts b/extensions/ql-vscode/test/common/logging/output-channel-logger.test.ts index 0df03c32ea3..ad835dda77e 100644 --- a/extensions/ql-vscode/test/common/logging/output-channel-logger.test.ts +++ b/extensions/ql-vscode/test/common/logging/output-channel-logger.test.ts @@ -50,7 +50,7 @@ describe("OutputChannelLogger tests", function () { tempFolders.storagePath.removeCallback(); }); - // eslint-disable-next-line @typescript-eslint/no-var-requires + // eslint-disable-next-line @typescript-eslint/no-require-imports const mockOutputChannel = require("vscode").mockOutputChannel; it("should log to the output channel", async () => { diff --git a/extensions/ql-vscode/test/data-extensions/pack-using-extensions/codeql-pack.lock.yml b/extensions/ql-vscode/test/data-extensions/pack-using-extensions/codeql-pack.lock.yml new file mode 100644 index 00000000000..61121d6d0cf --- /dev/null +++ b/extensions/ql-vscode/test/data-extensions/pack-using-extensions/codeql-pack.lock.yml @@ -0,0 +1,26 @@ +--- +lockVersion: 1.0.0 +dependencies: + codeql/dataflow: + version: 2.0.7 + codeql/javascript-all: + version: 2.6.3 + codeql/mad: + version: 1.0.23 + codeql/regex: + version: 1.0.23 + codeql/ssa: + version: 1.1.2 + codeql/threat-models: + version: 1.0.23 + codeql/tutorial: + version: 1.0.23 + codeql/typetracking: + version: 2.0.7 + codeql/util: + version: 2.0.10 + codeql/xml: + version: 1.0.23 + codeql/yaml: + version: 1.0.23 +compiled: false diff --git a/extensions/ql-vscode/test/data/debugger/QuickEvalBigIntQuery.ql b/extensions/ql-vscode/test/data/debugger/QuickEvalBigIntQuery.ql new file mode 100644 index 00000000000..e17e9e0b614 --- /dev/null +++ b/extensions/ql-vscode/test/data/debugger/QuickEvalBigIntQuery.ql @@ -0,0 +1,31 @@ +import QuickEvalLib + +class InterestingBigInt instanceof InterestingNumber +{ + QlBuiltins::BigInt getBigIntValue() { + result = super.getValue().toBigInt().pow(10) + } + + string toString() { + result = super.toString() + } +} + +class PrimeNumber extends InterestingNumber { + PrimeNumber() { + exists(int n | this = MkNumber(n) | + n in [ + 2, + 3, + 5, + 7, + 11, + 13, + 17, + 19 + ]) + } +} + +from InterestingNumber n +select n.toString() diff --git a/extensions/ql-vscode/test/e2e/README.md b/extensions/ql-vscode/test/e2e/README.md index c91c802835f..824c76535ee 100644 --- a/extensions/ql-vscode/test/e2e/README.md +++ b/extensions/ql-vscode/test/e2e/README.md @@ -9,12 +9,12 @@ Setup - install playwright if you haven't yet (`npx playwright install`) - go to the e2e test folder on your terminal - make sure docker is running -- run `docker-compose build` -- run `docker-compose up` +- run `docker compose build` +- run `docker compose up` Run tests -- run `npx playwright test --ui` from the e2e test folder to follow the test while it's running. This UI has a 'locator' tool with which elements on the test screen can be found +- run `npx playwright test --ui` from the e2e test folder to follow the test while it's running. This UI has a 'locator' tool with which elements on the test screen can be found - use `npx playwright test --debug` to follow the test in real time and interact with the interface, e.g. press enter or input into fields, stop and start During the test elements are created in the docker volume, e.g. the downloaded database or query data. This might interfer with other tests or when running a test twice. If that happens restart your docker volume by using `docker-compose down -v` and `docker-compose up`. Sometimes already existing queries from former runs change the input the extension needs. diff --git a/extensions/ql-vscode/test/e2e/docker-compose.yml b/extensions/ql-vscode/test/e2e/docker-compose.yml index 76a3f265f89..1afb2090e94 100644 --- a/extensions/ql-vscode/test/e2e/docker-compose.yml +++ b/extensions/ql-vscode/test/e2e/docker-compose.yml @@ -1,5 +1,3 @@ -version: "3.8" - services: code-server: build: @@ -38,7 +36,7 @@ services: depends_on: - files-init files-init: - image: alpine:3.19.1 + image: alpine:3.21.0 restart: "no" # Since we're not running the code-server container using the same user as our host user, # we need to set the permissions on the mounted volumes to match the user inside the container. diff --git a/extensions/ql-vscode/test/e2e/docker/Dockerfile b/extensions/ql-vscode/test/e2e/docker/Dockerfile index c27d3a3cd62..7f7b22e1a57 100644 --- a/extensions/ql-vscode/test/e2e/docker/Dockerfile +++ b/extensions/ql-vscode/test/e2e/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM codercom/code-server:4.23.1 +FROM codercom/code-server:4.104.1 USER root diff --git a/extensions/ql-vscode/test/e2e/docker/User/settings.json b/extensions/ql-vscode/test/e2e/docker/User/settings.json index 8dfd44b281c..bd40904834a 100644 --- a/extensions/ql-vscode/test/e2e/docker/User/settings.json +++ b/extensions/ql-vscode/test/e2e/docker/User/settings.json @@ -1,6 +1,5 @@ { "workbench.startupEditor": "none", "security.workspace.trust.enabled": false, - "codeQL.cli.executablePath": "/opt/codeql/codeql", - "codeQL.telemetry.enableTelemetry": false + "codeQL.cli.executablePath": "/opt/codeql/codeql" } diff --git a/extensions/ql-vscode/test/e2e/run-query.spec.ts b/extensions/ql-vscode/test/e2e/run-query.spec.ts index 6007a279fd6..1bec2591355 100644 --- a/extensions/ql-vscode/test/e2e/run-query.spec.ts +++ b/extensions/ql-vscode/test/e2e/run-query.spec.ts @@ -5,11 +5,6 @@ test("run query and open it from history", async ({ page }) => { await page.getByRole("tab", { name: "CodeQL" }).locator("a").click(); - // decline extension telemetry - await page.getByRole("button", { name: "No", exact: true }).click({ - timeout: 60000, - }); - await page.keyboard.press("Control+Shift+P"); await page.keyboard.type("Create Query"); await page.keyboard.press("Enter"); diff --git a/extensions/ql-vscode/test/factories/model-editor/extension-pack.ts b/extensions/ql-vscode/test/factories/model-editor/extension-pack.ts index cca396c85bd..a3459694ba6 100644 --- a/extensions/ql-vscode/test/factories/model-editor/extension-pack.ts +++ b/extensions/ql-vscode/test/factories/model-editor/extension-pack.ts @@ -1,5 +1,4 @@ import type { ExtensionPack } from "../../../src/model-editor/shared/extension-pack"; -import { join } from "path"; export function createMockExtensionPack({ path = "/path/to/extension-pack", @@ -7,7 +6,7 @@ export function createMockExtensionPack({ }: Partial = {}): ExtensionPack { return { path, - yamlPath: join(path, "codeql-pack.yml"), + yamlPath: `${path}/codeql-pack.yml`, name: "sql2o", version: "0.0.0", language: "java", diff --git a/extensions/ql-vscode/test/factories/model-editor/view-state.ts b/extensions/ql-vscode/test/factories/model-editor/view-state.ts index f7d338a19cd..62c42f98ca6 100644 --- a/extensions/ql-vscode/test/factories/model-editor/view-state.ts +++ b/extensions/ql-vscode/test/factories/model-editor/view-state.ts @@ -11,7 +11,6 @@ export function createMockModelEditorViewState( language: QueryLanguage.Java, mode: Mode.Application, showGenerateButton: false, - showLlmButton: false, showEvaluationUi: false, showModeSwitchButton: true, extensionPack: createMockExtensionPack(), diff --git a/extensions/ql-vscode/test/factories/results/mockresults.ts b/extensions/ql-vscode/test/factories/results/mockresults.ts new file mode 100644 index 00000000000..368c05bb312 --- /dev/null +++ b/extensions/ql-vscode/test/factories/results/mockresults.ts @@ -0,0 +1,104 @@ +import type { Result } from "sarif"; + +export function createMockResults(): Result[] { + return [ + { + ruleId: "java/sql-injection", + ruleIndex: 0, + rule: { id: "java/sql-injection", index: 0 }, + message: { + text: "This query depends on a [user-provided value](1).", + }, + locations: [ + { + physicalLocation: { + artifactLocation: { + uri: "src/main/java/org/example/HelloController.java", + uriBaseId: "%SRCROOT%", + index: 0, + }, + region: { startLine: 15, startColumn: 29, endColumn: 56 }, + }, + }, + ], + partialFingerprints: { + primaryLocationLineHash: "87e2d3cc5b365094:1", + primaryLocationStartColumnFingerprint: "16", + }, + codeFlows: [ + { + threadFlows: [ + { + locations: [ + { + location: { + physicalLocation: { + artifactLocation: { + uri: "src/main/java/org/example/HelloController.java", + uriBaseId: "%SRCROOT%", + index: 0, + }, + region: { + startLine: 13, + startColumn: 25, + endColumn: 54, + }, + }, + message: { text: "id : String" }, + }, + }, + { + location: { + physicalLocation: { + artifactLocation: { + uri: "file:/", + index: 5, + }, + region: { + startLine: 13, + startColumn: 25, + endColumn: 54, + }, + }, + message: { text: "id : String" }, + }, + }, + { + location: { + physicalLocation: { + artifactLocation: { + uri: "src/main/java/org/example/HelloController.java", + uriBaseId: "%SRCROOT%", + index: 0, + }, + region: { + startLine: 15, + startColumn: 29, + endColumn: 56, + }, + }, + message: { text: "... + ..." }, + }, + }, + ], + }, + ], + }, + ], + relatedLocations: [ + { + id: 1, + physicalLocation: { + artifactLocation: { + uri: "src/main/java/org/example/HelloController.java", + uriBaseId: "%SRCROOT%", + index: 0, + }, + region: { startLine: 13, startColumn: 25, endColumn: 54 }, + }, + message: { text: "user-provided value" }, + }, + ], + }, + ]; +} diff --git a/extensions/ql-vscode/test/factories/variant-analysis/gh-api/variant-analysis-repo-task.ts b/extensions/ql-vscode/test/factories/variant-analysis/gh-api/variant-analysis-repo-task.ts index cbfa5369e13..23e46b8b104 100644 --- a/extensions/ql-vscode/test/factories/variant-analysis/gh-api/variant-analysis-repo-task.ts +++ b/extensions/ql-vscode/test/factories/variant-analysis/gh-api/variant-analysis-repo-task.ts @@ -3,7 +3,8 @@ import type { VariantAnalysisRepoTask } from "../../../../src/variant-analysis/g import { VariantAnalysisRepoStatus } from "../../../../src/variant-analysis/shared/variant-analysis"; import { createMockRepository } from "./repository"; -export function createMockVariantAnalysisRepoTask(): VariantAnalysisRepoTask { +export function createMockVariantAnalysisRepoTask(): VariantAnalysisRepoTask & + Required> { return { repository: { ...createMockRepository(), @@ -12,6 +13,6 @@ export function createMockVariantAnalysisRepoTask(): VariantAnalysisRepoTask { analysis_status: VariantAnalysisRepoStatus.Succeeded, result_count: faker.number.int(), artifact_size_in_bytes: faker.number.int(), - artifact_url: "https://www.pickles.com/", + artifact_url: faker.internet.url(), }; } diff --git a/extensions/ql-vscode/test/factories/variant-analysis/shared/variant-analysis-repo-tasks.ts b/extensions/ql-vscode/test/factories/variant-analysis/shared/variant-analysis-repo-tasks.ts index a9f230cb390..e33500657b8 100644 --- a/extensions/ql-vscode/test/factories/variant-analysis/shared/variant-analysis-repo-tasks.ts +++ b/extensions/ql-vscode/test/factories/variant-analysis/shared/variant-analysis-repo-tasks.ts @@ -5,7 +5,8 @@ import { createMockRepositoryWithMetadata } from "./repository"; export function createMockVariantAnalysisRepositoryTask( data?: Partial, -): VariantAnalysisRepositoryTask { +): VariantAnalysisRepositoryTask & + Required> { return { repository: createMockRepositoryWithMetadata(), analysisStatus: VariantAnalysisRepoStatus.Pending, diff --git a/extensions/ql-vscode/test/jest-config.ts b/extensions/ql-vscode/test/jest-config.ts new file mode 100644 index 00000000000..3270067df7a --- /dev/null +++ b/extensions/ql-vscode/test/jest-config.ts @@ -0,0 +1,35 @@ +// These are all the packages that DO need to be transformed. All other packages will be ignored. +// These pacakges all use ES modules, so need to be transformed +const transformScopes = [ + "@microsoft", + "@octokit", + "@vscode-elements", + "@lit", + "@lit-labs", +]; +const transformPackages = [ + "before-after-hook", + "d3", + "data-uri-to-buffer", + "delaunator", + "exenv-es6", + "fetch-blob", + "formdata-polyfill", + "internmap", + "lit", + "nanoid", + "p-queue", + "p-timeout", + "robust-predicates", + "universal-user-agent", +]; +const transformWildcards = ["d3-(.*)", "lit-(.*)"]; +const transformPatterns = [ + ...transformScopes.map((scope) => `${scope}/.+`), + ...transformPackages, + ...transformWildcards, +]; + +export const transformIgnorePatterns = [ + `node_modules/(?!(?:${transformPatterns.join("|")})/.*)`, +]; diff --git a/extensions/ql-vscode/test/mock-memento.ts b/extensions/ql-vscode/test/mock-memento.ts index d5f12ec5c38..8d2a036ff81 100644 --- a/extensions/ql-vscode/test/mock-memento.ts +++ b/extensions/ql-vscode/test/mock-memento.ts @@ -17,7 +17,7 @@ class MockMemento implements Memento { public get(key: string): T | undefined; public get(key: string, defaultValue: T): T; - public get(key: any, defaultValue?: any): T | T | undefined { + public get(key: any, defaultValue?: T): T | undefined { return this.map.get(key) || defaultValue; } diff --git a/extensions/ql-vscode/test/mocked-object.ts b/extensions/ql-vscode/test/mocked-object.ts index e20caba295b..bd4374a843b 100644 --- a/extensions/ql-vscode/test/mocked-object.ts +++ b/extensions/ql-vscode/test/mocked-object.ts @@ -25,9 +25,11 @@ export function mockedObject( return new Proxy({} as unknown as T, { get: (_target, prop) => { if (prop in props) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-return return (props as any)[prop]; } if (dynamicProperties && prop in dynamicProperties) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-return return (dynamicProperties as any)[prop](); } diff --git a/extensions/ql-vscode/test/unit-tests/codeql-cli/distribution/releases-api-consumer.test.ts b/extensions/ql-vscode/test/unit-tests/codeql-cli/distribution/releases-api-consumer.test.ts index d1d238c3431..a8d4bb40674 100644 --- a/extensions/ql-vscode/test/unit-tests/codeql-cli/distribution/releases-api-consumer.test.ts +++ b/extensions/ql-vscode/test/unit-tests/codeql-cli/distribution/releases-api-consumer.test.ts @@ -1,4 +1,3 @@ -import { Response } from "node-fetch"; import { Range } from "semver"; import type { GithubRelease } from "../../../../src/codeql-cli/distribution/releases-api-consumer"; diff --git a/extensions/ql-vscode/test/unit-tests/common/disposable-object.test.ts b/extensions/ql-vscode/test/unit-tests/common/disposable-object.test.ts index b211141e39c..381bf838d2c 100644 --- a/extensions/ql-vscode/test/unit-tests/common/disposable-object.test.ts +++ b/extensions/ql-vscode/test/unit-tests/common/disposable-object.test.ts @@ -77,10 +77,10 @@ describe("DisposableObject and DisposeHandler", () => { expect(disposable1.dispose).toHaveBeenCalled(); }); - it("ahould use a dispose handler", () => { + it("should use a dispose handler", () => { const handler = (d: any) => d === disposable1 || d === disposable3 || d === nestedDisposableObject - ? d.dispose(handler) + ? void d.dispose(handler) : void 0; disposableObject.push(disposable1); diff --git a/extensions/ql-vscode/test/unit-tests/common/errors.test.ts b/extensions/ql-vscode/test/unit-tests/common/errors.test.ts index ca9e01de37e..0f9cabf5c37 100644 --- a/extensions/ql-vscode/test/unit-tests/common/errors.test.ts +++ b/extensions/ql-vscode/test/unit-tests/common/errors.test.ts @@ -37,7 +37,7 @@ describe("errorMessage", () => { myRealFunction(); fail("Expected an error to be thrown"); - } catch (e: unknown) { + } catch (e) { if (!(e instanceof Error)) { throw new Error("Expected an Error to be thrown"); } diff --git a/extensions/ql-vscode/test/unit-tests/common/files.test.ts b/extensions/ql-vscode/test/unit-tests/common/files.test.ts index 9c435a3b4c6..b9b90136ee9 100644 --- a/extensions/ql-vscode/test/unit-tests/common/files.test.ts +++ b/extensions/ql-vscode/test/unit-tests/common/files.test.ts @@ -66,18 +66,19 @@ describe("files", () => { it("should scan a directory", async () => { const file1 = join(dataDir, "compute-default-strings.ql"); - const file2 = join(dataDir, "debugger", "QuickEvalQuery.ql"); - const file3 = join(dataDir, "debugger", "simple-query.ql"); - const file4 = join(dataDir, "multiple-result-sets.ql"); - const file5 = join(dataDir, "query.ql"); + const file2 = join(dataDir, "debugger", "QuickEvalBigIntQuery.ql"); + const file3 = join(dataDir, "debugger", "QuickEvalQuery.ql"); + const file4 = join(dataDir, "debugger", "simple-query.ql"); + const file5 = join(dataDir, "multiple-result-sets.ql"); + const file6 = join(dataDir, "query.ql"); const vaDir = join(dataDir, "variant-analysis-query-packs"); - const file6 = join(vaDir, "workspace1", "dir1", "query1.ql"); - const file7 = join(vaDir, "workspace1", "pack1", "query1.ql"); - const file8 = join(vaDir, "workspace1", "pack1", "query2.ql"); - const file9 = join(vaDir, "workspace1", "pack2", "query1.ql"); - const file10 = join(vaDir, "workspace1", "query1.ql"); - const file11 = join(vaDir, "workspace2", "query1.ql"); + const file7 = join(vaDir, "workspace1", "dir1", "query1.ql"); + const file8 = join(vaDir, "workspace1", "pack1", "query1.ql"); + const file9 = join(vaDir, "workspace1", "pack1", "query2.ql"); + const file10 = join(vaDir, "workspace1", "pack2", "query1.ql"); + const file11 = join(vaDir, "workspace1", "query1.ql"); + const file12 = join(vaDir, "workspace2", "query1.ql"); const result = await gatherQlFiles([dataDir]); expect(result.sort()).toEqual([ @@ -93,6 +94,7 @@ describe("files", () => { file9, file10, file11, + file12, ], true, ]); @@ -112,18 +114,19 @@ describe("files", () => { it("should avoid duplicates", async () => { const file1 = join(dataDir, "compute-default-strings.ql"); - const file2 = join(dataDir, "debugger", "QuickEvalQuery.ql"); - const file3 = join(dataDir, "debugger", "simple-query.ql"); - const file4 = join(dataDir, "multiple-result-sets.ql"); - const file5 = join(dataDir, "query.ql"); + const file2 = join(dataDir, "debugger", "QuickEvalBigIntQuery.ql"); + const file3 = join(dataDir, "debugger", "QuickEvalQuery.ql"); + const file4 = join(dataDir, "debugger", "simple-query.ql"); + const file5 = join(dataDir, "multiple-result-sets.ql"); + const file6 = join(dataDir, "query.ql"); const vaDir = join(dataDir, "variant-analysis-query-packs"); - const file6 = join(vaDir, "workspace1", "dir1", "query1.ql"); - const file7 = join(vaDir, "workspace1", "pack1", "query1.ql"); - const file8 = join(vaDir, "workspace1", "pack1", "query2.ql"); - const file9 = join(vaDir, "workspace1", "pack2", "query1.ql"); - const file10 = join(vaDir, "workspace1", "query1.ql"); - const file11 = join(vaDir, "workspace2", "query1.ql"); + const file7 = join(vaDir, "workspace1", "dir1", "query1.ql"); + const file8 = join(vaDir, "workspace1", "pack1", "query1.ql"); + const file9 = join(vaDir, "workspace1", "pack1", "query2.ql"); + const file10 = join(vaDir, "workspace1", "pack2", "query1.ql"); + const file11 = join(vaDir, "workspace1", "query1.ql"); + const file12 = join(vaDir, "workspace2", "query1.ql"); const result = await gatherQlFiles([file1, dataDir, file3, file4, file5]); result[0].sort(); @@ -140,6 +143,7 @@ describe("files", () => { file9, file10, file11, + file12, ], true, ]); diff --git a/extensions/ql-vscode/test/unit-tests/common/invocation-rate-limiter.test.ts b/extensions/ql-vscode/test/unit-tests/common/invocation-rate-limiter.test.ts index 4623c62a523..d29b60261b8 100644 --- a/extensions/ql-vscode/test/unit-tests/common/invocation-rate-limiter.test.ts +++ b/extensions/ql-vscode/test/unit-tests/common/invocation-rate-limiter.test.ts @@ -39,8 +39,8 @@ describe("Invocation rate limiter", () => { * value (`undefined`) with the given key. * @return The stored value or the defaultValue. */ - get(key: string, defaultValue?: T): T { - return this.map.has(key) ? this.map.get(key) : defaultValue; + get(key: string, defaultValue?: T): T | undefined { + return this.map.has(key) ? (this.map.get(key) as T) : defaultValue; } /** diff --git a/extensions/ql-vscode/test/unit-tests/compare/differentPathsDifferentSourceSink.json b/extensions/ql-vscode/test/unit-tests/compare/differentPathsDifferentSourceSink.json new file mode 100644 index 00000000000..9188cde5156 --- /dev/null +++ b/extensions/ql-vscode/test/unit-tests/compare/differentPathsDifferentSourceSink.json @@ -0,0 +1,23905 @@ +{ + "result1": { + "ruleId": "java/polynomial-redos", + "ruleIndex": 0, + "rule": { + "id": "java/polynomial-redos", + "index": 0 + }, + "message": { + "text": "This [regular expression](1) that depends on a [user-provided value](2) may run slow on strings with many repetitions of '\\\\t'." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2855, + "startColumn": 39, + "endColumn": 43 + } + } + } + ], + "partialFingerprints": { + "primaryLocationLineHash": "5270db7557dfd174:1", + "primaryLocationStartColumnFingerprint": "30" + }, + "codeFlows": [ + { + "threadFlows": [ + { + "locations": [ + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 142, + "startColumn": 43, + "endColumn": 73 + } + }, + "message": { + "text": "getInputStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 0, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "source" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 147, + "startColumn": 32, + "endColumn": 43 + } + }, + "message": { + "text": "inputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 147, + "startColumn": 49, + "endColumn": 52 + } + }, + "message": { + "text": "buf [post update] : byte[]" + } + }, + "taxa": [ + { + "index": 9, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 148, + "startColumn": 32, + "endColumn": 35 + } + }, + "message": { + "text": "buf : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 148, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "baos [post update] : ByteArrayOutputStream" + } + }, + "taxa": [ + { + "index": 10, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 154, + "startColumn": 66, + "endColumn": 70 + } + }, + "message": { + "text": "baos : ByteArrayOutputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 154, + "startColumn": 66, + "endColumn": 84 + } + }, + "message": { + "text": "toByteArray(...) : byte[]" + } + }, + "taxa": [ + { + "index": 11, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 126, + "startColumn": 30, + "endColumn": 48 + } + }, + "message": { + "text": "inputOctets : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 128, + "startColumn": 22, + "endColumn": 33 + } + }, + "message": { + "text": "inputOctets : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 128, + "startColumn": 9, + "endColumn": 13 + } + }, + "message": { + "text": "this [post update] : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 154, + "startColumn": 44, + "endColumn": 85 + } + }, + "message": { + "text": "new XMLSignatureInput(...) : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 160, + "startColumn": 24, + "endColumn": 30 + } + }, + "message": { + "text": "result : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolver.java", + "uriBaseId": "%SRCROOT%", + "index": 47 + }, + "region": { + "startLine": 162, + "startColumn": 24, + "endColumn": 58 + } + }, + "message": { + "text": "engineResolveURI(...) : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java", + "uriBaseId": "%SRCROOT%", + "index": 48 + }, + "region": { + "startLine": 144, + "startColumn": 36, + "endColumn": 72 + } + }, + "message": { + "text": "resolve(...) : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java", + "uriBaseId": "%SRCROOT%", + "index": 48 + }, + "region": { + "startLine": 146, + "startColumn": 50, + "endColumn": 52 + } + }, + "message": { + "text": "in : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 37, + "startColumn": 34, + "endColumn": 54 + } + }, + "message": { + "text": "xi : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 40, + "startColumn": 15, + "endColumn": 17 + } + }, + "message": { + "text": "xi : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 243, + "startColumn": 24, + "endColumn": 38 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 249, + "startColumn": 62, + "endColumn": 67 + } + }, + "message": { + "text": "this <.field> : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 249, + "startColumn": 62, + "endColumn": 67 + } + }, + "message": { + "text": "bytes : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 249, + "startColumn": 37, + "endColumn": 68 + } + }, + "message": { + "text": "new ByteArrayInputStream(...) : ByteArrayInputStream" + } + }, + "taxa": [ + { + "index": 12, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 250, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "inputOctetStreamProxy : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 40, + "startColumn": 15, + "endColumn": 34 + } + }, + "message": { + "text": "getOctetStream(...) : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 40, + "startColumn": 9, + "endColumn": 73 + } + }, + "message": { + "text": "this [post update] : ApacheOctetStreamData" + } + }, + "taxa": [ + { + "index": 13, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java", + "uriBaseId": "%SRCROOT%", + "index": 48 + }, + "region": { + "startLine": 146, + "startColumn": 24, + "endColumn": 53 + } + }, + "message": { + "text": "new ApacheOctetStreamData(...) : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 416, + "startColumn": 20, + "endColumn": 52 + } + }, + "message": { + "text": "dereference(...) : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 423, + "startColumn": 16, + "endColumn": 20 + } + }, + "message": { + "text": "data : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 354, + "startColumn": 20, + "endColumn": 44 + } + }, + "message": { + "text": "dereference(...) : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 358, + "startColumn": 33, + "endColumn": 37 + } + }, + "message": { + "text": "data : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 426, + "startColumn": 30, + "endColumn": 51 + } + }, + "message": { + "text": "dereferencedData : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 481, + "startColumn": 27, + "endColumn": 48 + } + }, + "message": { + "text": "(...)... : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 481, + "startColumn": 26, + "endColumn": 66 + } + }, + "message": { + "text": "getOctetStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 14, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 137, + "startColumn": 30, + "endColumn": 58 + } + }, + "message": { + "text": "inputOctetStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 138, + "startColumn": 38, + "endColumn": 54 + } + }, + "message": { + "text": "inputOctetStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 138, + "startColumn": 9, + "endColumn": 13 + } + }, + "message": { + "text": "this [post update] : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 480, + "startColumn": 26, + "endLine": 481, + "endColumn": 67 + } + }, + "message": { + "text": "new XMLSignatureInput(...) : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 531, + "startColumn": 25, + "endColumn": 27 + } + }, + "message": { + "text": "xi : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 487, + "startColumn": 17, + "endColumn": 35 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 501, + "startColumn": 41, + "endColumn": 45 + } + }, + "message": { + "text": "this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.java", + "uriBaseId": "%SRCROOT%", + "index": 51 + }, + "region": { + "startLine": 137, + "startColumn": 36, + "endColumn": 59 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.java", + "uriBaseId": "%SRCROOT%", + "index": 51 + }, + "region": { + "startLine": 154, + "startColumn": 52, + "endColumn": 57 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 193, + "startColumn": 22, + "endColumn": 32 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 194, + "startColumn": 16, + "endColumn": 33 + } + }, + "message": { + "text": "this <.method> : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 214, + "startColumn": 22, + "endColumn": 32 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 226, + "startColumn": 13, + "endColumn": 29 + } + }, + "message": { + "text": "this <.method> : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 562, + "startColumn": 18, + "endColumn": 32 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 565, + "startColumn": 42, + "endColumn": 46 + } + }, + "message": { + "text": "this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 243, + "startColumn": 24, + "endColumn": 38 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 245, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "this <.field> : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 245, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "inputOctetStreamProxy : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 565, + "startColumn": 42, + "endColumn": 63 + } + }, + "message": { + "text": "getOctetStream(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java", + "uriBaseId": "%SRCROOT%", + "index": 52 + }, + "region": { + "startLine": 955, + "startColumn": 33, + "endColumn": 56 + } + }, + "message": { + "text": "inputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java", + "uriBaseId": "%SRCROOT%", + "index": 52 + }, + "region": { + "startLine": 957, + "startColumn": 36, + "endColumn": 47 + } + }, + "message": { + "text": "inputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/parser/XMLParserImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 53 + }, + "region": { + "startLine": 60, + "startColumn": 27, + "endColumn": 50 + } + }, + "message": { + "text": "inputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/parser/XMLParserImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 53 + }, + "region": { + "startLine": 69, + "startColumn": 46, + "endColumn": 57 + } + }, + "message": { + "text": "inputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/DocumentBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 54 + }, + "region": { + "startLine": 115, + "startColumn": 27, + "endColumn": 41 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/DocumentBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 54 + }, + "region": { + "startLine": 121, + "startColumn": 42, + "endColumn": 44 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 127, + "startColumn": 25, + "endColumn": 47 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 129, + "startColumn": 23, + "endColumn": 33 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 248, + "startColumn": 32, + "endColumn": 54 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 250, + "startColumn": 27, + "endColumn": 37 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 250, + "startColumn": 9, + "endColumn": 13 + } + }, + "message": { + "text": "this [post update] : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 129, + "startColumn": 9, + "endColumn": 34 + } + }, + "message": { + "text": "this <.method> [post update] : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/DocumentBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 54 + }, + "region": { + "startLine": 121, + "startColumn": 26, + "endColumn": 45 + } + }, + "message": { + "text": "new InputSource(...) : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/DocumentBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 54 + }, + "region": { + "startLine": 122, + "startColumn": 22, + "endColumn": 24 + } + }, + "message": { + "text": "in : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 56 + }, + "region": { + "startLine": 329, + "startColumn": 27, + "endColumn": 41 + } + }, + "message": { + "text": "is : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 56 + }, + "region": { + "startLine": 342, + "startColumn": 25, + "endColumn": 27 + } + }, + "message": { + "text": "is : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 235, + "startColumn": 23, + "endColumn": 46 + } + }, + "message": { + "text": "inputSource : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 244, + "startColumn": 42, + "endColumn": 53 + } + }, + "message": { + "text": "inputSource : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 264, + "startColumn": 24, + "endColumn": 37 + } + }, + "message": { + "text": "parameter this : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 266, + "startColumn": 16, + "endColumn": 26 + } + }, + "message": { + "text": "this <.field> : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 266, + "startColumn": 16, + "endColumn": 26 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 244, + "startColumn": 42, + "endColumn": 69 + } + }, + "message": { + "text": "getByteStream(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 234, + "startColumn": 31, + "endColumn": 53 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 235, + "startColumn": 23, + "endColumn": 33 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 235, + "startColumn": 9, + "endColumn": 20 + } + }, + "message": { + "text": "this <.field> [post update] : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 244, + "startColumn": 13, + "endColumn": 27 + } + }, + "message": { + "text": "xmlInputSource [post update] : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 247, + "startColumn": 19, + "endColumn": 33 + } + }, + "message": { + "text": "xmlInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLParser.java", + "uriBaseId": "%SRCROOT%", + "index": 59 + }, + "region": { + "startLine": 128, + "startColumn": 23, + "endColumn": 49 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLParser.java", + "uriBaseId": "%SRCROOT%", + "index": 59 + }, + "region": { + "startLine": 141, + "startColumn": 30, + "endColumn": 41 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java", + "uriBaseId": "%SRCROOT%", + "index": 60 + }, + "region": { + "startLine": 686, + "startColumn": 23, + "endColumn": 44 + } + }, + "message": { + "text": "source : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java", + "uriBaseId": "%SRCROOT%", + "index": 60 + }, + "region": { + "startLine": 695, + "startColumn": 28, + "endColumn": 34 + } + }, + "message": { + "text": "source : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java", + "uriBaseId": "%SRCROOT%", + "index": 60 + }, + "region": { + "startLine": 556, + "startColumn": 32, + "endColumn": 58 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java", + "uriBaseId": "%SRCROOT%", + "index": 60 + }, + "region": { + "startLine": 564, + "startColumn": 24, + "endColumn": 35 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java", + "uriBaseId": "%SRCROOT%", + "index": 60 + }, + "region": { + "startLine": 564, + "startColumn": 9, + "endColumn": 21 + } + }, + "message": { + "text": "this <.field> [post update] : SchemaParsingConfig [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java", + "uriBaseId": "%SRCROOT%", + "index": 60 + }, + "region": { + "startLine": 695, + "startColumn": 13, + "endColumn": 35 + } + }, + "message": { + "text": "this <.method> [post update] : SchemaParsingConfig [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java", + "uriBaseId": "%SRCROOT%", + "index": 60 + }, + "region": { + "startLine": 696, + "startColumn": 13, + "endColumn": 24 + } + }, + "message": { + "text": "this <.method> : SchemaParsingConfig [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java", + "uriBaseId": "%SRCROOT%", + "index": 60 + }, + "region": { + "startLine": 584, + "startColumn": 20, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : SchemaParsingConfig [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java", + "uriBaseId": "%SRCROOT%", + "index": 60 + }, + "region": { + "startLine": 593, + "startColumn": 70, + "endColumn": 82 + } + }, + "message": { + "text": "this <.field> : SchemaParsingConfig [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java", + "uriBaseId": "%SRCROOT%", + "index": 60 + }, + "region": { + "startLine": 593, + "startColumn": 70, + "endColumn": 82 + } + }, + "message": { + "text": "fInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLVersionDetector.java", + "uriBaseId": "%SRCROOT%", + "index": 61 + }, + "region": { + "startLine": 149, + "startColumn": 38, + "endColumn": 64 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLVersionDetector.java", + "uriBaseId": "%SRCROOT%", + "index": 61 + }, + "region": { + "startLine": 150, + "startColumn": 74, + "endColumn": 85 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 626, + "startColumn": 70, + "endColumn": 99 + } + }, + "message": { + "text": "xmlInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 648, + "startColumn": 22, + "endColumn": 36 + } + }, + "message": { + "text": "xmlInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 239, + "startColumn": 24, + "endColumn": 37 + } + }, + "message": { + "text": "parameter this : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 240, + "startColumn": 16, + "endColumn": 27 + } + }, + "message": { + "text": "this <.field> : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 240, + "startColumn": 16, + "endColumn": 27 + } + }, + "message": { + "text": "fByteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 648, + "startColumn": 22, + "endColumn": 52 + } + }, + "message": { + "text": "getByteStream(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 80, + "endColumn": 86 + } + }, + "message": { + "text": "stream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3003, + "startColumn": 38, + "endColumn": 52 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 28, + "endColumn": 30 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 13, + "endColumn": 25 + } + }, + "message": { + "text": "this <.field> [post update] : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 54, + "endColumn": 87 + } + }, + "message": { + "text": "new RewindableInputStream(...) : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 720, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "stream : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3089, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3099, + "startColumn": 24, + "endColumn": 36 + } + }, + "message": { + "text": "this <.field> : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3099, + "startColumn": 24, + "endColumn": 36 + } + }, + "message": { + "text": "fInputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3687, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3701, + "startColumn": 22, + "endLine": 3702, + "endColumn": 71 + } + }, + "message": { + "text": "this <.method> : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3649, + "startColumn": 20, + "endColumn": 24 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 30, + "endColumn": 35 + } + }, + "message": { + "text": "super : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 41, + "endColumn": 42 + } + }, + "message": { + "text": "b [post update] : byte[]" + } + }, + "taxa": [ + { + "index": 1, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1964, + "startColumn": 47, + "endColumn": 93 + } + }, + "message": { + "text": "new HttpInputStream(...) : HttpInputStream" + } + }, + "taxa": [ + { + "id": "AdditionalTaintStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1985, + "startColumn": 24, + "endColumn": 35 + } + }, + "message": { + "text": "inputStream : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1573, + "startColumn": 44, + "endColumn": 61 + } + }, + "message": { + "text": "getInputStream0(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 809, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "run(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 816, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 571, + "startColumn": 20, + "endColumn": 62 + } + }, + "message": { + "text": "executePrivileged(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 89, + "startColumn": 18, + "endColumn": 51 + } + }, + "message": { + "text": "doPrivileged(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 93, + "startColumn": 16, + "endColumn": 18 + } + }, + "message": { + "text": "is : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 75, + "startColumn": 31, + "endColumn": 56 + } + }, + "message": { + "text": "getResourceAsStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 76, + "startColumn": 20, + "endColumn": 22 + } + }, + "message": { + "text": "is : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 76, + "startColumn": 20, + "endColumn": 37 + } + }, + "message": { + "text": "readAllBytes(...) : byte[]" + } + }, + "taxa": [ + { + "index": 2, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 80, + "startColumn": 16, + "endColumn": 20 + } + }, + "message": { + "text": "data : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 561, + "startColumn": 22, + "endColumn": 42 + } + }, + "message": { + "text": "handleGetObject(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 574, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "obj : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 326, + "startColumn": 44, + "endColumn": 60 + } + }, + "message": { + "text": "getObject(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 328, + "startColumn": 45, + "endColumn": 50 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 328, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "values [post update] : TextAndMnemonicHashMap [] : byte[]" + } + }, + "taxa": [ + { + "index": 3, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 337, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "values : TextAndMnemonicHashMap [] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 39 + } + }, + "message": { + "text": "getResourceCache(...) : TextAndMnemonicHashMap [] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 48 + } + }, + "message": { + "text": "get(...) : byte[]" + } + }, + "taxa": [ + { + "index": 4, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 42, + "endColumn": 74 + } + }, + "message": { + "text": "getFromResourceBundle(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 16, + "endColumn": 74 + } + }, + "message": { + "text": "...?...:... : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/rtf/MockAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 14 + }, + "region": { + "startLine": 67, + "startColumn": 16, + "endColumn": 33 + } + }, + "message": { + "text": "get(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 151, + "startColumn": 25, + "endColumn": 50 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 154, + "startColumn": 16, + "endColumn": 21 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 328, + "startColumn": 28, + "endColumn": 45 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 336, + "startColumn": 16, + "endColumn": 17 + } + }, + "message": { + "text": "s : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1304, + "startColumn": 27, + "endColumn": 41 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1336, + "startColumn": 39, + "endColumn": 42 + } + }, + "message": { + "text": "arg : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 311, + "startColumn": 45, + "endColumn": 55 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 313, + "startColumn": 22, + "endColumn": 25 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 313, + "startColumn": 9, + "endColumn": 14 + } + }, + "message": { + "text": "super [post update] : StringBuffer" + } + }, + "taxa": [ + { + "index": 5, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1336, + "startColumn": 25, + "endColumn": 31 + } + }, + "message": { + "text": "result [post update] : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1364, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 885, + "startColumn": 16, + "endColumn": 66 + } + }, + "message": { + "text": "subformat(...) : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/Format.java", + "uriBaseId": "%SRCROOT%", + "index": 18 + }, + "region": { + "startLine": 159, + "startColumn": 16, + "endColumn": 69 + } + }, + "message": { + "text": "format(...) : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 713, + "startColumn": 32, + "endColumn": 40 + } + }, + "message": { + "text": "parameter this : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 717, + "startColumn": 27, + "endColumn": 40 + } + }, + "message": { + "text": "toStringCache : String" + } + }, + "taxa": [ + { + "id": "entrypointFieldStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 717, + "startColumn": 16, + "endColumn": 41 + } + }, + "message": { + "text": "new String(...) : String" + } + }, + "taxa": [ + { + "index": 6, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/Format.java", + "uriBaseId": "%SRCROOT%", + "index": 18 + }, + "region": { + "startLine": 159, + "startColumn": 16, + "endColumn": 80 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 860, + "startColumn": 16, + "endColumn": 38 + } + }, + "message": { + "text": "format(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/dv/DatatypeException.java", + "uriBaseId": "%SRCROOT%", + "index": 19 + }, + "region": { + "startLine": 102, + "startColumn": 23, + "endColumn": 64 + } + }, + "message": { + "text": "format(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/dv/DatatypeException.java", + "uriBaseId": "%SRCROOT%", + "index": 19 + }, + "region": { + "startLine": 109, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "msg : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/FactoryConfigurationError.java", + "uriBaseId": "%SRCROOT%", + "index": 20 + }, + "region": { + "startLine": 111, + "startColumn": 20, + "endColumn": 42 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "make/jdk/src/classes/build/tools/module/ModuleInfoExtraTest.java", + "uriBaseId": "%SRCROOT%", + "index": 21 + }, + "region": { + "startLine": 254, + "startColumn": 18, + "endColumn": 32 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2854, + "startColumn": 20, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2855, + "startColumn": 39, + "endColumn": 43 + } + }, + "message": { + "text": "this" + } + } + } + ] + } + ] + }, + { + "threadFlows": [ + { + "locations": [ + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 142, + "startColumn": 43, + "endColumn": 73 + } + }, + "message": { + "text": "getInputStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 0, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "source" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 147, + "startColumn": 32, + "endColumn": 43 + } + }, + "message": { + "text": "inputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 147, + "startColumn": 49, + "endColumn": 52 + } + }, + "message": { + "text": "buf [post update] : byte[]" + } + }, + "taxa": [ + { + "index": 9, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 148, + "startColumn": 32, + "endColumn": 35 + } + }, + "message": { + "text": "buf : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 148, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "baos [post update] : ByteArrayOutputStream" + } + }, + "taxa": [ + { + "index": 10, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 154, + "startColumn": 66, + "endColumn": 70 + } + }, + "message": { + "text": "baos : ByteArrayOutputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 154, + "startColumn": 66, + "endColumn": 84 + } + }, + "message": { + "text": "toByteArray(...) : byte[]" + } + }, + "taxa": [ + { + "index": 11, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 126, + "startColumn": 30, + "endColumn": 48 + } + }, + "message": { + "text": "inputOctets : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 128, + "startColumn": 22, + "endColumn": 33 + } + }, + "message": { + "text": "inputOctets : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 128, + "startColumn": 9, + "endColumn": 13 + } + }, + "message": { + "text": "this [post update] : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 154, + "startColumn": 44, + "endColumn": 85 + } + }, + "message": { + "text": "new XMLSignatureInput(...) : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 160, + "startColumn": 24, + "endColumn": 30 + } + }, + "message": { + "text": "result : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolver.java", + "uriBaseId": "%SRCROOT%", + "index": 47 + }, + "region": { + "startLine": 162, + "startColumn": 24, + "endColumn": 58 + } + }, + "message": { + "text": "engineResolveURI(...) : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java", + "uriBaseId": "%SRCROOT%", + "index": 48 + }, + "region": { + "startLine": 144, + "startColumn": 36, + "endColumn": 72 + } + }, + "message": { + "text": "resolve(...) : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java", + "uriBaseId": "%SRCROOT%", + "index": 48 + }, + "region": { + "startLine": 148, + "startColumn": 46, + "endColumn": 48 + } + }, + "message": { + "text": "in : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java", + "uriBaseId": "%SRCROOT%", + "index": 62 + }, + "region": { + "startLine": 43, + "startColumn": 30, + "endColumn": 50 + } + }, + "message": { + "text": "xi : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java", + "uriBaseId": "%SRCROOT%", + "index": 62 + }, + "region": { + "startLine": 44, + "startColumn": 19, + "endColumn": 21 + } + }, + "message": { + "text": "xi : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java", + "uriBaseId": "%SRCROOT%", + "index": 62 + }, + "region": { + "startLine": 44, + "startColumn": 9, + "endColumn": 13 + } + }, + "message": { + "text": "this [post update] : ApacheNodeSetData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java", + "uriBaseId": "%SRCROOT%", + "index": 48 + }, + "region": { + "startLine": 148, + "startColumn": 24, + "endColumn": 49 + } + }, + "message": { + "text": "new ApacheNodeSetData(...) : ApacheNodeSetData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 416, + "startColumn": 20, + "endColumn": 52 + } + }, + "message": { + "text": "dereference(...) : ApacheNodeSetData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 423, + "startColumn": 16, + "endColumn": 20 + } + }, + "message": { + "text": "data : ApacheNodeSetData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 354, + "startColumn": 20, + "endColumn": 44 + } + }, + "message": { + "text": "dereference(...) : ApacheNodeSetData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 358, + "startColumn": 33, + "endColumn": 37 + } + }, + "message": { + "text": "data : ApacheNodeSetData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 426, + "startColumn": 30, + "endColumn": 51 + } + }, + "message": { + "text": "dereferencedData : ApacheNodeSetData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 456, + "startColumn": 48, + "endColumn": 52 + } + }, + "message": { + "text": "data : ApacheNodeSetData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 63 + }, + "region": { + "startLine": 167, + "startColumn": 27, + "endColumn": 36 + } + }, + "message": { + "text": "data : ApacheNodeSetData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 63 + }, + "region": { + "startLine": 170, + "startColumn": 30, + "endColumn": 34 + } + }, + "message": { + "text": "data : ApacheNodeSetData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 185, + "startColumn": 27, + "endColumn": 36 + } + }, + "message": { + "text": "data : ApacheNodeSetData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 214, + "startColumn": 19, + "endColumn": 35 + } + }, + "message": { + "text": "(...)... : ApacheNodeSetData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java", + "uriBaseId": "%SRCROOT%", + "index": 62 + }, + "region": { + "startLine": 62, + "startColumn": 30, + "endColumn": 50 + } + }, + "message": { + "text": "parameter this : ApacheNodeSetData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java", + "uriBaseId": "%SRCROOT%", + "index": 62 + }, + "region": { + "startLine": 63, + "startColumn": 16, + "endColumn": 18 + } + }, + "message": { + "text": "this <.field> : ApacheNodeSetData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java", + "uriBaseId": "%SRCROOT%", + "index": 62 + }, + "region": { + "startLine": 63, + "startColumn": 16, + "endColumn": 18 + } + }, + "message": { + "text": "xi : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 214, + "startColumn": 18, + "endColumn": 59 + } + }, + "message": { + "text": "getXMLSignatureInput(...) : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 241, + "startColumn": 51, + "endColumn": 53 + } + }, + "message": { + "text": "in : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 324, + "startColumn": 9, + "endColumn": 32 + } + }, + "message": { + "text": "input : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 330, + "startColumn": 58, + "endColumn": 63 + } + }, + "message": { + "text": "input : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformEnvelopedSignature.java", + "uriBaseId": "%SRCROOT%", + "index": 66 + }, + "region": { + "startLine": 59, + "startColumn": 9, + "endColumn": 32 + } + }, + "message": { + "text": "input : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformEnvelopedSignature.java", + "uriBaseId": "%SRCROOT%", + "index": 66 + }, + "region": { + "startLine": 81, + "startColumn": 16, + "endColumn": 21 + } + }, + "message": { + "text": "input : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 330, + "startColumn": 22, + "endColumn": 109 + } + }, + "message": { + "text": "enginePerformTransform(...) : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 341, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 241, + "startColumn": 18, + "endColumn": 66 + } + }, + "message": { + "text": "performTransform(...) : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 243, + "startColumn": 50, + "endColumn": 52 + } + }, + "message": { + "text": "in : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 37, + "startColumn": 34, + "endColumn": 54 + } + }, + "message": { + "text": "xi : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 40, + "startColumn": 15, + "endColumn": 17 + } + }, + "message": { + "text": "xi : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 243, + "startColumn": 24, + "endColumn": 38 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 248, + "startColumn": 13, + "endColumn": 18 + } + }, + "message": { + "text": "this <.field> : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 248, + "startColumn": 13, + "endColumn": 18 + } + }, + "message": { + "text": "bytes : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 249, + "startColumn": 62, + "endColumn": 67 + } + }, + "message": { + "text": "bytes : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 249, + "startColumn": 37, + "endColumn": 68 + } + }, + "message": { + "text": "new ByteArrayInputStream(...) : ByteArrayInputStream" + } + }, + "taxa": [ + { + "index": 12, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 249, + "startColumn": 13, + "endColumn": 34 + } + }, + "message": { + "text": "this <.field> [post update] : XMLSignatureInput [inputOctetStreamProxy] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 250, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "this <.field> : XMLSignatureInput [inputOctetStreamProxy] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 250, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "inputOctetStreamProxy : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 40, + "startColumn": 15, + "endColumn": 34 + } + }, + "message": { + "text": "getOctetStream(...) : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 40, + "startColumn": 9, + "endColumn": 73 + } + }, + "message": { + "text": "this [post update] : ApacheOctetStreamData [octetStream] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 243, + "startColumn": 24, + "endColumn": 53 + } + }, + "message": { + "text": "new ApacheOctetStreamData(...) : ApacheOctetStreamData [octetStream] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 63 + }, + "region": { + "startLine": 170, + "startColumn": 16, + "endColumn": 43 + } + }, + "message": { + "text": "transform(...) : ApacheOctetStreamData [octetStream] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 456, + "startColumn": 28, + "endColumn": 66 + } + }, + "message": { + "text": "transform(...) : ApacheOctetStreamData [octetStream] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 456, + "startColumn": 48, + "endColumn": 52 + } + }, + "message": { + "text": "data : ApacheOctetStreamData [octetStream] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 63 + }, + "region": { + "startLine": 167, + "startColumn": 27, + "endColumn": 36 + } + }, + "message": { + "text": "data : ApacheOctetStreamData [octetStream] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 63 + }, + "region": { + "startLine": 170, + "startColumn": 30, + "endColumn": 34 + } + }, + "message": { + "text": "data : ApacheOctetStreamData [octetStream] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 185, + "startColumn": 27, + "endColumn": 36 + } + }, + "message": { + "text": "data : ApacheOctetStreamData [octetStream] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 231, + "startColumn": 23, + "endColumn": 44 + } + }, + "message": { + "text": "(...)... : ApacheOctetStreamData [octetStream] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/javax/xml/crypto/OctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 67 + }, + "region": { + "startLine": 83, + "startColumn": 24, + "endColumn": 38 + } + }, + "message": { + "text": "parameter this : ApacheOctetStreamData [octetStream] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/javax/xml/crypto/OctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 67 + }, + "region": { + "startLine": 84, + "startColumn": 16, + "endColumn": 27 + } + }, + "message": { + "text": "this <.field> : ApacheOctetStreamData [octetStream] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/javax/xml/crypto/OctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 67 + }, + "region": { + "startLine": 84, + "startColumn": 16, + "endColumn": 27 + } + }, + "message": { + "text": "octetStream : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 231, + "startColumn": 22, + "endColumn": 62 + } + }, + "message": { + "text": "getOctetStream(...) : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 137, + "startColumn": 30, + "endColumn": 58 + } + }, + "message": { + "text": "inputOctetStream : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 138, + "startColumn": 38, + "endColumn": 54 + } + }, + "message": { + "text": "inputOctetStream : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 138, + "startColumn": 9, + "endColumn": 13 + } + }, + "message": { + "text": "this [post update] : XMLSignatureInput [inputOctetStreamProxy] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 230, + "startColumn": 22, + "endLine": 231, + "endColumn": 63 + } + }, + "message": { + "text": "new XMLSignatureInput(...) : XMLSignatureInput [inputOctetStreamProxy] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 241, + "startColumn": 51, + "endColumn": 53 + } + }, + "message": { + "text": "in : XMLSignatureInput [inputOctetStreamProxy] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 324, + "startColumn": 9, + "endColumn": 32 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 330, + "startColumn": 58, + "endColumn": 63 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformEnvelopedSignature.java", + "uriBaseId": "%SRCROOT%", + "index": 66 + }, + "region": { + "startLine": 59, + "startColumn": 9, + "endColumn": 32 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformEnvelopedSignature.java", + "uriBaseId": "%SRCROOT%", + "index": 66 + }, + "region": { + "startLine": 81, + "startColumn": 16, + "endColumn": 21 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 330, + "startColumn": 22, + "endColumn": 109 + } + }, + "message": { + "text": "enginePerformTransform(...) : XMLSignatureInput [inputOctetStreamProxy] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 341, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : XMLSignatureInput [inputOctetStreamProxy] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 241, + "startColumn": 18, + "endColumn": 66 + } + }, + "message": { + "text": "performTransform(...) : XMLSignatureInput [inputOctetStreamProxy] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 243, + "startColumn": 50, + "endColumn": 52 + } + }, + "message": { + "text": "in : XMLSignatureInput [inputOctetStreamProxy] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 37, + "startColumn": 34, + "endColumn": 54 + } + }, + "message": { + "text": "xi : XMLSignatureInput [inputOctetStreamProxy] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 40, + "startColumn": 15, + "endColumn": 17 + } + }, + "message": { + "text": "xi : XMLSignatureInput [inputOctetStreamProxy] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 243, + "startColumn": 24, + "endColumn": 38 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [inputOctetStreamProxy] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 245, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "this <.field> : XMLSignatureInput [inputOctetStreamProxy] : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 245, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "inputOctetStreamProxy : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 40, + "startColumn": 15, + "endColumn": 34 + } + }, + "message": { + "text": "getOctetStream(...) : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 40, + "startColumn": 9, + "endColumn": 73 + } + }, + "message": { + "text": "this [post update] : ApacheOctetStreamData" + } + }, + "taxa": [ + { + "index": 13, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 243, + "startColumn": 24, + "endColumn": 53 + } + }, + "message": { + "text": "new ApacheOctetStreamData(...) : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 63 + }, + "region": { + "startLine": 170, + "startColumn": 16, + "endColumn": 43 + } + }, + "message": { + "text": "transform(...) : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 456, + "startColumn": 28, + "endColumn": 66 + } + }, + "message": { + "text": "transform(...) : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 456, + "startColumn": 48, + "endColumn": 52 + } + }, + "message": { + "text": "data : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 63 + }, + "region": { + "startLine": 167, + "startColumn": 27, + "endColumn": 36 + } + }, + "message": { + "text": "data : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 63 + }, + "region": { + "startLine": 170, + "startColumn": 30, + "endColumn": 34 + } + }, + "message": { + "text": "data : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 185, + "startColumn": 27, + "endColumn": 36 + } + }, + "message": { + "text": "data : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 231, + "startColumn": 23, + "endColumn": 44 + } + }, + "message": { + "text": "(...)... : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 231, + "startColumn": 22, + "endColumn": 62 + } + }, + "message": { + "text": "getOctetStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 14, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 137, + "startColumn": 30, + "endColumn": 58 + } + }, + "message": { + "text": "inputOctetStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 138, + "startColumn": 38, + "endColumn": 54 + } + }, + "message": { + "text": "inputOctetStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 138, + "startColumn": 9, + "endColumn": 13 + } + }, + "message": { + "text": "this [post update] : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 230, + "startColumn": 22, + "endLine": 231, + "endColumn": 63 + } + }, + "message": { + "text": "new XMLSignatureInput(...) : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 241, + "startColumn": 51, + "endColumn": 53 + } + }, + "message": { + "text": "in : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 324, + "startColumn": 9, + "endColumn": 32 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 330, + "startColumn": 58, + "endColumn": 63 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformEnvelopedSignature.java", + "uriBaseId": "%SRCROOT%", + "index": 66 + }, + "region": { + "startLine": 59, + "startColumn": 9, + "endColumn": 32 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformEnvelopedSignature.java", + "uriBaseId": "%SRCROOT%", + "index": 66 + }, + "region": { + "startLine": 81, + "startColumn": 16, + "endColumn": 21 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 330, + "startColumn": 22, + "endColumn": 109 + } + }, + "message": { + "text": "enginePerformTransform(...) : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 341, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 241, + "startColumn": 18, + "endColumn": 66 + } + }, + "message": { + "text": "performTransform(...) : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 245, + "startColumn": 46, + "endColumn": 48 + } + }, + "message": { + "text": "in : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java", + "uriBaseId": "%SRCROOT%", + "index": 62 + }, + "region": { + "startLine": 43, + "startColumn": 30, + "endColumn": 50 + } + }, + "message": { + "text": "xi : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java", + "uriBaseId": "%SRCROOT%", + "index": 62 + }, + "region": { + "startLine": 44, + "startColumn": 19, + "endColumn": 21 + } + }, + "message": { + "text": "xi : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheNodeSetData.java", + "uriBaseId": "%SRCROOT%", + "index": 62 + }, + "region": { + "startLine": 44, + "startColumn": 9, + "endColumn": 13 + } + }, + "message": { + "text": "this [post update] : ApacheNodeSetData [xi, inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 245, + "startColumn": 24, + "endColumn": 49 + } + }, + "message": { + "text": "new ApacheNodeSetData(...) : ApacheNodeSetData [xi, inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 63 + }, + "region": { + "startLine": 170, + "startColumn": 16, + "endColumn": 43 + } + }, + "message": { + "text": "transform(...) : ApacheNodeSetData [xi, inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 63 + }, + "region": { + "startLine": 167, + "startColumn": 27, + "endColumn": 36 + } + }, + "message": { + "text": "data : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 63 + }, + "region": { + "startLine": 170, + "startColumn": 30, + "endColumn": 34 + } + }, + "message": { + "text": "data : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 185, + "startColumn": 27, + "endColumn": 36 + } + }, + "message": { + "text": "data : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 231, + "startColumn": 23, + "endColumn": 44 + } + }, + "message": { + "text": "(...)... : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 231, + "startColumn": 22, + "endColumn": 62 + } + }, + "message": { + "text": "getOctetStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 14, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 137, + "startColumn": 30, + "endColumn": 58 + } + }, + "message": { + "text": "inputOctetStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 138, + "startColumn": 38, + "endColumn": 54 + } + }, + "message": { + "text": "inputOctetStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 138, + "startColumn": 9, + "endColumn": 13 + } + }, + "message": { + "text": "this [post update] : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 230, + "startColumn": 22, + "endLine": 231, + "endColumn": 63 + } + }, + "message": { + "text": "new XMLSignatureInput(...) : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheCanonicalizer.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 241, + "startColumn": 51, + "endColumn": 53 + } + }, + "message": { + "text": "in : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 324, + "startColumn": 9, + "endColumn": 32 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 330, + "startColumn": 58, + "endColumn": 63 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformEnvelopedSignature.java", + "uriBaseId": "%SRCROOT%", + "index": 66 + }, + "region": { + "startLine": 59, + "startColumn": 9, + "endColumn": 32 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformEnvelopedSignature.java", + "uriBaseId": "%SRCROOT%", + "index": 66 + }, + "region": { + "startLine": 77, + "startColumn": 13, + "endColumn": 18 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 541, + "startColumn": 17, + "endColumn": 30 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 543, + "startColumn": 13, + "endColumn": 29 + } + }, + "message": { + "text": "this <.method> : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 562, + "startColumn": 18, + "endColumn": 32 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 565, + "startColumn": 42, + "endColumn": 46 + } + }, + "message": { + "text": "this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 243, + "startColumn": 24, + "endColumn": 38 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 244, + "startColumn": 13, + "endColumn": 34 + } + }, + "message": { + "text": "this <.field> : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 244, + "startColumn": 13, + "endColumn": 34 + } + }, + "message": { + "text": "inputOctetStreamProxy : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 245, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "inputOctetStreamProxy : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 565, + "startColumn": 42, + "endColumn": 63 + } + }, + "message": { + "text": "getOctetStream(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java", + "uriBaseId": "%SRCROOT%", + "index": 52 + }, + "region": { + "startLine": 955, + "startColumn": 33, + "endColumn": 56 + } + }, + "message": { + "text": "inputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java", + "uriBaseId": "%SRCROOT%", + "index": 52 + }, + "region": { + "startLine": 957, + "startColumn": 36, + "endColumn": 47 + } + }, + "message": { + "text": "inputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/parser/XMLParserImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 53 + }, + "region": { + "startLine": 60, + "startColumn": 27, + "endColumn": 50 + } + }, + "message": { + "text": "inputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/parser/XMLParserImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 53 + }, + "region": { + "startLine": 74, + "startColumn": 50, + "endColumn": 61 + } + }, + "message": { + "text": "inputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/DocumentBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 54 + }, + "region": { + "startLine": 115, + "startColumn": 27, + "endColumn": 41 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/DocumentBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 54 + }, + "region": { + "startLine": 121, + "startColumn": 42, + "endColumn": 44 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 127, + "startColumn": 25, + "endColumn": 47 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 129, + "startColumn": 23, + "endColumn": 33 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 248, + "startColumn": 32, + "endColumn": 54 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 250, + "startColumn": 27, + "endColumn": 37 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 250, + "startColumn": 9, + "endColumn": 13 + } + }, + "message": { + "text": "this [post update] : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 129, + "startColumn": 9, + "endColumn": 34 + } + }, + "message": { + "text": "this <.method> [post update] : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/DocumentBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 54 + }, + "region": { + "startLine": 121, + "startColumn": 26, + "endColumn": 45 + } + }, + "message": { + "text": "new InputSource(...) : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/DocumentBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 54 + }, + "region": { + "startLine": 122, + "startColumn": 22, + "endColumn": 24 + } + }, + "message": { + "text": "in : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 56 + }, + "region": { + "startLine": 329, + "startColumn": 27, + "endColumn": 41 + } + }, + "message": { + "text": "is : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 56 + }, + "region": { + "startLine": 342, + "startColumn": 25, + "endColumn": 27 + } + }, + "message": { + "text": "is : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 235, + "startColumn": 23, + "endColumn": 46 + } + }, + "message": { + "text": "inputSource : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 244, + "startColumn": 42, + "endColumn": 53 + } + }, + "message": { + "text": "inputSource : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 264, + "startColumn": 24, + "endColumn": 37 + } + }, + "message": { + "text": "parameter this : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 266, + "startColumn": 16, + "endColumn": 26 + } + }, + "message": { + "text": "this <.field> : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 266, + "startColumn": 16, + "endColumn": 26 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 244, + "startColumn": 42, + "endColumn": 69 + } + }, + "message": { + "text": "getByteStream(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 234, + "startColumn": 31, + "endColumn": 53 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 235, + "startColumn": 23, + "endColumn": 33 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 235, + "startColumn": 9, + "endColumn": 20 + } + }, + "message": { + "text": "this <.field> [post update] : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 244, + "startColumn": 13, + "endColumn": 27 + } + }, + "message": { + "text": "xmlInputSource [post update] : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 247, + "startColumn": 19, + "endColumn": 33 + } + }, + "message": { + "text": "xmlInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLParser.java", + "uriBaseId": "%SRCROOT%", + "index": 59 + }, + "region": { + "startLine": 128, + "startColumn": 23, + "endColumn": 49 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLParser.java", + "uriBaseId": "%SRCROOT%", + "index": 59 + }, + "region": { + "startLine": 141, + "startColumn": 30, + "endColumn": 41 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 68 + }, + "region": { + "startLine": 598, + "startColumn": 23, + "endColumn": 44 + } + }, + "message": { + "text": "source : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 68 + }, + "region": { + "startLine": 607, + "startColumn": 28, + "endColumn": 34 + } + }, + "message": { + "text": "source : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 68 + }, + "region": { + "startLine": 491, + "startColumn": 32, + "endColumn": 58 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 68 + }, + "region": { + "startLine": 499, + "startColumn": 24, + "endColumn": 35 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 68 + }, + "region": { + "startLine": 499, + "startColumn": 9, + "endColumn": 21 + } + }, + "message": { + "text": "this <.field> [post update] : DTDConfiguration [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 68 + }, + "region": { + "startLine": 607, + "startColumn": 13, + "endColumn": 35 + } + }, + "message": { + "text": "this <.method> [post update] : DTDConfiguration [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 68 + }, + "region": { + "startLine": 608, + "startColumn": 13, + "endColumn": 24 + } + }, + "message": { + "text": "this <.method> : DTDConfiguration [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 68 + }, + "region": { + "startLine": 519, + "startColumn": 20, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : DTDConfiguration [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 68 + }, + "region": { + "startLine": 526, + "startColumn": 41, + "endColumn": 53 + } + }, + "message": { + "text": "this <.field> : DTDConfiguration [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DTDConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 68 + }, + "region": { + "startLine": 526, + "startColumn": 41, + "endColumn": 53 + } + }, + "message": { + "text": "fInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 69 + }, + "region": { + "startLine": 253, + "startColumn": 32, + "endColumn": 58 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLDocumentScannerImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 69 + }, + "region": { + "startLine": 256, + "startColumn": 44, + "endColumn": 55 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 1347, + "startColumn": 37, + "endColumn": 66 + } + }, + "message": { + "text": "xmlInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 1349, + "startColumn": 39, + "endColumn": 53 + } + }, + "message": { + "text": "xmlInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 1394, + "startColumn": 13, + "endColumn": 42 + } + }, + "message": { + "text": "xmlInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 1398, + "startColumn": 58, + "endColumn": 72 + } + }, + "message": { + "text": "xmlInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 626, + "startColumn": 70, + "endColumn": 99 + } + }, + "message": { + "text": "xmlInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 648, + "startColumn": 22, + "endColumn": 36 + } + }, + "message": { + "text": "xmlInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 239, + "startColumn": 24, + "endColumn": 37 + } + }, + "message": { + "text": "parameter this : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 240, + "startColumn": 16, + "endColumn": 27 + } + }, + "message": { + "text": "this <.field> : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 240, + "startColumn": 16, + "endColumn": 27 + } + }, + "message": { + "text": "fByteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 648, + "startColumn": 22, + "endColumn": 52 + } + }, + "message": { + "text": "getByteStream(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 80, + "endColumn": 86 + } + }, + "message": { + "text": "stream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3003, + "startColumn": 38, + "endColumn": 52 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 28, + "endColumn": 30 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 13, + "endColumn": 25 + } + }, + "message": { + "text": "this <.field> [post update] : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 54, + "endColumn": 87 + } + }, + "message": { + "text": "new RewindableInputStream(...) : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 726, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "stream : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3089, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3118, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "this <.field> : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3118, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "fInputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3687, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3692, + "startColumn": 17, + "endColumn": 27 + } + }, + "message": { + "text": "this <.field> : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3701, + "startColumn": 22, + "endLine": 3702, + "endColumn": 71 + } + }, + "message": { + "text": "this <.method> : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3649, + "startColumn": 20, + "endColumn": 24 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 30, + "endColumn": 35 + } + }, + "message": { + "text": "super : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 41, + "endColumn": 42 + } + }, + "message": { + "text": "b [post update] : byte[]" + } + }, + "taxa": [ + { + "index": 1, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1971, + "startColumn": 35, + "endColumn": 67 + } + }, + "message": { + "text": "new HttpInputStream(...) : HttpInputStream" + } + }, + "taxa": [ + { + "id": "AdditionalTaintStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1985, + "startColumn": 24, + "endColumn": 35 + } + }, + "message": { + "text": "inputStream : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1581, + "startColumn": 24, + "endColumn": 41 + } + }, + "message": { + "text": "getInputStream0(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/net/URL.java", + "uriBaseId": "%SRCROOT%", + "index": 22 + }, + "region": { + "startLine": 1317, + "startColumn": 16, + "endColumn": 49 + } + }, + "message": { + "text": "getInputStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 586, + "startColumn": 43, + "endColumn": 59 + } + }, + "message": { + "text": "openStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 587, + "startColumn": 64, + "endColumn": 66 + } + }, + "message": { + "text": "in : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 587, + "startColumn": 42, + "endColumn": 79 + } + }, + "message": { + "text": "new InputStreamReader(...) : InputStreamReader" + } + }, + "taxa": [ + { + "index": 7, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 591, + "startColumn": 37, + "endColumn": 43 + } + }, + "message": { + "text": "reader : InputStreamReader" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/Reader.java", + "uriBaseId": "%SRCROOT%", + "index": 24 + }, + "region": { + "startLine": 264, + "startColumn": 16, + "endColumn": 20 + } + }, + "message": { + "text": "parameter this : InputStreamReader" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/Reader.java", + "uriBaseId": "%SRCROOT%", + "index": 24 + }, + "region": { + "startLine": 265, + "startColumn": 16, + "endColumn": 42 + } + }, + "message": { + "text": "this <.method> : InputStreamReader" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/Reader.java", + "uriBaseId": "%SRCROOT%", + "index": 24 + }, + "region": { + "startLine": 265, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "cbuf [post update] : char[]" + } + }, + "taxa": [ + { + "index": 8, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 591, + "startColumn": 49, + "endColumn": 52 + } + }, + "message": { + "text": "buf [post update] : char[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 592, + "startColumn": 39, + "endColumn": 42 + } + }, + "message": { + "text": "buf : char[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 232, + "startColumn": 33, + "endColumn": 43 + } + }, + "message": { + "text": "str : char[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 233, + "startColumn": 22, + "endColumn": 25 + } + }, + "message": { + "text": "str : char[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 233, + "startColumn": 9, + "endColumn": 14 + } + }, + "message": { + "text": "super [post update] : StringBuilder" + } + }, + "taxa": [ + { + "index": 5, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 592, + "startColumn": 29, + "endColumn": 31 + } + }, + "message": { + "text": "sb [post update] : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 595, + "startColumn": 34, + "endColumn": 36 + } + }, + "message": { + "text": "sb : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 451, + "startColumn": 19, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 453, + "startColumn": 27, + "endColumn": 31 + } + }, + "message": { + "text": "this : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1486, + "startColumn": 19, + "endColumn": 40 + } + }, + "message": { + "text": "builder : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1487, + "startColumn": 14, + "endColumn": 21 + } + }, + "message": { + "text": "builder : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1487, + "startColumn": 9, + "endColumn": 29 + } + }, + "message": { + "text": "this [post update] : String" + } + }, + "taxa": [ + { + "index": 6, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 453, + "startColumn": 16, + "endColumn": 32 + } + }, + "message": { + "text": "new String(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 595, + "startColumn": 34, + "endColumn": 47 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 604, + "startColumn": 40, + "endColumn": 43 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2718, + "startColumn": 19, + "endColumn": 28 + } + }, + "message": { + "text": "parameter this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2722, + "startColumn": 20, + "endColumn": 24 + } + }, + "message": { + "text": "this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 604, + "startColumn": 40, + "endColumn": 60 + } + }, + "message": { + "text": "substring(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 778, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "run(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 785, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 319, + "startColumn": 16, + "endColumn": 76 + } + }, + "message": { + "text": "executePrivileged(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/security/provider/SubjectCodeSource.java", + "uriBaseId": "%SRCROOT%", + "index": 26 + }, + "region": { + "startLine": 369, + "startColumn": 25, + "endLine": 374, + "endColumn": 27 + } + }, + "message": { + "text": "doPrivileged(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/security/provider/SubjectCodeSource.java", + "uriBaseId": "%SRCROOT%", + "index": 26 + }, + "region": { + "startLine": 386, + "startColumn": 16, + "endColumn": 24 + } + }, + "message": { + "text": "returnMe : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 4230, + "startColumn": 41, + "endColumn": 55 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 4230, + "startColumn": 16, + "endColumn": 55 + } + }, + "message": { + "text": "...?...:... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 173, + "startColumn": 23, + "endColumn": 42 + } + }, + "message": { + "text": "valueOf(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 178, + "startColumn": 33, + "endColumn": 43 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 179, + "startColumn": 22, + "endColumn": 25 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 179, + "startColumn": 9, + "endColumn": 14 + } + }, + "message": { + "text": "super [post update] : StringBuilder" + } + }, + "taxa": [ + { + "index": 5, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 173, + "startColumn": 16, + "endColumn": 43 + } + }, + "message": { + "text": "this <.method> [post update] : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/BasicAttribute.java", + "uriBaseId": "%SRCROOT%", + "index": 27 + }, + "region": { + "startLine": 221, + "startColumn": 17, + "endColumn": 23 + } + }, + "message": { + "text": "answer [post update] : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/BasicAttribute.java", + "uriBaseId": "%SRCROOT%", + "index": 27 + }, + "region": { + "startLine": 225, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "answer : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 451, + "startColumn": 19, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 453, + "startColumn": 27, + "endColumn": 31 + } + }, + "message": { + "text": "this : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1486, + "startColumn": 19, + "endColumn": 40 + } + }, + "message": { + "text": "builder : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1487, + "startColumn": 14, + "endColumn": 21 + } + }, + "message": { + "text": "builder : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1487, + "startColumn": 9, + "endColumn": 29 + } + }, + "message": { + "text": "this [post update] : String" + } + }, + "taxa": [ + { + "index": 6, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 453, + "startColumn": 16, + "endColumn": 32 + } + }, + "message": { + "text": "new String(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/BasicAttribute.java", + "uriBaseId": "%SRCROOT%", + "index": 27 + }, + "region": { + "startLine": 225, + "startColumn": 16, + "endColumn": 33 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/ModificationItem.java", + "uriBaseId": "%SRCROOT%", + "index": 28 + }, + "region": { + "startLine": 118, + "startColumn": 41, + "endColumn": 56 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/ModificationItem.java", + "uriBaseId": "%SRCROOT%", + "index": 28 + }, + "region": { + "startLine": 118, + "startColumn": 21, + "endColumn": 56 + } + }, + "message": { + "text": "... + ... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/AttributeModificationException.java", + "uriBaseId": "%SRCROOT%", + "index": 29 + }, + "region": { + "startLine": 131, + "startColumn": 22, + "endColumn": 43 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/AttributeModificationException.java", + "uriBaseId": "%SRCROOT%", + "index": 29 + }, + "region": { + "startLine": 133, + "startColumn": 16, + "endColumn": 20 + } + }, + "message": { + "text": "orig : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/WriteAbortedException.java", + "uriBaseId": "%SRCROOT%", + "index": 30 + }, + "region": { + "startLine": 74, + "startColumn": 48, + "endColumn": 65 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/WriteAbortedException.java", + "uriBaseId": "%SRCROOT%", + "index": 30 + }, + "region": { + "startLine": 74, + "startColumn": 20, + "endColumn": 65 + } + }, + "message": { + "text": "... + ... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/FactoryConfigurationError.java", + "uriBaseId": "%SRCROOT%", + "index": 20 + }, + "region": { + "startLine": 111, + "startColumn": 20, + "endColumn": 42 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "make/jdk/src/classes/build/tools/module/ModuleInfoExtraTest.java", + "uriBaseId": "%SRCROOT%", + "index": 21 + }, + "region": { + "startLine": 270, + "startColumn": 18, + "endColumn": 32 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2854, + "startColumn": 20, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2855, + "startColumn": 39, + "endColumn": 43 + } + }, + "message": { + "text": "this" + } + } + } + ] + } + ] + }, + { + "threadFlows": [ + { + "locations": [ + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 142, + "startColumn": 43, + "endColumn": 73 + } + }, + "message": { + "text": "getInputStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 0, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "source" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 147, + "startColumn": 32, + "endColumn": 43 + } + }, + "message": { + "text": "inputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 147, + "startColumn": 49, + "endColumn": 52 + } + }, + "message": { + "text": "buf [post update] : byte[]" + } + }, + "taxa": [ + { + "index": 9, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 148, + "startColumn": 32, + "endColumn": 35 + } + }, + "message": { + "text": "buf : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 148, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "baos [post update] : ByteArrayOutputStream" + } + }, + "taxa": [ + { + "index": 10, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 154, + "startColumn": 66, + "endColumn": 70 + } + }, + "message": { + "text": "baos : ByteArrayOutputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 154, + "startColumn": 66, + "endColumn": 84 + } + }, + "message": { + "text": "toByteArray(...) : byte[]" + } + }, + "taxa": [ + { + "index": 11, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 126, + "startColumn": 30, + "endColumn": 48 + } + }, + "message": { + "text": "inputOctets : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 128, + "startColumn": 22, + "endColumn": 33 + } + }, + "message": { + "text": "inputOctets : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 128, + "startColumn": 9, + "endColumn": 13 + } + }, + "message": { + "text": "this [post update] : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 154, + "startColumn": 44, + "endColumn": 85 + } + }, + "message": { + "text": "new XMLSignatureInput(...) : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 160, + "startColumn": 24, + "endColumn": 30 + } + }, + "message": { + "text": "result : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolver.java", + "uriBaseId": "%SRCROOT%", + "index": 47 + }, + "region": { + "startLine": 162, + "startColumn": 24, + "endColumn": 58 + } + }, + "message": { + "text": "engineResolveURI(...) : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java", + "uriBaseId": "%SRCROOT%", + "index": 48 + }, + "region": { + "startLine": 144, + "startColumn": 36, + "endColumn": 72 + } + }, + "message": { + "text": "resolve(...) : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java", + "uriBaseId": "%SRCROOT%", + "index": 48 + }, + "region": { + "startLine": 146, + "startColumn": 50, + "endColumn": 52 + } + }, + "message": { + "text": "in : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 37, + "startColumn": 34, + "endColumn": 54 + } + }, + "message": { + "text": "xi : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 40, + "startColumn": 15, + "endColumn": 17 + } + }, + "message": { + "text": "xi : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 243, + "startColumn": 24, + "endColumn": 38 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 249, + "startColumn": 62, + "endColumn": 67 + } + }, + "message": { + "text": "this <.field> : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 249, + "startColumn": 62, + "endColumn": 67 + } + }, + "message": { + "text": "bytes : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 249, + "startColumn": 37, + "endColumn": 68 + } + }, + "message": { + "text": "new ByteArrayInputStream(...) : ByteArrayInputStream" + } + }, + "taxa": [ + { + "index": 12, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 250, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "inputOctetStreamProxy : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 40, + "startColumn": 15, + "endColumn": 34 + } + }, + "message": { + "text": "getOctetStream(...) : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 40, + "startColumn": 9, + "endColumn": 73 + } + }, + "message": { + "text": "this [post update] : ApacheOctetStreamData" + } + }, + "taxa": [ + { + "index": 13, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java", + "uriBaseId": "%SRCROOT%", + "index": 48 + }, + "region": { + "startLine": 146, + "startColumn": 24, + "endColumn": 53 + } + }, + "message": { + "text": "new ApacheOctetStreamData(...) : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java", + "uriBaseId": "%SRCROOT%", + "index": 70 + }, + "region": { + "startLine": 242, + "startColumn": 21, + "endColumn": 53 + } + }, + "message": { + "text": "dereference(...) : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMRetrievalMethod.java", + "uriBaseId": "%SRCROOT%", + "index": 70 + }, + "region": { + "startLine": 247, + "startColumn": 60, + "endColumn": 64 + } + }, + "message": { + "text": "data : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 63 + }, + "region": { + "startLine": 148, + "startColumn": 27, + "endColumn": 36 + } + }, + "message": { + "text": "data : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 63 + }, + "region": { + "startLine": 151, + "startColumn": 30, + "endColumn": 34 + } + }, + "message": { + "text": "data : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 103, + "startColumn": 27, + "endColumn": 36 + } + }, + "message": { + "text": "data : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 109, + "startColumn": 28, + "endColumn": 32 + } + }, + "message": { + "text": "data : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 124, + "startColumn": 30, + "endColumn": 39 + } + }, + "message": { + "text": "data : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 173, + "startColumn": 23, + "endColumn": 44 + } + }, + "message": { + "text": "(...)... : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 173, + "startColumn": 22, + "endColumn": 62 + } + }, + "message": { + "text": "getOctetStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 14, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 137, + "startColumn": 30, + "endColumn": 58 + } + }, + "message": { + "text": "inputOctetStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 138, + "startColumn": 38, + "endColumn": 54 + } + }, + "message": { + "text": "inputOctetStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 138, + "startColumn": 9, + "endColumn": 13 + } + }, + "message": { + "text": "this [post update] : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 172, + "startColumn": 22, + "endLine": 173, + "endColumn": 63 + } + }, + "message": { + "text": "new XMLSignatureInput(...) : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 183, + "startColumn": 49, + "endColumn": 51 + } + }, + "message": { + "text": "in : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 324, + "startColumn": 9, + "endColumn": 32 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 330, + "startColumn": 58, + "endColumn": 63 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPath.java", + "uriBaseId": "%SRCROOT%", + "index": 72 + }, + "region": { + "startLine": 71, + "startColumn": 9, + "endColumn": 32 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPath.java", + "uriBaseId": "%SRCROOT%", + "index": 72 + }, + "region": { + "startLine": 108, + "startColumn": 20, + "endColumn": 25 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 330, + "startColumn": 22, + "endColumn": 109 + } + }, + "message": { + "text": "enginePerformTransform(...) : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 341, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 183, + "startColumn": 22, + "endColumn": 64 + } + }, + "message": { + "text": "performTransform(...) : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 191, + "startColumn": 50, + "endColumn": 52 + } + }, + "message": { + "text": "in : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 37, + "startColumn": 34, + "endColumn": 54 + } + }, + "message": { + "text": "xi : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 41, + "startColumn": 19, + "endColumn": 21 + } + }, + "message": { + "text": "xi : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 41, + "startColumn": 9, + "endColumn": 13 + } + }, + "message": { + "text": "this [post update] : ApacheOctetStreamData [xi, inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 191, + "startColumn": 24, + "endColumn": 53 + } + }, + "message": { + "text": "new ApacheOctetStreamData(...) : ApacheOctetStreamData [xi, inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 109, + "startColumn": 16, + "endColumn": 43 + } + }, + "message": { + "text": "transformIt(...) : ApacheOctetStreamData [xi, inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 63 + }, + "region": { + "startLine": 151, + "startColumn": 16, + "endColumn": 39 + } + }, + "message": { + "text": "transform(...) : ApacheOctetStreamData [xi, inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 63 + }, + "region": { + "startLine": 148, + "startColumn": 27, + "endColumn": 36 + } + }, + "message": { + "text": "data : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 63 + }, + "region": { + "startLine": 151, + "startColumn": 30, + "endColumn": 34 + } + }, + "message": { + "text": "data : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 103, + "startColumn": 27, + "endColumn": 36 + } + }, + "message": { + "text": "data : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 109, + "startColumn": 28, + "endColumn": 32 + } + }, + "message": { + "text": "data : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 124, + "startColumn": 30, + "endColumn": 39 + } + }, + "message": { + "text": "data : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 173, + "startColumn": 23, + "endColumn": 44 + } + }, + "message": { + "text": "(...)... : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 173, + "startColumn": 22, + "endColumn": 62 + } + }, + "message": { + "text": "getOctetStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 14, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 137, + "startColumn": 30, + "endColumn": 58 + } + }, + "message": { + "text": "inputOctetStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 138, + "startColumn": 38, + "endColumn": 54 + } + }, + "message": { + "text": "inputOctetStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 138, + "startColumn": 9, + "endColumn": 13 + } + }, + "message": { + "text": "this [post update] : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 172, + "startColumn": 22, + "endLine": 173, + "endColumn": 63 + } + }, + "message": { + "text": "new XMLSignatureInput(...) : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 183, + "startColumn": 49, + "endColumn": 51 + } + }, + "message": { + "text": "in : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 324, + "startColumn": 9, + "endColumn": 32 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 330, + "startColumn": 58, + "endColumn": 63 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPath.java", + "uriBaseId": "%SRCROOT%", + "index": 72 + }, + "region": { + "startLine": 71, + "startColumn": 9, + "endColumn": 32 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPath.java", + "uriBaseId": "%SRCROOT%", + "index": 72 + }, + "region": { + "startLine": 106, + "startColumn": 13, + "endColumn": 18 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 541, + "startColumn": 17, + "endColumn": 30 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 543, + "startColumn": 13, + "endColumn": 29 + } + }, + "message": { + "text": "this <.method> : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 562, + "startColumn": 18, + "endColumn": 32 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 565, + "startColumn": 42, + "endColumn": 46 + } + }, + "message": { + "text": "this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 243, + "startColumn": 24, + "endColumn": 38 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 245, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "this <.field> : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 245, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "inputOctetStreamProxy : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 565, + "startColumn": 42, + "endColumn": 63 + } + }, + "message": { + "text": "getOctetStream(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java", + "uriBaseId": "%SRCROOT%", + "index": 52 + }, + "region": { + "startLine": 955, + "startColumn": 33, + "endColumn": 56 + } + }, + "message": { + "text": "inputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java", + "uriBaseId": "%SRCROOT%", + "index": 52 + }, + "region": { + "startLine": 957, + "startColumn": 36, + "endColumn": 47 + } + }, + "message": { + "text": "inputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/parser/XMLParserImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 53 + }, + "region": { + "startLine": 60, + "startColumn": 27, + "endColumn": 50 + } + }, + "message": { + "text": "inputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/parser/XMLParserImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 53 + }, + "region": { + "startLine": 69, + "startColumn": 46, + "endColumn": 57 + } + }, + "message": { + "text": "inputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/DocumentBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 54 + }, + "region": { + "startLine": 115, + "startColumn": 27, + "endColumn": 41 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/DocumentBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 54 + }, + "region": { + "startLine": 121, + "startColumn": 42, + "endColumn": 44 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 127, + "startColumn": 25, + "endColumn": 47 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 129, + "startColumn": 23, + "endColumn": 33 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 248, + "startColumn": 32, + "endColumn": 54 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 250, + "startColumn": 27, + "endColumn": 37 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 250, + "startColumn": 9, + "endColumn": 13 + } + }, + "message": { + "text": "this [post update] : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 129, + "startColumn": 9, + "endColumn": 34 + } + }, + "message": { + "text": "this <.method> [post update] : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/DocumentBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 54 + }, + "region": { + "startLine": 121, + "startColumn": 26, + "endColumn": 45 + } + }, + "message": { + "text": "new InputSource(...) : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/DocumentBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 54 + }, + "region": { + "startLine": 122, + "startColumn": 22, + "endColumn": 24 + } + }, + "message": { + "text": "in : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 56 + }, + "region": { + "startLine": 329, + "startColumn": 27, + "endColumn": 41 + } + }, + "message": { + "text": "is : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 56 + }, + "region": { + "startLine": 342, + "startColumn": 25, + "endColumn": 27 + } + }, + "message": { + "text": "is : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 235, + "startColumn": 23, + "endColumn": 46 + } + }, + "message": { + "text": "inputSource : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 244, + "startColumn": 42, + "endColumn": 53 + } + }, + "message": { + "text": "inputSource : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 264, + "startColumn": 24, + "endColumn": 37 + } + }, + "message": { + "text": "parameter this : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 266, + "startColumn": 16, + "endColumn": 26 + } + }, + "message": { + "text": "this <.field> : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 266, + "startColumn": 16, + "endColumn": 26 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 244, + "startColumn": 42, + "endColumn": 69 + } + }, + "message": { + "text": "getByteStream(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 234, + "startColumn": 31, + "endColumn": 53 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 235, + "startColumn": 23, + "endColumn": 33 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 235, + "startColumn": 9, + "endColumn": 20 + } + }, + "message": { + "text": "this <.field> [post update] : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 244, + "startColumn": 13, + "endColumn": 27 + } + }, + "message": { + "text": "xmlInputSource [post update] : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 247, + "startColumn": 19, + "endColumn": 33 + } + }, + "message": { + "text": "xmlInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLParser.java", + "uriBaseId": "%SRCROOT%", + "index": 59 + }, + "region": { + "startLine": 128, + "startColumn": 23, + "endColumn": 49 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLParser.java", + "uriBaseId": "%SRCROOT%", + "index": 59 + }, + "region": { + "startLine": 141, + "startColumn": 30, + "endColumn": 41 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11DTDConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 73 + }, + "region": { + "startLine": 662, + "startColumn": 23, + "endColumn": 44 + } + }, + "message": { + "text": "source : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11DTDConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 73 + }, + "region": { + "startLine": 671, + "startColumn": 28, + "endColumn": 34 + } + }, + "message": { + "text": "source : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11DTDConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 73 + }, + "region": { + "startLine": 514, + "startColumn": 32, + "endColumn": 58 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11DTDConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 73 + }, + "region": { + "startLine": 522, + "startColumn": 24, + "endColumn": 35 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11DTDConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 73 + }, + "region": { + "startLine": 522, + "startColumn": 9, + "endColumn": 21 + } + }, + "message": { + "text": "this <.field> [post update] : XML11DTDConfiguration [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11DTDConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 73 + }, + "region": { + "startLine": 671, + "startColumn": 13, + "endColumn": 35 + } + }, + "message": { + "text": "this <.method> [post update] : XML11DTDConfiguration [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11DTDConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 73 + }, + "region": { + "startLine": 672, + "startColumn": 13, + "endColumn": 24 + } + }, + "message": { + "text": "this <.method> : XML11DTDConfiguration [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11DTDConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 73 + }, + "region": { + "startLine": 697, + "startColumn": 20, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : XML11DTDConfiguration [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11DTDConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 73 + }, + "region": { + "startLine": 706, + "startColumn": 70, + "endColumn": 82 + } + }, + "message": { + "text": "this <.field> : XML11DTDConfiguration [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11DTDConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 73 + }, + "region": { + "startLine": 706, + "startColumn": 70, + "endColumn": 82 + } + }, + "message": { + "text": "fInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLVersionDetector.java", + "uriBaseId": "%SRCROOT%", + "index": 61 + }, + "region": { + "startLine": 149, + "startColumn": 38, + "endColumn": 64 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLVersionDetector.java", + "uriBaseId": "%SRCROOT%", + "index": 61 + }, + "region": { + "startLine": 150, + "startColumn": 74, + "endColumn": 85 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 626, + "startColumn": 70, + "endColumn": 99 + } + }, + "message": { + "text": "xmlInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 648, + "startColumn": 22, + "endColumn": 36 + } + }, + "message": { + "text": "xmlInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 239, + "startColumn": 24, + "endColumn": 37 + } + }, + "message": { + "text": "parameter this : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 240, + "startColumn": 16, + "endColumn": 27 + } + }, + "message": { + "text": "this <.field> : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 240, + "startColumn": 16, + "endColumn": 27 + } + }, + "message": { + "text": "fByteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 648, + "startColumn": 22, + "endColumn": 52 + } + }, + "message": { + "text": "getByteStream(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 80, + "endColumn": 86 + } + }, + "message": { + "text": "stream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3003, + "startColumn": 38, + "endColumn": 52 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 28, + "endColumn": 30 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 13, + "endColumn": 25 + } + }, + "message": { + "text": "this <.field> [post update] : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 54, + "endColumn": 87 + } + }, + "message": { + "text": "new RewindableInputStream(...) : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 774, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "stream : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3089, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3099, + "startColumn": 24, + "endColumn": 36 + } + }, + "message": { + "text": "this <.field> : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3099, + "startColumn": 24, + "endColumn": 36 + } + }, + "message": { + "text": "fInputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3687, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3701, + "startColumn": 22, + "endLine": 3702, + "endColumn": 71 + } + }, + "message": { + "text": "this <.method> : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3649, + "startColumn": 20, + "endColumn": 24 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 30, + "endColumn": 35 + } + }, + "message": { + "text": "super : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 41, + "endColumn": 42 + } + }, + "message": { + "text": "b [post update] : byte[]" + } + }, + "taxa": [ + { + "index": 1, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1964, + "startColumn": 47, + "endColumn": 93 + } + }, + "message": { + "text": "new HttpInputStream(...) : HttpInputStream" + } + }, + "taxa": [ + { + "id": "AdditionalTaintStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1964, + "startColumn": 33, + "endColumn": 44 + } + }, + "message": { + "text": "this <.field> [post update] : HttpURLConnection [inputStream] : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1970, + "startColumn": 23, + "endColumn": 34 + } + }, + "message": { + "text": "this <.field> : HttpURLConnection [inputStream] : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1970, + "startColumn": 23, + "endColumn": 34 + } + }, + "message": { + "text": "inputStream : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1985, + "startColumn": 24, + "endColumn": 35 + } + }, + "message": { + "text": "inputStream : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1581, + "startColumn": 24, + "endColumn": 41 + } + }, + "message": { + "text": "getInputStream0(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/ftp/FtpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 31 + }, + "region": { + "startLine": 424, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "getInputStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/net/URL.java", + "uriBaseId": "%SRCROOT%", + "index": 22 + }, + "region": { + "startLine": 1317, + "startColumn": 16, + "endColumn": 49 + } + }, + "message": { + "text": "getInputStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/Module.java", + "uriBaseId": "%SRCROOT%", + "index": 32 + }, + "region": { + "startLine": 1735, + "startColumn": 24, + "endColumn": 40 + } + }, + "message": { + "text": "openStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 86, + "startColumn": 20, + "endColumn": 68 + } + }, + "message": { + "text": "getResourceAsStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 809, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "run(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 816, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 571, + "startColumn": 20, + "endColumn": 62 + } + }, + "message": { + "text": "executePrivileged(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 89, + "startColumn": 18, + "endColumn": 51 + } + }, + "message": { + "text": "doPrivileged(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 93, + "startColumn": 16, + "endColumn": 18 + } + }, + "message": { + "text": "is : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 75, + "startColumn": 31, + "endColumn": 56 + } + }, + "message": { + "text": "getResourceAsStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 76, + "startColumn": 20, + "endColumn": 22 + } + }, + "message": { + "text": "is : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 76, + "startColumn": 20, + "endColumn": 37 + } + }, + "message": { + "text": "readAllBytes(...) : byte[]" + } + }, + "taxa": [ + { + "index": 2, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 80, + "startColumn": 16, + "endColumn": 20 + } + }, + "message": { + "text": "data : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 561, + "startColumn": 22, + "endColumn": 42 + } + }, + "message": { + "text": "handleGetObject(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 574, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "obj : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 564, + "startColumn": 23, + "endColumn": 44 + } + }, + "message": { + "text": "getObject(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 574, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "obj : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 326, + "startColumn": 44, + "endColumn": 60 + } + }, + "message": { + "text": "getObject(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 328, + "startColumn": 45, + "endColumn": 50 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 328, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "values [post update] : TextAndMnemonicHashMap [] : byte[]" + } + }, + "taxa": [ + { + "index": 3, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 335, + "startColumn": 34, + "endColumn": 40 + } + }, + "message": { + "text": "values : TextAndMnemonicHashMap [] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 335, + "startColumn": 13, + "endColumn": 26 + } + }, + "message": { + "text": "resourceCache [post update] : HashMap [, ] : byte[]" + } + }, + "taxa": [ + { + "index": 3, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 335, + "startColumn": 13, + "endColumn": 26 + } + }, + "message": { + "text": "this <.field> [post update] : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 39 + } + }, + "message": { + "text": "this <.method> [post update] : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 42, + "endColumn": 74 + } + }, + "message": { + "text": "this <.method> [post update] : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 544, + "startColumn": 23, + "endColumn": 33 + } + }, + "message": { + "text": "uiDefaults [post update] : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 548, + "startColumn": 23, + "endColumn": 33 + } + }, + "message": { + "text": "uiDefaults : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 170, + "startColumn": 19, + "endColumn": 22 + } + }, + "message": { + "text": "parameter this : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 42, + "endColumn": 74 + } + }, + "message": { + "text": "this <.method> : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 281, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "parameter this : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 39 + } + }, + "message": { + "text": "this <.method> : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 305, + "startColumn": 33, + "endColumn": 49 + } + }, + "message": { + "text": "parameter this : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 306, + "startColumn": 38, + "endColumn": 51 + } + }, + "message": { + "text": "this <.field> : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 306, + "startColumn": 38, + "endColumn": 51 + } + }, + "message": { + "text": "resourceCache : HashMap [, ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 306, + "startColumn": 38, + "endColumn": 58 + } + }, + "message": { + "text": "get(...) : TextAndMnemonicHashMap [] : byte[]" + } + }, + "taxa": [ + { + "index": 4, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 337, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "values : TextAndMnemonicHashMap [] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 39 + } + }, + "message": { + "text": "getResourceCache(...) : TextAndMnemonicHashMap [] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 48 + } + }, + "message": { + "text": "get(...) : byte[]" + } + }, + "taxa": [ + { + "index": 4, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 42, + "endColumn": 74 + } + }, + "message": { + "text": "getFromResourceBundle(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 16, + "endColumn": 74 + } + }, + "message": { + "text": "...?...:... : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 548, + "startColumn": 23, + "endColumn": 65 + } + }, + "message": { + "text": "get(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 558, + "startColumn": 20, + "endColumn": 23 + } + }, + "message": { + "text": "obj : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 241, + "startColumn": 21, + "endColumn": 59 + } + }, + "message": { + "text": "createValue(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 244, + "startColumn": 16, + "endColumn": 21 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 171, + "startColumn": 24, + "endColumn": 47 + } + }, + "message": { + "text": "getFromHashtable(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 16, + "endColumn": 74 + } + }, + "message": { + "text": "...?...:... : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/MultiUIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 34 + }, + "region": { + "startLine": 59, + "startColumn": 24, + "endColumn": 38 + } + }, + "message": { + "text": "get(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/MultiUIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 34 + }, + "region": { + "startLine": 61, + "startColumn": 20, + "endColumn": 25 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/rtf/MockAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 14 + }, + "region": { + "startLine": 67, + "startColumn": 16, + "endColumn": 33 + } + }, + "message": { + "text": "get(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/StyleContext.java", + "uriBaseId": "%SRCROOT%", + "index": 35 + }, + "region": { + "startLine": 1496, + "startColumn": 20, + "endColumn": 53 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 151, + "startColumn": 25, + "endColumn": 50 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 154, + "startColumn": 16, + "endColumn": 21 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/html/StyleSheet.java", + "uriBaseId": "%SRCROOT%", + "index": 36 + }, + "region": { + "startLine": 845, + "startColumn": 20, + "endColumn": 43 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 328, + "startColumn": 28, + "endColumn": 45 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 336, + "startColumn": 16, + "endColumn": 17 + } + }, + "message": { + "text": "s : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/tree/DefaultMutableTreeNode.java", + "uriBaseId": "%SRCROOT%", + "index": 37 + }, + "region": { + "startLine": 1264, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1304, + "startColumn": 27, + "endColumn": 41 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1349, + "startColumn": 35, + "endColumn": 38 + } + }, + "message": { + "text": "arg : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 311, + "startColumn": 45, + "endColumn": 55 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 313, + "startColumn": 22, + "endColumn": 25 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 313, + "startColumn": 9, + "endColumn": 14 + } + }, + "message": { + "text": "super [post update] : StringBuffer" + } + }, + "taxa": [ + { + "index": 5, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1349, + "startColumn": 21, + "endColumn": 27 + } + }, + "message": { + "text": "result [post update] : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1364, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 885, + "startColumn": 16, + "endColumn": 66 + } + }, + "message": { + "text": "subformat(...) : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/Format.java", + "uriBaseId": "%SRCROOT%", + "index": 18 + }, + "region": { + "startLine": 159, + "startColumn": 16, + "endColumn": 69 + } + }, + "message": { + "text": "format(...) : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 713, + "startColumn": 32, + "endColumn": 40 + } + }, + "message": { + "text": "parameter this : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 715, + "startColumn": 47, + "endColumn": 51 + } + }, + "message": { + "text": "this : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 715, + "startColumn": 36, + "endColumn": 58 + } + }, + "message": { + "text": "new String(...) : String" + } + }, + "taxa": [ + { + "index": 6, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 715, + "startColumn": 20, + "endColumn": 58 + } + }, + "message": { + "text": "...=... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/Format.java", + "uriBaseId": "%SRCROOT%", + "index": 18 + }, + "region": { + "startLine": 159, + "startColumn": 16, + "endColumn": 80 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/jdk.internal.opt/share/classes/jdk/internal/joptsimple/internal/Messages.java", + "uriBaseId": "%SRCROOT%", + "index": 38 + }, + "region": { + "startLine": 75, + "startColumn": 16, + "endColumn": 37 + } + }, + "message": { + "text": "format(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/jdk.internal.opt/share/classes/jdk/internal/joptsimple/OptionException.java", + "uriBaseId": "%SRCROOT%", + "index": 39 + }, + "region": { + "startLine": 152, + "startColumn": 16, + "endColumn": 121 + } + }, + "message": { + "text": "message(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/jdk.internal.opt/share/classes/jdk/internal/joptsimple/OptionException.java", + "uriBaseId": "%SRCROOT%", + "index": 39 + }, + "region": { + "startLine": 148, + "startColumn": 16, + "endColumn": 42 + } + }, + "message": { + "text": "formattedMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/jdk.internal.opt/share/classes/jdk/internal/joptsimple/OptionException.java", + "uriBaseId": "%SRCROOT%", + "index": 39 + }, + "region": { + "startLine": 144, + "startColumn": 16, + "endColumn": 55 + } + }, + "message": { + "text": "localizedMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/transform/TransformerFactoryConfigurationError.java", + "uriBaseId": "%SRCROOT%", + "index": 40 + }, + "region": { + "startLine": 110, + "startColumn": 20, + "endColumn": 42 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "make/jdk/src/classes/build/tools/module/ModuleInfoExtraTest.java", + "uriBaseId": "%SRCROOT%", + "index": 21 + }, + "region": { + "startLine": 254, + "startColumn": 18, + "endColumn": 32 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2854, + "startColumn": 20, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2855, + "startColumn": 39, + "endColumn": 43 + } + }, + "message": { + "text": "this" + } + } + } + ] + } + ] + }, + { + "threadFlows": [ + { + "locations": [ + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 142, + "startColumn": 43, + "endColumn": 73 + } + }, + "message": { + "text": "getInputStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 0, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "source" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 147, + "startColumn": 32, + "endColumn": 43 + } + }, + "message": { + "text": "inputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 147, + "startColumn": 49, + "endColumn": 52 + } + }, + "message": { + "text": "buf [post update] : byte[]" + } + }, + "taxa": [ + { + "index": 9, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 148, + "startColumn": 32, + "endColumn": 35 + } + }, + "message": { + "text": "buf : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 148, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "baos [post update] : ByteArrayOutputStream" + } + }, + "taxa": [ + { + "index": 10, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 154, + "startColumn": 66, + "endColumn": 70 + } + }, + "message": { + "text": "baos : ByteArrayOutputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 154, + "startColumn": 66, + "endColumn": 84 + } + }, + "message": { + "text": "toByteArray(...) : byte[]" + } + }, + "taxa": [ + { + "index": 11, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 126, + "startColumn": 30, + "endColumn": 48 + } + }, + "message": { + "text": "inputOctets : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 128, + "startColumn": 22, + "endColumn": 33 + } + }, + "message": { + "text": "inputOctets : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 128, + "startColumn": 9, + "endColumn": 13 + } + }, + "message": { + "text": "this [post update] : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 154, + "startColumn": 44, + "endColumn": 85 + } + }, + "message": { + "text": "new XMLSignatureInput(...) : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 160, + "startColumn": 24, + "endColumn": 30 + } + }, + "message": { + "text": "result : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/ResourceResolver.java", + "uriBaseId": "%SRCROOT%", + "index": 47 + }, + "region": { + "startLine": 162, + "startColumn": 24, + "endColumn": 58 + } + }, + "message": { + "text": "engineResolveURI(...) : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java", + "uriBaseId": "%SRCROOT%", + "index": 48 + }, + "region": { + "startLine": 144, + "startColumn": 36, + "endColumn": 72 + } + }, + "message": { + "text": "resolve(...) : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java", + "uriBaseId": "%SRCROOT%", + "index": 48 + }, + "region": { + "startLine": 146, + "startColumn": 50, + "endColumn": 52 + } + }, + "message": { + "text": "in : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 37, + "startColumn": 34, + "endColumn": 54 + } + }, + "message": { + "text": "xi : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 41, + "startColumn": 19, + "endColumn": 21 + } + }, + "message": { + "text": "xi : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 41, + "startColumn": 9, + "endColumn": 13 + } + }, + "message": { + "text": "this [post update] : ApacheOctetStreamData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMURIDereferencer.java", + "uriBaseId": "%SRCROOT%", + "index": 48 + }, + "region": { + "startLine": 146, + "startColumn": 24, + "endColumn": 53 + } + }, + "message": { + "text": "new ApacheOctetStreamData(...) : ApacheOctetStreamData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 416, + "startColumn": 20, + "endColumn": 52 + } + }, + "message": { + "text": "dereference(...) : ApacheOctetStreamData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 423, + "startColumn": 16, + "endColumn": 20 + } + }, + "message": { + "text": "data : ApacheOctetStreamData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 354, + "startColumn": 20, + "endColumn": 44 + } + }, + "message": { + "text": "dereference(...) : ApacheOctetStreamData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 358, + "startColumn": 33, + "endColumn": 37 + } + }, + "message": { + "text": "data : ApacheOctetStreamData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 426, + "startColumn": 30, + "endColumn": 51 + } + }, + "message": { + "text": "dereferencedData : ApacheOctetStreamData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 493, + "startColumn": 42, + "endColumn": 46 + } + }, + "message": { + "text": "data : ApacheOctetStreamData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 103, + "startColumn": 27, + "endColumn": 36 + } + }, + "message": { + "text": "data : ApacheOctetStreamData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 109, + "startColumn": 28, + "endColumn": 32 + } + }, + "message": { + "text": "data : ApacheOctetStreamData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 124, + "startColumn": 30, + "endColumn": 39 + } + }, + "message": { + "text": "data : ApacheOctetStreamData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 155, + "startColumn": 19, + "endColumn": 35 + } + }, + "message": { + "text": "(...)... : ApacheOctetStreamData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 44, + "startColumn": 30, + "endColumn": 50 + } + }, + "message": { + "text": "parameter this : ApacheOctetStreamData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 45, + "startColumn": 16, + "endColumn": 18 + } + }, + "message": { + "text": "this <.field> : ApacheOctetStreamData [xi, bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 45, + "startColumn": 16, + "endColumn": 18 + } + }, + "message": { + "text": "xi : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 155, + "startColumn": 18, + "endColumn": 59 + } + }, + "message": { + "text": "getXMLSignatureInput(...) : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 183, + "startColumn": 49, + "endColumn": 51 + } + }, + "message": { + "text": "in : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 324, + "startColumn": 9, + "endColumn": 32 + } + }, + "message": { + "text": "input : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 330, + "startColumn": 58, + "endColumn": 63 + } + }, + "message": { + "text": "input : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPath.java", + "uriBaseId": "%SRCROOT%", + "index": 72 + }, + "region": { + "startLine": 71, + "startColumn": 9, + "endColumn": 32 + } + }, + "message": { + "text": "input : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/implementations/TransformXPath.java", + "uriBaseId": "%SRCROOT%", + "index": 72 + }, + "region": { + "startLine": 108, + "startColumn": 20, + "endColumn": 25 + } + }, + "message": { + "text": "input : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 330, + "startColumn": 22, + "endColumn": 109 + } + }, + "message": { + "text": "enginePerformTransform(...) : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/transforms/Transform.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 341, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 183, + "startColumn": 22, + "endColumn": 64 + } + }, + "message": { + "text": "performTransform(...) : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 191, + "startColumn": 50, + "endColumn": 52 + } + }, + "message": { + "text": "in : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 37, + "startColumn": 34, + "endColumn": 54 + } + }, + "message": { + "text": "xi : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 40, + "startColumn": 15, + "endColumn": 17 + } + }, + "message": { + "text": "xi : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 243, + "startColumn": 24, + "endColumn": 38 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 249, + "startColumn": 62, + "endColumn": 67 + } + }, + "message": { + "text": "this <.field> : XMLSignatureInput [bytes] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 249, + "startColumn": 62, + "endColumn": 67 + } + }, + "message": { + "text": "bytes : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 249, + "startColumn": 37, + "endColumn": 68 + } + }, + "message": { + "text": "new ByteArrayInputStream(...) : ByteArrayInputStream" + } + }, + "taxa": [ + { + "index": 12, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 250, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "inputOctetStreamProxy : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 40, + "startColumn": 15, + "endColumn": 34 + } + }, + "message": { + "text": "getOctetStream(...) : ByteArrayInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheOctetStreamData.java", + "uriBaseId": "%SRCROOT%", + "index": 49 + }, + "region": { + "startLine": 40, + "startColumn": 9, + "endColumn": 73 + } + }, + "message": { + "text": "this [post update] : ApacheOctetStreamData" + } + }, + "taxa": [ + { + "index": 13, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 191, + "startColumn": 24, + "endColumn": 53 + } + }, + "message": { + "text": "new ApacheOctetStreamData(...) : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/ApacheTransform.java", + "uriBaseId": "%SRCROOT%", + "index": 71 + }, + "region": { + "startLine": 109, + "startColumn": 16, + "endColumn": 43 + } + }, + "message": { + "text": "transformIt(...) : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 493, + "startColumn": 28, + "endColumn": 56 + } + }, + "message": { + "text": "transform(...) : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 495, + "startColumn": 27, + "endColumn": 48 + } + }, + "message": { + "text": "(...)... : ApacheOctetStreamData" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 495, + "startColumn": 26, + "endColumn": 66 + } + }, + "message": { + "text": "getOctetStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 14, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 137, + "startColumn": 30, + "endColumn": 58 + } + }, + "message": { + "text": "inputOctetStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 138, + "startColumn": 38, + "endColumn": 54 + } + }, + "message": { + "text": "inputOctetStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 138, + "startColumn": 9, + "endColumn": 13 + } + }, + "message": { + "text": "this [post update] : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 494, + "startColumn": 26, + "endLine": 495, + "endColumn": 67 + } + }, + "message": { + "text": "new XMLSignatureInput(...) : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/org/jcp/xml/dsig/internal/dom/DOMReference.java", + "uriBaseId": "%SRCROOT%", + "index": 50 + }, + "region": { + "startLine": 533, + "startColumn": 25, + "endColumn": 27 + } + }, + "message": { + "text": "xi : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 482, + "startColumn": 17, + "endColumn": 35 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 484, + "startColumn": 9, + "endColumn": 40 + } + }, + "message": { + "text": "this <.method> : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 487, + "startColumn": 17, + "endColumn": 35 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 501, + "startColumn": 41, + "endColumn": 45 + } + }, + "message": { + "text": "this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.java", + "uriBaseId": "%SRCROOT%", + "index": 51 + }, + "region": { + "startLine": 137, + "startColumn": 36, + "endColumn": 59 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/CanonicalizerBase.java", + "uriBaseId": "%SRCROOT%", + "index": 51 + }, + "region": { + "startLine": 149, + "startColumn": 39, + "endColumn": 44 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315.java", + "uriBaseId": "%SRCROOT%", + "index": 74 + }, + "region": { + "startLine": 300, + "startColumn": 42, + "endColumn": 65 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/c14n/implementations/Canonicalizer20010315.java", + "uriBaseId": "%SRCROOT%", + "index": 74 + }, + "region": { + "startLine": 309, + "startColumn": 45, + "endColumn": 50 + } + }, + "message": { + "text": "input : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 193, + "startColumn": 22, + "endColumn": 32 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 194, + "startColumn": 16, + "endColumn": 33 + } + }, + "message": { + "text": "this <.method> : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 214, + "startColumn": 22, + "endColumn": 32 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 226, + "startColumn": 13, + "endColumn": 29 + } + }, + "message": { + "text": "this <.method> : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 562, + "startColumn": 18, + "endColumn": 32 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 565, + "startColumn": 42, + "endColumn": 46 + } + }, + "message": { + "text": "this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 243, + "startColumn": 24, + "endColumn": 38 + } + }, + "message": { + "text": "parameter this : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 245, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "this <.field> : XMLSignatureInput [inputOctetStreamProxy] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 245, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "inputOctetStreamProxy : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/signature/XMLSignatureInput.java", + "uriBaseId": "%SRCROOT%", + "index": 46 + }, + "region": { + "startLine": 565, + "startColumn": 42, + "endColumn": 63 + } + }, + "message": { + "text": "getOctetStream(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java", + "uriBaseId": "%SRCROOT%", + "index": 52 + }, + "region": { + "startLine": 955, + "startColumn": 33, + "endColumn": 56 + } + }, + "message": { + "text": "inputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/XMLUtils.java", + "uriBaseId": "%SRCROOT%", + "index": 52 + }, + "region": { + "startLine": 957, + "startColumn": 36, + "endColumn": 47 + } + }, + "message": { + "text": "inputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/parser/XMLParserImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 53 + }, + "region": { + "startLine": 60, + "startColumn": 27, + "endColumn": 50 + } + }, + "message": { + "text": "inputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/parser/XMLParserImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 53 + }, + "region": { + "startLine": 69, + "startColumn": 46, + "endColumn": 57 + } + }, + "message": { + "text": "inputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/DocumentBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 54 + }, + "region": { + "startLine": 115, + "startColumn": 27, + "endColumn": 41 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/DocumentBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 54 + }, + "region": { + "startLine": 121, + "startColumn": 42, + "endColumn": 44 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 127, + "startColumn": 25, + "endColumn": 47 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 129, + "startColumn": 23, + "endColumn": 33 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 248, + "startColumn": 32, + "endColumn": 54 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 250, + "startColumn": 27, + "endColumn": 37 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 250, + "startColumn": 9, + "endColumn": 13 + } + }, + "message": { + "text": "this [post update] : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 129, + "startColumn": 9, + "endColumn": 34 + } + }, + "message": { + "text": "this <.method> [post update] : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/DocumentBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 54 + }, + "region": { + "startLine": 121, + "startColumn": 26, + "endColumn": 45 + } + }, + "message": { + "text": "new InputSource(...) : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/DocumentBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 54 + }, + "region": { + "startLine": 122, + "startColumn": 22, + "endColumn": 24 + } + }, + "message": { + "text": "in : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 56 + }, + "region": { + "startLine": 329, + "startColumn": 27, + "endColumn": 41 + } + }, + "message": { + "text": "is : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 56 + }, + "region": { + "startLine": 342, + "startColumn": 25, + "endColumn": 27 + } + }, + "message": { + "text": "is : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 235, + "startColumn": 23, + "endColumn": 46 + } + }, + "message": { + "text": "inputSource : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 244, + "startColumn": 42, + "endColumn": 53 + } + }, + "message": { + "text": "inputSource : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 264, + "startColumn": 24, + "endColumn": 37 + } + }, + "message": { + "text": "parameter this : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 266, + "startColumn": 16, + "endColumn": 26 + } + }, + "message": { + "text": "this <.field> : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 266, + "startColumn": 16, + "endColumn": 26 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 244, + "startColumn": 42, + "endColumn": 69 + } + }, + "message": { + "text": "getByteStream(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 234, + "startColumn": 31, + "endColumn": 53 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 235, + "startColumn": 23, + "endColumn": 33 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 235, + "startColumn": 9, + "endColumn": 20 + } + }, + "message": { + "text": "this <.field> [post update] : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 244, + "startColumn": 13, + "endColumn": 27 + } + }, + "message": { + "text": "xmlInputSource [post update] : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 247, + "startColumn": 19, + "endColumn": 33 + } + }, + "message": { + "text": "xmlInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLParser.java", + "uriBaseId": "%SRCROOT%", + "index": 59 + }, + "region": { + "startLine": 128, + "startColumn": 23, + "endColumn": 49 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLParser.java", + "uriBaseId": "%SRCROOT%", + "index": 59 + }, + "region": { + "startLine": 141, + "startColumn": 30, + "endColumn": 41 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11NonValidatingConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 75 + }, + "region": { + "startLine": 590, + "startColumn": 23, + "endColumn": 44 + } + }, + "message": { + "text": "source : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11NonValidatingConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 75 + }, + "region": { + "startLine": 599, + "startColumn": 28, + "endColumn": 34 + } + }, + "message": { + "text": "source : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11NonValidatingConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 75 + }, + "region": { + "startLine": 442, + "startColumn": 32, + "endColumn": 58 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11NonValidatingConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 75 + }, + "region": { + "startLine": 450, + "startColumn": 24, + "endColumn": 35 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11NonValidatingConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 75 + }, + "region": { + "startLine": 450, + "startColumn": 9, + "endColumn": 21 + } + }, + "message": { + "text": "this <.field> [post update] : XML11NonValidatingConfiguration [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11NonValidatingConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 75 + }, + "region": { + "startLine": 599, + "startColumn": 13, + "endColumn": 35 + } + }, + "message": { + "text": "this <.method> [post update] : XML11NonValidatingConfiguration [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11NonValidatingConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 75 + }, + "region": { + "startLine": 600, + "startColumn": 13, + "endColumn": 24 + } + }, + "message": { + "text": "this <.method> : XML11NonValidatingConfiguration [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11NonValidatingConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 75 + }, + "region": { + "startLine": 625, + "startColumn": 20, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : XML11NonValidatingConfiguration [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11NonValidatingConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 75 + }, + "region": { + "startLine": 634, + "startColumn": 70, + "endColumn": 82 + } + }, + "message": { + "text": "this <.field> : XML11NonValidatingConfiguration [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XML11NonValidatingConfiguration.java", + "uriBaseId": "%SRCROOT%", + "index": 75 + }, + "region": { + "startLine": 634, + "startColumn": 70, + "endColumn": 82 + } + }, + "message": { + "text": "fInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLVersionDetector.java", + "uriBaseId": "%SRCROOT%", + "index": 61 + }, + "region": { + "startLine": 149, + "startColumn": 38, + "endColumn": 64 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLVersionDetector.java", + "uriBaseId": "%SRCROOT%", + "index": 61 + }, + "region": { + "startLine": 150, + "startColumn": 74, + "endColumn": 85 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 626, + "startColumn": 70, + "endColumn": 99 + } + }, + "message": { + "text": "xmlInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 648, + "startColumn": 22, + "endColumn": 36 + } + }, + "message": { + "text": "xmlInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 239, + "startColumn": 24, + "endColumn": 37 + } + }, + "message": { + "text": "parameter this : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 240, + "startColumn": 16, + "endColumn": 27 + } + }, + "message": { + "text": "this <.field> : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 240, + "startColumn": 16, + "endColumn": 27 + } + }, + "message": { + "text": "fByteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 648, + "startColumn": 22, + "endColumn": 52 + } + }, + "message": { + "text": "getByteStream(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 80, + "endColumn": 86 + } + }, + "message": { + "text": "stream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3003, + "startColumn": 38, + "endColumn": 52 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 28, + "endColumn": 30 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 13, + "endColumn": 25 + } + }, + "message": { + "text": "this <.field> [post update] : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 54, + "endColumn": 87 + } + }, + "message": { + "text": "new RewindableInputStream(...) : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 779, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "stream : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3089, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3099, + "startColumn": 24, + "endColumn": 36 + } + }, + "message": { + "text": "this <.field> : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3099, + "startColumn": 24, + "endColumn": 36 + } + }, + "message": { + "text": "fInputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3687, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3701, + "startColumn": 22, + "endLine": 3702, + "endColumn": 71 + } + }, + "message": { + "text": "this <.method> : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3649, + "startColumn": 20, + "endColumn": 24 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 30, + "endColumn": 35 + } + }, + "message": { + "text": "super : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 41, + "endColumn": 42 + } + }, + "message": { + "text": "b [post update] : byte[]" + } + }, + "taxa": [ + { + "index": 1, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1971, + "startColumn": 35, + "endColumn": 67 + } + }, + "message": { + "text": "new HttpInputStream(...) : HttpInputStream" + } + }, + "taxa": [ + { + "id": "AdditionalTaintStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1971, + "startColumn": 21, + "endColumn": 32 + } + }, + "message": { + "text": "this <.field> [post update] : HttpURLConnection [inputStream] : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1983, + "startColumn": 17, + "endColumn": 23 + } + }, + "message": { + "text": "this <.field> : HttpURLConnection [inputStream] : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1984, + "startColumn": 17, + "endColumn": 32 + } + }, + "message": { + "text": "this <.field> : HttpURLConnection [inputStream] : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1985, + "startColumn": 24, + "endColumn": 35 + } + }, + "message": { + "text": "this <.field> : HttpURLConnection [inputStream] : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1985, + "startColumn": 24, + "endColumn": 35 + } + }, + "message": { + "text": "inputStream : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1573, + "startColumn": 44, + "endColumn": 61 + } + }, + "message": { + "text": "getInputStream0(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 809, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "run(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 816, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 571, + "startColumn": 20, + "endColumn": 62 + } + }, + "message": { + "text": "executePrivileged(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 89, + "startColumn": 18, + "endColumn": 51 + } + }, + "message": { + "text": "doPrivileged(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 93, + "startColumn": 16, + "endColumn": 18 + } + }, + "message": { + "text": "is : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 75, + "startColumn": 31, + "endColumn": 56 + } + }, + "message": { + "text": "getResourceAsStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 76, + "startColumn": 20, + "endColumn": 22 + } + }, + "message": { + "text": "is : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 76, + "startColumn": 20, + "endColumn": 37 + } + }, + "message": { + "text": "readAllBytes(...) : byte[]" + } + }, + "taxa": [ + { + "index": 2, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 80, + "startColumn": 16, + "endColumn": 20 + } + }, + "message": { + "text": "data : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 561, + "startColumn": 22, + "endColumn": 42 + } + }, + "message": { + "text": "handleGetObject(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 574, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "obj : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 326, + "startColumn": 44, + "endColumn": 60 + } + }, + "message": { + "text": "getObject(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 328, + "startColumn": 45, + "endColumn": 50 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 328, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "values [post update] : TextAndMnemonicHashMap [] : byte[]" + } + }, + "taxa": [ + { + "index": 3, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 337, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "values : TextAndMnemonicHashMap [] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 39 + } + }, + "message": { + "text": "getResourceCache(...) : TextAndMnemonicHashMap [] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 48 + } + }, + "message": { + "text": "get(...) : byte[]" + } + }, + "taxa": [ + { + "index": 4, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 42, + "endColumn": 74 + } + }, + "message": { + "text": "getFromResourceBundle(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 16, + "endColumn": 74 + } + }, + "message": { + "text": "...?...:... : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/MultiUIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 34 + }, + "region": { + "startLine": 65, + "startColumn": 39, + "endColumn": 53 + } + }, + "message": { + "text": "get(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/MultiUIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 34 + }, + "region": { + "startLine": 67, + "startColumn": 24, + "endColumn": 29 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/rtf/MockAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 14 + }, + "region": { + "startLine": 67, + "startColumn": 16, + "endColumn": 33 + } + }, + "message": { + "text": "get(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/AbstractDocument.java", + "uriBaseId": "%SRCROOT%", + "index": 41 + }, + "region": { + "startLine": 1939, + "startColumn": 28, + "endColumn": 61 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/AbstractDocument.java", + "uriBaseId": "%SRCROOT%", + "index": 41 + }, + "region": { + "startLine": 1949, + "startColumn": 20, + "endColumn": 25 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 151, + "startColumn": 25, + "endColumn": 50 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 154, + "startColumn": 16, + "endColumn": 21 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 328, + "startColumn": 28, + "endColumn": 45 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 336, + "startColumn": 16, + "endColumn": 17 + } + }, + "message": { + "text": "s : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/invoke/ClassSpecializer.java", + "uriBaseId": "%SRCROOT%", + "index": 42 + }, + "region": { + "startLine": 262, + "startColumn": 53, + "endColumn": 67 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/invoke/ClassSpecializer.java", + "uriBaseId": "%SRCROOT%", + "index": 42 + }, + "region": { + "startLine": 262, + "startColumn": 20, + "endColumn": 144 + } + }, + "message": { + "text": "... + ... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1304, + "startColumn": 27, + "endColumn": 41 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1336, + "startColumn": 39, + "endColumn": 42 + } + }, + "message": { + "text": "arg : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 311, + "startColumn": 45, + "endColumn": 55 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 313, + "startColumn": 22, + "endColumn": 25 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 313, + "startColumn": 9, + "endColumn": 14 + } + }, + "message": { + "text": "super [post update] : StringBuffer" + } + }, + "taxa": [ + { + "index": 5, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1336, + "startColumn": 25, + "endColumn": 31 + } + }, + "message": { + "text": "result [post update] : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1364, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 885, + "startColumn": 16, + "endColumn": 66 + } + }, + "message": { + "text": "subformat(...) : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/Format.java", + "uriBaseId": "%SRCROOT%", + "index": 18 + }, + "region": { + "startLine": 159, + "startColumn": 16, + "endColumn": 69 + } + }, + "message": { + "text": "format(...) : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 713, + "startColumn": 32, + "endColumn": 40 + } + }, + "message": { + "text": "parameter this : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 717, + "startColumn": 27, + "endColumn": 40 + } + }, + "message": { + "text": "toStringCache : String" + } + }, + "taxa": [ + { + "id": "entrypointFieldStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 717, + "startColumn": 16, + "endColumn": 41 + } + }, + "message": { + "text": "new String(...) : String" + } + }, + "taxa": [ + { + "index": 6, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/Format.java", + "uriBaseId": "%SRCROOT%", + "index": 18 + }, + "region": { + "startLine": 159, + "startColumn": 16, + "endColumn": 80 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 860, + "startColumn": 16, + "endColumn": 38 + } + }, + "message": { + "text": "format(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMsg.java", + "uriBaseId": "%SRCROOT%", + "index": 43 + }, + "region": { + "startLine": 293, + "startColumn": 15, + "endColumn": 63 + } + }, + "message": { + "text": "format(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMsg.java", + "uriBaseId": "%SRCROOT%", + "index": 43 + }, + "region": { + "startLine": 294, + "startColumn": 16, + "endColumn": 37 + } + }, + "message": { + "text": "... + ... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/TypeCheckError.java", + "uriBaseId": "%SRCROOT%", + "index": 44 + }, + "region": { + "startLine": 77, + "startColumn": 16, + "endColumn": 33 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/TypeCheckError.java", + "uriBaseId": "%SRCROOT%", + "index": 44 + }, + "region": { + "startLine": 62, + "startColumn": 16, + "endColumn": 26 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/transform/TransformerFactoryConfigurationError.java", + "uriBaseId": "%SRCROOT%", + "index": 40 + }, + "region": { + "startLine": 110, + "startColumn": 20, + "endColumn": 42 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "make/jdk/src/classes/build/tools/module/ModuleInfoExtraTest.java", + "uriBaseId": "%SRCROOT%", + "index": 21 + }, + "region": { + "startLine": 270, + "startColumn": 18, + "endColumn": 32 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2854, + "startColumn": 20, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2855, + "startColumn": 39, + "endColumn": 43 + } + }, + "message": { + "text": "this" + } + } + } + ] + } + ] + } + ], + "relatedLocations": [ + { + "id": 1, + "physicalLocation": { + "artifactLocation": { + "uri": "src/jdk.compiler/share/classes/com/sun/tools/javac/main/Main.java", + "uriBaseId": "%SRCROOT%", + "index": 1 + }, + "region": { + "startLine": 379, + "startColumn": 42, + "endColumn": 46 + } + }, + "message": { + "text": "regular expression" + } + }, + { + "id": 2, + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml.crypto/share/classes/com/sun/org/apache/xml/internal/security/utils/resolver/implementations/ResolverDirectHTTP.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 142, + "startColumn": 43, + "endColumn": 73 + } + }, + "message": { + "text": "user-provided value" + } + } + ] + }, + "result2": { + "ruleId": "java/polynomial-redos", + "ruleIndex": 0, + "rule": { + "id": "java/polynomial-redos", + "index": 0 + }, + "message": { + "text": "This [regular expression](1) that depends on a [user-provided value](2) may run slow on strings with many repetitions of '\\\\t'." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2855, + "startColumn": 39, + "endColumn": 43 + } + } + } + ], + "partialFingerprints": { + "primaryLocationLineHash": "5270db7557dfd174:1", + "primaryLocationStartColumnFingerprint": "30" + }, + "codeFlows": [ + { + "threadFlows": [ + { + "locations": [ + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/net/URLClassLoader.java", + "uriBaseId": "%SRCROOT%", + "index": 31 + }, + "region": { + "startLine": 296, + "startColumn": 30, + "endColumn": 51 + } + }, + "message": { + "text": "getInputStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 0, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "source" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/net/URLClassLoader.java", + "uriBaseId": "%SRCROOT%", + "index": 31 + }, + "region": { + "startLine": 309, + "startColumn": 20, + "endColumn": 22 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/Class.java", + "uriBaseId": "%SRCROOT%", + "index": 51 + }, + "region": { + "startLine": 2950, + "startColumn": 20, + "endColumn": 48 + } + }, + "message": { + "text": "getResourceAsStream(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/jdk.jfr/share/classes/jdk/jfr/internal/SecuritySupport.java", + "uriBaseId": "%SRCROOT%", + "index": 52 + }, + "region": { + "startLine": 406, + "startColumn": 47, + "endColumn": 94 + } + }, + "message": { + "text": "getResourceAsStream(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/jdk.jfr/share/classes/jdk/jfr/internal/SecuritySupport.java", + "uriBaseId": "%SRCROOT%", + "index": 52 + }, + "region": { + "startLine": 215, + "startColumn": 28, + "endColumn": 43 + } + }, + "message": { + "text": "call(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 809, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "run(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 816, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 571, + "startColumn": 20, + "endColumn": 62 + } + }, + "message": { + "text": "executePrivileged(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 89, + "startColumn": 18, + "endColumn": 51 + } + }, + "message": { + "text": "doPrivileged(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 93, + "startColumn": 16, + "endColumn": 18 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 75, + "startColumn": 31, + "endColumn": 56 + } + }, + "message": { + "text": "getResourceAsStream(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 76, + "startColumn": 20, + "endColumn": 22 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 76, + "startColumn": 20, + "endColumn": 37 + } + }, + "message": { + "text": "readAllBytes(...) : byte[]" + } + }, + "taxa": [ + { + "index": 2, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 80, + "startColumn": 16, + "endColumn": 20 + } + }, + "message": { + "text": "data : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 561, + "startColumn": 22, + "endColumn": 42 + } + }, + "message": { + "text": "handleGetObject(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 574, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "obj : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 326, + "startColumn": 44, + "endColumn": 60 + } + }, + "message": { + "text": "getObject(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 328, + "startColumn": 45, + "endColumn": 50 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 328, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "values [post update] : TextAndMnemonicHashMap [] : byte[]" + } + }, + "taxa": [ + { + "index": 3, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 337, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "values : TextAndMnemonicHashMap [] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 39 + } + }, + "message": { + "text": "getResourceCache(...) : TextAndMnemonicHashMap [] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 48 + } + }, + "message": { + "text": "get(...) : byte[]" + } + }, + "taxa": [ + { + "index": 4, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 42, + "endColumn": 74 + } + }, + "message": { + "text": "getFromResourceBundle(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 16, + "endColumn": 74 + } + }, + "message": { + "text": "...?...:... : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/rtf/MockAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 14 + }, + "region": { + "startLine": 67, + "startColumn": 16, + "endColumn": 33 + } + }, + "message": { + "text": "get(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 151, + "startColumn": 25, + "endColumn": 50 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 154, + "startColumn": 16, + "endColumn": 21 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 328, + "startColumn": 28, + "endColumn": 45 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 336, + "startColumn": 16, + "endColumn": 17 + } + }, + "message": { + "text": "s : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1304, + "startColumn": 27, + "endColumn": 41 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1336, + "startColumn": 39, + "endColumn": 42 + } + }, + "message": { + "text": "arg : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 311, + "startColumn": 45, + "endColumn": 55 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 313, + "startColumn": 22, + "endColumn": 25 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 313, + "startColumn": 9, + "endColumn": 14 + } + }, + "message": { + "text": "super [post update] : StringBuffer" + } + }, + "taxa": [ + { + "index": 5, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1336, + "startColumn": 25, + "endColumn": 31 + } + }, + "message": { + "text": "result [post update] : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1364, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 885, + "startColumn": 16, + "endColumn": 66 + } + }, + "message": { + "text": "subformat(...) : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/Format.java", + "uriBaseId": "%SRCROOT%", + "index": 18 + }, + "region": { + "startLine": 159, + "startColumn": 16, + "endColumn": 69 + } + }, + "message": { + "text": "format(...) : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 713, + "startColumn": 32, + "endColumn": 40 + } + }, + "message": { + "text": "parameter this : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 717, + "startColumn": 27, + "endColumn": 40 + } + }, + "message": { + "text": "toStringCache : String" + } + }, + "taxa": [ + { + "id": "entrypointFieldStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 717, + "startColumn": 16, + "endColumn": 41 + } + }, + "message": { + "text": "new String(...) : String" + } + }, + "taxa": [ + { + "index": 6, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/Format.java", + "uriBaseId": "%SRCROOT%", + "index": 18 + }, + "region": { + "startLine": 159, + "startColumn": 16, + "endColumn": 80 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 860, + "startColumn": 16, + "endColumn": 38 + } + }, + "message": { + "text": "format(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/dv/DatatypeException.java", + "uriBaseId": "%SRCROOT%", + "index": 19 + }, + "region": { + "startLine": 102, + "startColumn": 23, + "endColumn": 64 + } + }, + "message": { + "text": "format(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/dv/DatatypeException.java", + "uriBaseId": "%SRCROOT%", + "index": 19 + }, + "region": { + "startLine": 109, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "msg : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/FactoryConfigurationError.java", + "uriBaseId": "%SRCROOT%", + "index": 20 + }, + "region": { + "startLine": 111, + "startColumn": 20, + "endColumn": 42 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "make/jdk/src/classes/build/tools/module/ModuleInfoExtraTest.java", + "uriBaseId": "%SRCROOT%", + "index": 21 + }, + "region": { + "startLine": 254, + "startColumn": 18, + "endColumn": 32 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2854, + "startColumn": 20, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2855, + "startColumn": 39, + "endColumn": 43 + } + }, + "message": { + "text": "this" + } + } + } + ] + } + ] + }, + { + "threadFlows": [ + { + "locations": [ + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/net/URLClassLoader.java", + "uriBaseId": "%SRCROOT%", + "index": 31 + }, + "region": { + "startLine": 296, + "startColumn": 30, + "endColumn": 51 + } + }, + "message": { + "text": "getInputStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 0, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "source" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/net/URLClassLoader.java", + "uriBaseId": "%SRCROOT%", + "index": 31 + }, + "region": { + "startLine": 309, + "startColumn": 20, + "endColumn": 22 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/java/beans/Beans.java", + "uriBaseId": "%SRCROOT%", + "index": 32 + }, + "region": { + "startLine": 203, + "startColumn": 20, + "endColumn": 52 + } + }, + "message": { + "text": "getResourceAsStream(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/java/beans/Beans.java", + "uriBaseId": "%SRCROOT%", + "index": 32 + }, + "region": { + "startLine": 209, + "startColumn": 60, + "endColumn": 63 + } + }, + "message": { + "text": "ins : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/java/beans/Beans.java", + "uriBaseId": "%SRCROOT%", + "index": 32 + }, + "region": { + "startLine": 498, + "startColumn": 40, + "endColumn": 54 + } + }, + "message": { + "text": "in : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/java/beans/Beans.java", + "uriBaseId": "%SRCROOT%", + "index": 32 + }, + "region": { + "startLine": 501, + "startColumn": 15, + "endColumn": 17 + } + }, + "message": { + "text": "in : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/java/beans/Beans.java", + "uriBaseId": "%SRCROOT%", + "index": 32 + }, + "region": { + "startLine": 501, + "startColumn": 9, + "endColumn": 19 + } + }, + "message": { + "text": "this [post update] : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/java/beans/Beans.java", + "uriBaseId": "%SRCROOT%", + "index": 32 + }, + "region": { + "startLine": 209, + "startColumn": 28, + "endColumn": 69 + } + }, + "message": { + "text": "new ObjectInputStreamWithLoader(...) : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/java/beans/Beans.java", + "uriBaseId": "%SRCROOT%", + "index": 32 + }, + "region": { + "startLine": 211, + "startColumn": 26, + "endColumn": 30 + } + }, + "message": { + "text": "oins : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 494, + "startColumn": 25, + "endColumn": 35 + } + }, + "message": { + "text": "parameter this : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 496, + "startColumn": 16, + "endColumn": 40 + } + }, + "message": { + "text": "this <.method> : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 525, + "startColumn": 26, + "endColumn": 36 + } + }, + "message": { + "text": "parameter this : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 538, + "startColumn": 26, + "endColumn": 50 + } + }, + "message": { + "text": "this <.method> : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1692, + "startColumn": 20, + "endColumn": 31 + } + }, + "message": { + "text": "parameter this : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1748, + "startColumn": 41, + "endColumn": 60 + } + }, + "message": { + "text": "this <.method> : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2132, + "startColumn": 20, + "endColumn": 29 + } + }, + "message": { + "text": "parameter this : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2163, + "startColumn": 17, + "endColumn": 20 + } + }, + "message": { + "text": "this <.field> : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2163, + "startColumn": 17, + "endColumn": 20 + } + }, + "message": { + "text": "bin : BlockDataInputStream [in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 3368, + "startColumn": 21, + "endColumn": 30 + } + }, + "message": { + "text": "parameter this : BlockDataInputStream [in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 3372, + "startColumn": 25, + "endColumn": 48 + } + }, + "message": { + "text": "this <.method> : BlockDataInputStream [in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 3327, + "startColumn": 13, + "endColumn": 17 + } + }, + "message": { + "text": "parameter this : BlockDataInputStream [in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 3348, + "startColumn": 24, + "endColumn": 26 + } + }, + "message": { + "text": "this <.field> : BlockDataInputStream [in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 3348, + "startColumn": 24, + "endColumn": 26 + } + }, + "message": { + "text": "in : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 3348, + "startColumn": 32, + "endColumn": 33 + } + }, + "message": { + "text": "b [post update] : byte[]" + } + }, + "taxa": [ + { + "index": 1, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 408, + "startColumn": 15, + "endColumn": 43 + } + }, + "message": { + "text": "new BlockDataInputStream(...) : BlockDataInputStream" + } + }, + "taxa": [ + { + "id": "AdditionalTaintStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 408, + "startColumn": 9, + "endColumn": 12 + } + }, + "message": { + "text": "this <.field> [post update] : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/com/sun/jndi/ldap/Obj.java", + "uriBaseId": "%SRCROOT%", + "index": 34 + }, + "region": { + "startLine": 539, + "startColumn": 21, + "endColumn": 49 + } + }, + "message": { + "text": "new ObjectInputStream(...) : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/com/sun/jndi/ldap/Obj.java", + "uriBaseId": "%SRCROOT%", + "index": 34 + }, + "region": { + "startLine": 541, + "startColumn": 24, + "endColumn": 32 + } + }, + "message": { + "text": "deserial : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 494, + "startColumn": 25, + "endColumn": 35 + } + }, + "message": { + "text": "parameter this : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 496, + "startColumn": 16, + "endColumn": 40 + } + }, + "message": { + "text": "this <.method> : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 525, + "startColumn": 26, + "endColumn": 36 + } + }, + "message": { + "text": "parameter this : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 538, + "startColumn": 26, + "endColumn": 50 + } + }, + "message": { + "text": "this <.method> : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1692, + "startColumn": 20, + "endColumn": 31 + } + }, + "message": { + "text": "parameter this : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1742, + "startColumn": 41, + "endColumn": 61 + } + }, + "message": { + "text": "this <.method> : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2115, + "startColumn": 20, + "endColumn": 30 + } + }, + "message": { + "text": "parameter this : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2118, + "startColumn": 36, + "endColumn": 39 + } + }, + "message": { + "text": "this <.field> : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2118, + "startColumn": 36, + "endColumn": 39 + } + }, + "message": { + "text": "bin : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2118, + "startColumn": 36, + "endColumn": 49 + } + }, + "message": { + "text": "readUTF(...) : String" + } + }, + "taxa": [ + { + "index": 9, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2125, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1742, + "startColumn": 41, + "endColumn": 61 + } + }, + "message": { + "text": "readString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1807, + "startColumn": 33, + "endColumn": 43 + } + }, + "message": { + "text": "obj : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1809, + "startColumn": 20, + "endColumn": 23 + } + }, + "message": { + "text": "obj : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1742, + "startColumn": 28, + "endColumn": 62 + } + }, + "message": { + "text": "checkResolve(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 538, + "startColumn": 26, + "endColumn": 50 + } + }, + "message": { + "text": "readObject0(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 548, + "startColumn": 20, + "endColumn": 23 + } + }, + "message": { + "text": "obj : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 496, + "startColumn": 16, + "endColumn": 40 + } + }, + "message": { + "text": "readObject(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/com/sun/jndi/ldap/Obj.java", + "uriBaseId": "%SRCROOT%", + "index": 34 + }, + "region": { + "startLine": 541, + "startColumn": 24, + "endColumn": 45 + } + }, + "message": { + "text": "readObject(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/com/sun/jndi/ldap/Obj.java", + "uriBaseId": "%SRCROOT%", + "index": 34 + }, + "region": { + "startLine": 240, + "startColumn": 24, + "endColumn": 65 + } + }, + "message": { + "text": "deserializeObject(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/com/sun/jndi/ldap/LdapBindingEnumeration.java", + "uriBaseId": "%SRCROOT%", + "index": 35 + }, + "region": { + "startLine": 65, + "startColumn": 62, + "endColumn": 85 + } + }, + "message": { + "text": "decodeObject(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 809, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "run(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 816, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 714, + "startColumn": 20, + "endColumn": 62 + } + }, + "message": { + "text": "executePrivileged(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1586, + "startColumn": 28, + "endLine": 1588, + "endColumn": 73 + } + }, + "message": { + "text": "doPrivileged(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1632, + "startColumn": 20, + "endColumn": 71 + } + }, + "message": { + "text": "unwrap(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1071, + "startColumn": 13, + "endColumn": 92 + } + }, + "message": { + "text": "unwrap(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1075, + "startColumn": 61, + "endColumn": 74 + } + }, + "message": { + "text": "handbackValue : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1075, + "startColumn": 17, + "endColumn": 76 + } + }, + "message": { + "text": "{...} : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1087, + "startColumn": 15, + "endColumn": 21 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1380, + "startColumn": 42, + "endColumn": 63 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1402, + "startColumn": 52, + "endColumn": 58 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1304, + "startColumn": 51, + "endColumn": 66 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1306, + "startColumn": 27, + "endColumn": 33 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1306, + "startColumn": 13, + "endColumn": 17 + } + }, + "message": { + "text": "this [post update] : PrivilegedOperation [params, []] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1402, + "startColumn": 17, + "endColumn": 59 + } + }, + "message": { + "text": "new PrivilegedOperation(...) : PrivilegedOperation [params, []] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1405, + "startColumn": 28, + "endColumn": 30 + } + }, + "message": { + "text": "op : PrivilegedOperation [params, []] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1309, + "startColumn": 23, + "endColumn": 26 + } + }, + "message": { + "text": "parameter this : PrivilegedOperation [params, []] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1310, + "startColumn": 43, + "endColumn": 49 + } + }, + "message": { + "text": "this <.field> : PrivilegedOperation [params, []] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1310, + "startColumn": 43, + "endColumn": 49 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1421, + "startColumn": 47, + "endColumn": 62 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1427, + "startColumn": 52, + "endColumn": 58 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1427, + "startColumn": 52, + "endColumn": 61 + } + }, + "message": { + "text": "...[...] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1427, + "startColumn": 44, + "endColumn": 61 + } + }, + "message": { + "text": "(...)... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 3 + }, + "region": { + "startLine": 170, + "startColumn": 39, + "endColumn": 55 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 3 + }, + "region": { + "startLine": 177, + "startColumn": 21, + "endColumn": 30 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 247, + "startColumn": 29, + "endColumn": 45 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 248, + "startColumn": 40, + "endColumn": 49 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 303, + "startColumn": 70, + "endColumn": 80 + } + }, + "message": { + "text": "arg : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 333, + "startColumn": 56, + "endColumn": 59 + } + }, + "message": { + "text": "arg : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 360, + "startColumn": 61, + "endColumn": 77 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 362, + "startColumn": 50, + "endColumn": 59 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 368, + "startColumn": 59, + "endColumn": 75 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 387, + "startColumn": 16, + "endColumn": 25 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2854, + "startColumn": 20, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2855, + "startColumn": 39, + "endColumn": 43 + } + }, + "message": { + "text": "this" + } + } + } + ] + } + ] + }, + { + "threadFlows": [ + { + "locations": [ + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/net/URLClassLoader.java", + "uriBaseId": "%SRCROOT%", + "index": 31 + }, + "region": { + "startLine": 296, + "startColumn": 30, + "endColumn": 51 + } + }, + "message": { + "text": "getInputStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 0, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "source" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/net/URLClassLoader.java", + "uriBaseId": "%SRCROOT%", + "index": 31 + }, + "region": { + "startLine": 309, + "startColumn": 20, + "endColumn": 22 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/jdk/xml/internal/SecuritySupport.java", + "uriBaseId": "%SRCROOT%", + "index": 53 + }, + "region": { + "startLine": 465, + "startColumn": 23, + "endColumn": 51 + } + }, + "message": { + "text": "getResourceAsStream(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/jdk/xml/internal/SecuritySupport.java", + "uriBaseId": "%SRCROOT%", + "index": 53 + }, + "region": { + "startLine": 467, + "startColumn": 20, + "endColumn": 23 + } + }, + "message": { + "text": "ris : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 778, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "run(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 785, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 319, + "startColumn": 16, + "endColumn": 76 + } + }, + "message": { + "text": "executePrivileged(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 1592, + "startColumn": 13, + "endLine": 1600, + "endColumn": 15 + } + }, + "message": { + "text": "doPrivileged(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 1604, + "startColumn": 41, + "endColumn": 52 + } + }, + "message": { + "text": "inputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/DocumentBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 54 + }, + "region": { + "startLine": 115, + "startColumn": 27, + "endColumn": 41 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/DocumentBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 54 + }, + "region": { + "startLine": 121, + "startColumn": 42, + "endColumn": 44 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 127, + "startColumn": 25, + "endColumn": 47 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 129, + "startColumn": 23, + "endColumn": 33 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 248, + "startColumn": 32, + "endColumn": 54 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 250, + "startColumn": 27, + "endColumn": 37 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 250, + "startColumn": 9, + "endColumn": 13 + } + }, + "message": { + "text": "this [post update] : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 129, + "startColumn": 9, + "endColumn": 34 + } + }, + "message": { + "text": "this <.method> [post update] : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/DocumentBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 54 + }, + "region": { + "startLine": 121, + "startColumn": 26, + "endColumn": 45 + } + }, + "message": { + "text": "new InputSource(...) : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/DocumentBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 54 + }, + "region": { + "startLine": 122, + "startColumn": 22, + "endColumn": 24 + } + }, + "message": { + "text": "in : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 56 + }, + "region": { + "startLine": 329, + "startColumn": 27, + "endColumn": 41 + } + }, + "message": { + "text": "is : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/jaxp/DocumentBuilderImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 56 + }, + "region": { + "startLine": 342, + "startColumn": 25, + "endColumn": 27 + } + }, + "message": { + "text": "is : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 235, + "startColumn": 23, + "endColumn": 46 + } + }, + "message": { + "text": "inputSource : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 244, + "startColumn": 42, + "endColumn": 53 + } + }, + "message": { + "text": "inputSource : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 264, + "startColumn": 24, + "endColumn": 37 + } + }, + "message": { + "text": "parameter this : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 266, + "startColumn": 16, + "endColumn": 26 + } + }, + "message": { + "text": "this <.field> : InputSource [byteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/org/xml/sax/InputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 55 + }, + "region": { + "startLine": 266, + "startColumn": 16, + "endColumn": 26 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 244, + "startColumn": 42, + "endColumn": 69 + } + }, + "message": { + "text": "getByteStream(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 234, + "startColumn": 31, + "endColumn": 53 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 235, + "startColumn": 23, + "endColumn": 33 + } + }, + "message": { + "text": "byteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 235, + "startColumn": 9, + "endColumn": 20 + } + }, + "message": { + "text": "this <.field> [post update] : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 244, + "startColumn": 13, + "endColumn": 27 + } + }, + "message": { + "text": "xmlInputSource [post update] : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/DOMParser.java", + "uriBaseId": "%SRCROOT%", + "index": 57 + }, + "region": { + "startLine": 247, + "startColumn": 19, + "endColumn": 33 + } + }, + "message": { + "text": "xmlInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLParser.java", + "uriBaseId": "%SRCROOT%", + "index": 59 + }, + "region": { + "startLine": 128, + "startColumn": 23, + "endColumn": 49 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/parsers/XMLParser.java", + "uriBaseId": "%SRCROOT%", + "index": 59 + }, + "region": { + "startLine": 141, + "startColumn": 30, + "endColumn": 41 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java", + "uriBaseId": "%SRCROOT%", + "index": 60 + }, + "region": { + "startLine": 686, + "startColumn": 23, + "endColumn": 44 + } + }, + "message": { + "text": "source : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java", + "uriBaseId": "%SRCROOT%", + "index": 60 + }, + "region": { + "startLine": 695, + "startColumn": 28, + "endColumn": 34 + } + }, + "message": { + "text": "source : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java", + "uriBaseId": "%SRCROOT%", + "index": 60 + }, + "region": { + "startLine": 556, + "startColumn": 32, + "endColumn": 58 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java", + "uriBaseId": "%SRCROOT%", + "index": 60 + }, + "region": { + "startLine": 564, + "startColumn": 24, + "endColumn": 35 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java", + "uriBaseId": "%SRCROOT%", + "index": 60 + }, + "region": { + "startLine": 564, + "startColumn": 9, + "endColumn": 21 + } + }, + "message": { + "text": "this <.field> [post update] : SchemaParsingConfig [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java", + "uriBaseId": "%SRCROOT%", + "index": 60 + }, + "region": { + "startLine": 695, + "startColumn": 13, + "endColumn": 35 + } + }, + "message": { + "text": "this <.method> [post update] : SchemaParsingConfig [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java", + "uriBaseId": "%SRCROOT%", + "index": 60 + }, + "region": { + "startLine": 696, + "startColumn": 13, + "endColumn": 24 + } + }, + "message": { + "text": "this <.method> : SchemaParsingConfig [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java", + "uriBaseId": "%SRCROOT%", + "index": 60 + }, + "region": { + "startLine": 584, + "startColumn": 20, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : SchemaParsingConfig [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java", + "uriBaseId": "%SRCROOT%", + "index": 60 + }, + "region": { + "startLine": 593, + "startColumn": 70, + "endColumn": 82 + } + }, + "message": { + "text": "this <.field> : SchemaParsingConfig [fInputSource, fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/xs/opti/SchemaParsingConfig.java", + "uriBaseId": "%SRCROOT%", + "index": 60 + }, + "region": { + "startLine": 593, + "startColumn": 70, + "endColumn": 82 + } + }, + "message": { + "text": "fInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLVersionDetector.java", + "uriBaseId": "%SRCROOT%", + "index": 61 + }, + "region": { + "startLine": 149, + "startColumn": 38, + "endColumn": 64 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLVersionDetector.java", + "uriBaseId": "%SRCROOT%", + "index": 61 + }, + "region": { + "startLine": 150, + "startColumn": 74, + "endColumn": 85 + } + }, + "message": { + "text": "inputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 626, + "startColumn": 70, + "endColumn": 99 + } + }, + "message": { + "text": "xmlInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 648, + "startColumn": 22, + "endColumn": 36 + } + }, + "message": { + "text": "xmlInputSource : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 239, + "startColumn": 24, + "endColumn": 37 + } + }, + "message": { + "text": "parameter this : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 240, + "startColumn": 16, + "endColumn": 27 + } + }, + "message": { + "text": "this <.field> : XMLInputSource [fByteStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/xni/parser/XMLInputSource.java", + "uriBaseId": "%SRCROOT%", + "index": 58 + }, + "region": { + "startLine": 240, + "startColumn": 16, + "endColumn": 27 + } + }, + "message": { + "text": "fByteStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 648, + "startColumn": 22, + "endColumn": 52 + } + }, + "message": { + "text": "getByteStream(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 80, + "endColumn": 86 + } + }, + "message": { + "text": "stream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3003, + "startColumn": 38, + "endColumn": 52 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 28, + "endColumn": 30 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 13, + "endColumn": 25 + } + }, + "message": { + "text": "this <.field> [post update] : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 54, + "endColumn": 87 + } + }, + "message": { + "text": "new RewindableInputStream(...) : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 720, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "stream : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3089, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3099, + "startColumn": 24, + "endColumn": 36 + } + }, + "message": { + "text": "this <.field> : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3099, + "startColumn": 24, + "endColumn": 36 + } + }, + "message": { + "text": "fInputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3687, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3701, + "startColumn": 22, + "endLine": 3702, + "endColumn": 71 + } + }, + "message": { + "text": "this <.method> : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3649, + "startColumn": 20, + "endColumn": 24 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 30, + "endColumn": 35 + } + }, + "message": { + "text": "super : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 41, + "endColumn": 42 + } + }, + "message": { + "text": "b [post update] : byte[]" + } + }, + "taxa": [ + { + "index": 1, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1964, + "startColumn": 47, + "endColumn": 93 + } + }, + "message": { + "text": "new HttpInputStream(...) : HttpInputStream" + } + }, + "taxa": [ + { + "id": "AdditionalTaintStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1985, + "startColumn": 24, + "endColumn": 35 + } + }, + "message": { + "text": "inputStream : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1581, + "startColumn": 24, + "endColumn": 41 + } + }, + "message": { + "text": "getInputStream0(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/net/URL.java", + "uriBaseId": "%SRCROOT%", + "index": 22 + }, + "region": { + "startLine": 1317, + "startColumn": 16, + "endColumn": 49 + } + }, + "message": { + "text": "getInputStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 586, + "startColumn": 43, + "endColumn": 59 + } + }, + "message": { + "text": "openStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 587, + "startColumn": 64, + "endColumn": 66 + } + }, + "message": { + "text": "in : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 587, + "startColumn": 42, + "endColumn": 79 + } + }, + "message": { + "text": "new InputStreamReader(...) : InputStreamReader" + } + }, + "taxa": [ + { + "index": 7, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 591, + "startColumn": 37, + "endColumn": 43 + } + }, + "message": { + "text": "reader : InputStreamReader" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/Reader.java", + "uriBaseId": "%SRCROOT%", + "index": 24 + }, + "region": { + "startLine": 264, + "startColumn": 16, + "endColumn": 20 + } + }, + "message": { + "text": "parameter this : InputStreamReader" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/Reader.java", + "uriBaseId": "%SRCROOT%", + "index": 24 + }, + "region": { + "startLine": 265, + "startColumn": 16, + "endColumn": 42 + } + }, + "message": { + "text": "this <.method> : InputStreamReader" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/Reader.java", + "uriBaseId": "%SRCROOT%", + "index": 24 + }, + "region": { + "startLine": 265, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "cbuf [post update] : char[]" + } + }, + "taxa": [ + { + "index": 8, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 591, + "startColumn": 49, + "endColumn": 52 + } + }, + "message": { + "text": "buf [post update] : char[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 592, + "startColumn": 39, + "endColumn": 42 + } + }, + "message": { + "text": "buf : char[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 232, + "startColumn": 33, + "endColumn": 43 + } + }, + "message": { + "text": "str : char[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 233, + "startColumn": 22, + "endColumn": 25 + } + }, + "message": { + "text": "str : char[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 233, + "startColumn": 9, + "endColumn": 14 + } + }, + "message": { + "text": "super [post update] : StringBuilder" + } + }, + "taxa": [ + { + "index": 5, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 592, + "startColumn": 29, + "endColumn": 31 + } + }, + "message": { + "text": "sb [post update] : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 595, + "startColumn": 34, + "endColumn": 36 + } + }, + "message": { + "text": "sb : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 451, + "startColumn": 19, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 453, + "startColumn": 27, + "endColumn": 31 + } + }, + "message": { + "text": "this : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1486, + "startColumn": 19, + "endColumn": 40 + } + }, + "message": { + "text": "builder : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1487, + "startColumn": 14, + "endColumn": 21 + } + }, + "message": { + "text": "builder : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1487, + "startColumn": 9, + "endColumn": 29 + } + }, + "message": { + "text": "this [post update] : String" + } + }, + "taxa": [ + { + "index": 6, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 453, + "startColumn": 16, + "endColumn": 32 + } + }, + "message": { + "text": "new String(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 595, + "startColumn": 34, + "endColumn": 47 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 604, + "startColumn": 40, + "endColumn": 43 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2718, + "startColumn": 19, + "endColumn": 28 + } + }, + "message": { + "text": "parameter this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2722, + "startColumn": 20, + "endColumn": 24 + } + }, + "message": { + "text": "this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 604, + "startColumn": 40, + "endColumn": 60 + } + }, + "message": { + "text": "substring(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 778, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "run(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 785, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 319, + "startColumn": 16, + "endColumn": 76 + } + }, + "message": { + "text": "executePrivileged(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/security/provider/SubjectCodeSource.java", + "uriBaseId": "%SRCROOT%", + "index": 26 + }, + "region": { + "startLine": 369, + "startColumn": 25, + "endLine": 374, + "endColumn": 27 + } + }, + "message": { + "text": "doPrivileged(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/security/provider/SubjectCodeSource.java", + "uriBaseId": "%SRCROOT%", + "index": 26 + }, + "region": { + "startLine": 386, + "startColumn": 16, + "endColumn": 24 + } + }, + "message": { + "text": "returnMe : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 4230, + "startColumn": 41, + "endColumn": 55 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 4230, + "startColumn": 16, + "endColumn": 55 + } + }, + "message": { + "text": "...?...:... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 173, + "startColumn": 23, + "endColumn": 42 + } + }, + "message": { + "text": "valueOf(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 178, + "startColumn": 33, + "endColumn": 43 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 179, + "startColumn": 22, + "endColumn": 25 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 179, + "startColumn": 9, + "endColumn": 14 + } + }, + "message": { + "text": "super [post update] : StringBuilder" + } + }, + "taxa": [ + { + "index": 5, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 173, + "startColumn": 16, + "endColumn": 43 + } + }, + "message": { + "text": "this <.method> [post update] : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/BasicAttribute.java", + "uriBaseId": "%SRCROOT%", + "index": 27 + }, + "region": { + "startLine": 221, + "startColumn": 17, + "endColumn": 23 + } + }, + "message": { + "text": "answer [post update] : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/BasicAttribute.java", + "uriBaseId": "%SRCROOT%", + "index": 27 + }, + "region": { + "startLine": 225, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "answer : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 451, + "startColumn": 19, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 453, + "startColumn": 27, + "endColumn": 31 + } + }, + "message": { + "text": "this : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1486, + "startColumn": 19, + "endColumn": 40 + } + }, + "message": { + "text": "builder : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1487, + "startColumn": 14, + "endColumn": 21 + } + }, + "message": { + "text": "builder : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1487, + "startColumn": 9, + "endColumn": 29 + } + }, + "message": { + "text": "this [post update] : String" + } + }, + "taxa": [ + { + "index": 6, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 453, + "startColumn": 16, + "endColumn": 32 + } + }, + "message": { + "text": "new String(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/BasicAttribute.java", + "uriBaseId": "%SRCROOT%", + "index": 27 + }, + "region": { + "startLine": 225, + "startColumn": 16, + "endColumn": 33 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/ModificationItem.java", + "uriBaseId": "%SRCROOT%", + "index": 28 + }, + "region": { + "startLine": 118, + "startColumn": 41, + "endColumn": 56 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/ModificationItem.java", + "uriBaseId": "%SRCROOT%", + "index": 28 + }, + "region": { + "startLine": 118, + "startColumn": 21, + "endColumn": 56 + } + }, + "message": { + "text": "... + ... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/AttributeModificationException.java", + "uriBaseId": "%SRCROOT%", + "index": 29 + }, + "region": { + "startLine": 131, + "startColumn": 22, + "endColumn": 43 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/AttributeModificationException.java", + "uriBaseId": "%SRCROOT%", + "index": 29 + }, + "region": { + "startLine": 133, + "startColumn": 16, + "endColumn": 20 + } + }, + "message": { + "text": "orig : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/WriteAbortedException.java", + "uriBaseId": "%SRCROOT%", + "index": 30 + }, + "region": { + "startLine": 74, + "startColumn": 48, + "endColumn": 65 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/WriteAbortedException.java", + "uriBaseId": "%SRCROOT%", + "index": 30 + }, + "region": { + "startLine": 74, + "startColumn": 20, + "endColumn": 65 + } + }, + "message": { + "text": "... + ... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/FactoryConfigurationError.java", + "uriBaseId": "%SRCROOT%", + "index": 20 + }, + "region": { + "startLine": 111, + "startColumn": 20, + "endColumn": 42 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "make/jdk/src/classes/build/tools/module/ModuleInfoExtraTest.java", + "uriBaseId": "%SRCROOT%", + "index": 21 + }, + "region": { + "startLine": 270, + "startColumn": 18, + "endColumn": 32 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2854, + "startColumn": 20, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2855, + "startColumn": 39, + "endColumn": 43 + } + }, + "message": { + "text": "this" + } + } + } + ] + } + ] + }, + { + "threadFlows": [ + { + "locations": [ + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/net/URLClassLoader.java", + "uriBaseId": "%SRCROOT%", + "index": 31 + }, + "region": { + "startLine": 296, + "startColumn": 30, + "endColumn": 51 + } + }, + "message": { + "text": "getInputStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 0, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "source" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/net/URLClassLoader.java", + "uriBaseId": "%SRCROOT%", + "index": 31 + }, + "region": { + "startLine": 309, + "startColumn": 20, + "endColumn": 22 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/javax/management/loading/MLet.java", + "uriBaseId": "%SRCROOT%", + "index": 62 + }, + "region": { + "startLine": 1228, + "startColumn": 26, + "endColumn": 55 + } + }, + "message": { + "text": "getResourceAsStream(...) : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/javax/management/loading/MLet.java", + "uriBaseId": "%SRCROOT%", + "index": 62 + }, + "region": { + "startLine": 1231, + "startColumn": 67, + "endColumn": 69 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/javax/management/loading/MLetObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 63 + }, + "region": { + "startLine": 51, + "startColumn": 34, + "endColumn": 48 + } + }, + "message": { + "text": "in : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/javax/management/loading/MLetObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 63 + }, + "region": { + "startLine": 54, + "startColumn": 15, + "endColumn": 17 + } + }, + "message": { + "text": "in : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/javax/management/loading/MLetObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 63 + }, + "region": { + "startLine": 54, + "startColumn": 9, + "endColumn": 19 + } + }, + "message": { + "text": "this [post update] : MLetObjectInputStream [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/javax/management/loading/MLet.java", + "uriBaseId": "%SRCROOT%", + "index": 62 + }, + "region": { + "startLine": 1231, + "startColumn": 41, + "endColumn": 76 + } + }, + "message": { + "text": "new MLetObjectInputStream(...) : MLetObjectInputStream [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/javax/management/loading/MLet.java", + "uriBaseId": "%SRCROOT%", + "index": 62 + }, + "region": { + "startLine": 1232, + "startColumn": 36, + "endColumn": 39 + } + }, + "message": { + "text": "ois : MLetObjectInputStream [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 494, + "startColumn": 25, + "endColumn": 35 + } + }, + "message": { + "text": "parameter this : MLetObjectInputStream [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 496, + "startColumn": 16, + "endColumn": 40 + } + }, + "message": { + "text": "this <.method> : MLetObjectInputStream [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 525, + "startColumn": 26, + "endColumn": 36 + } + }, + "message": { + "text": "parameter this : MLetObjectInputStream [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 538, + "startColumn": 26, + "endColumn": 50 + } + }, + "message": { + "text": "this <.method> : MLetObjectInputStream [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1692, + "startColumn": 20, + "endColumn": 31 + } + }, + "message": { + "text": "parameter this : MLetObjectInputStream [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1748, + "startColumn": 41, + "endColumn": 60 + } + }, + "message": { + "text": "this <.method> : MLetObjectInputStream [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2132, + "startColumn": 20, + "endColumn": 29 + } + }, + "message": { + "text": "parameter this : MLetObjectInputStream [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2163, + "startColumn": 17, + "endColumn": 20 + } + }, + "message": { + "text": "this <.field> : MLetObjectInputStream [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2163, + "startColumn": 17, + "endColumn": 20 + } + }, + "message": { + "text": "bin : BlockDataInputStream [in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 3368, + "startColumn": 21, + "endColumn": 30 + } + }, + "message": { + "text": "parameter this : BlockDataInputStream [in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 3372, + "startColumn": 25, + "endColumn": 48 + } + }, + "message": { + "text": "this <.method> : BlockDataInputStream [in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 3327, + "startColumn": 13, + "endColumn": 17 + } + }, + "message": { + "text": "parameter this : BlockDataInputStream [in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 3342, + "startColumn": 29, + "endColumn": 31 + } + }, + "message": { + "text": "this <.field> : BlockDataInputStream [in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 3342, + "startColumn": 29, + "endColumn": 31 + } + }, + "message": { + "text": "in : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 3342, + "startColumn": 37, + "endColumn": 40 + } + }, + "message": { + "text": "buf [post update] : byte[]" + } + }, + "taxa": [ + { + "index": 1, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 3344, + "startColumn": 38, + "endColumn": 41 + } + }, + "message": { + "text": "buf : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 3344, + "startColumn": 46, + "endColumn": 47 + } + }, + "message": { + "text": "b [post update] : byte[]" + } + }, + "taxa": [ + { + "index": 10, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 408, + "startColumn": 15, + "endColumn": 43 + } + }, + "message": { + "text": "new BlockDataInputStream(...) : BlockDataInputStream" + } + }, + "taxa": [ + { + "id": "AdditionalTaintStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 408, + "startColumn": 9, + "endColumn": 12 + } + }, + "message": { + "text": "this <.field> [post update] : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.rmi/share/classes/sun/rmi/server/MarshalInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 64 + }, + "region": { + "startLine": 109, + "startColumn": 9, + "endColumn": 19 + } + }, + "message": { + "text": "this [post update] : MarshalInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.rmi/share/classes/java/rmi/MarshalledObject.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 325, + "startColumn": 13, + "endColumn": 26 + } + }, + "message": { + "text": "this [post update] : MarshalledObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.rmi/share/classes/java/rmi/MarshalledObject.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 181, + "startColumn": 13, + "endColumn": 73 + } + }, + "message": { + "text": "new MarshalledObjectInputStream(...) : MarshalledObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.rmi/share/classes/java/rmi/MarshalledObject.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 183, + "startColumn": 21, + "endColumn": 23 + } + }, + "message": { + "text": "in : MarshalledObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 494, + "startColumn": 25, + "endColumn": 35 + } + }, + "message": { + "text": "parameter this : MarshalledObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 496, + "startColumn": 16, + "endColumn": 40 + } + }, + "message": { + "text": "this <.method> : MarshalledObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 525, + "startColumn": 26, + "endColumn": 36 + } + }, + "message": { + "text": "parameter this : MarshalledObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 538, + "startColumn": 26, + "endColumn": 50 + } + }, + "message": { + "text": "this <.method> : MarshalledObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1692, + "startColumn": 20, + "endColumn": 31 + } + }, + "message": { + "text": "parameter this : MarshalledObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1742, + "startColumn": 41, + "endColumn": 61 + } + }, + "message": { + "text": "this <.method> : MarshalledObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2115, + "startColumn": 20, + "endColumn": 30 + } + }, + "message": { + "text": "parameter this : MarshalledObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2118, + "startColumn": 36, + "endColumn": 39 + } + }, + "message": { + "text": "this <.field> : MarshalledObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2118, + "startColumn": 36, + "endColumn": 39 + } + }, + "message": { + "text": "bin : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2118, + "startColumn": 36, + "endColumn": 49 + } + }, + "message": { + "text": "readUTF(...) : String" + } + }, + "taxa": [ + { + "index": 9, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2125, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1742, + "startColumn": 41, + "endColumn": 61 + } + }, + "message": { + "text": "readString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1807, + "startColumn": 33, + "endColumn": 43 + } + }, + "message": { + "text": "obj : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1811, + "startColumn": 36, + "endColumn": 39 + } + }, + "message": { + "text": "obj : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 927, + "startColumn": 36, + "endColumn": 46 + } + }, + "message": { + "text": "obj : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 928, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "obj : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1811, + "startColumn": 22, + "endColumn": 40 + } + }, + "message": { + "text": "resolveObject(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1824, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "rep : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1742, + "startColumn": 28, + "endColumn": 62 + } + }, + "message": { + "text": "checkResolve(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 538, + "startColumn": 26, + "endColumn": 50 + } + }, + "message": { + "text": "readObject0(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 548, + "startColumn": 20, + "endColumn": 23 + } + }, + "message": { + "text": "obj : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 496, + "startColumn": 16, + "endColumn": 40 + } + }, + "message": { + "text": "readObject(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.rmi/share/classes/java/rmi/MarshalledObject.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 183, + "startColumn": 21, + "endColumn": 36 + } + }, + "message": { + "text": "readObject(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.rmi/share/classes/java/rmi/MarshalledObject.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 183, + "startColumn": 17, + "endColumn": 36 + } + }, + "message": { + "text": "(...)... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.rmi/share/classes/java/rmi/MarshalledObject.java", + "uriBaseId": "%SRCROOT%", + "index": 65 + }, + "region": { + "startLine": 185, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "obj : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1590, + "startColumn": 46, + "endColumn": 54 + } + }, + "message": { + "text": "get(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/Class.java", + "uriBaseId": "%SRCROOT%", + "index": 51 + }, + "region": { + "startLine": 3989, + "startColumn": 19, + "endColumn": 29 + } + }, + "message": { + "text": "obj : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/Class.java", + "uriBaseId": "%SRCROOT%", + "index": 51 + }, + "region": { + "startLine": 3992, + "startColumn": 16, + "endColumn": 23 + } + }, + "message": { + "text": "(...)... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1590, + "startColumn": 28, + "endColumn": 55 + } + }, + "message": { + "text": "cast(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1632, + "startColumn": 20, + "endColumn": 71 + } + }, + "message": { + "text": "unwrap(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1210, + "startColumn": 13, + "endColumn": 92 + } + }, + "message": { + "text": "unwrap(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1214, + "startColumn": 61, + "endColumn": 74 + } + }, + "message": { + "text": "handbackValue : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1214, + "startColumn": 17, + "endColumn": 76 + } + }, + "message": { + "text": "{...} : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1226, + "startColumn": 15, + "endColumn": 21 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1380, + "startColumn": 42, + "endColumn": 63 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1402, + "startColumn": 52, + "endColumn": 58 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1304, + "startColumn": 51, + "endColumn": 66 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1306, + "startColumn": 27, + "endColumn": 33 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1306, + "startColumn": 13, + "endColumn": 17 + } + }, + "message": { + "text": "this [post update] : PrivilegedOperation [params, []] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1402, + "startColumn": 17, + "endColumn": 59 + } + }, + "message": { + "text": "new PrivilegedOperation(...) : PrivilegedOperation [params, []] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1412, + "startColumn": 54, + "endColumn": 56 + } + }, + "message": { + "text": "op : PrivilegedOperation [params, []] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 707, + "startColumn": 22, + "endColumn": 57 + } + }, + "message": { + "text": "action : PrivilegedOperation [params, []] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 714, + "startColumn": 38, + "endColumn": 44 + } + }, + "message": { + "text": "action : PrivilegedOperation [params, []] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 798, + "startColumn": 27, + "endColumn": 62 + } + }, + "message": { + "text": "action : PrivilegedOperation [params, []] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 809, + "startColumn": 20, + "endColumn": 26 + } + }, + "message": { + "text": "action : PrivilegedOperation [params, []] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1309, + "startColumn": 23, + "endColumn": 26 + } + }, + "message": { + "text": "parameter this : PrivilegedOperation [params, []] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1310, + "startColumn": 43, + "endColumn": 49 + } + }, + "message": { + "text": "this <.field> : PrivilegedOperation [params, []] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1310, + "startColumn": 43, + "endColumn": 49 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1421, + "startColumn": 47, + "endColumn": 62 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1431, + "startColumn": 52, + "endColumn": 58 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1431, + "startColumn": 52, + "endColumn": 61 + } + }, + "message": { + "text": "...[...] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1431, + "startColumn": 44, + "endColumn": 61 + } + }, + "message": { + "text": "(...)... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 3 + }, + "region": { + "startLine": 220, + "startColumn": 39, + "endColumn": 55 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 3 + }, + "region": { + "startLine": 230, + "startColumn": 21, + "endColumn": 30 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 247, + "startColumn": 29, + "endColumn": 45 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 248, + "startColumn": 40, + "endColumn": 49 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 303, + "startColumn": 70, + "endColumn": 80 + } + }, + "message": { + "text": "arg : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 333, + "startColumn": 56, + "endColumn": 59 + } + }, + "message": { + "text": "arg : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 360, + "startColumn": 61, + "endColumn": 77 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 362, + "startColumn": 50, + "endColumn": 59 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 368, + "startColumn": 59, + "endColumn": 75 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 387, + "startColumn": 16, + "endColumn": 25 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2854, + "startColumn": 20, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2855, + "startColumn": 39, + "endColumn": 43 + } + }, + "message": { + "text": "this" + } + } + } + ] + } + ] + } + ], + "relatedLocations": [ + { + "id": 1, + "physicalLocation": { + "artifactLocation": { + "uri": "src/jdk.compiler/share/classes/com/sun/tools/javac/main/Main.java", + "uriBaseId": "%SRCROOT%", + "index": 1 + }, + "region": { + "startLine": 379, + "startColumn": 42, + "endColumn": 46 + } + }, + "message": { + "text": "regular expression" + } + }, + { + "id": 2, + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/net/URLClassLoader.java", + "uriBaseId": "%SRCROOT%", + "index": 31 + }, + "region": { + "startLine": 296, + "startColumn": 30, + "endColumn": 51 + } + }, + "message": { + "text": "user-provided value" + } + } + ] + } +} diff --git a/extensions/ql-vscode/test/unit-tests/compare/differentPathsSameSourceSink.json b/extensions/ql-vscode/test/unit-tests/compare/differentPathsSameSourceSink.json new file mode 100644 index 00000000000..fe5a756f62a --- /dev/null +++ b/extensions/ql-vscode/test/unit-tests/compare/differentPathsSameSourceSink.json @@ -0,0 +1,13390 @@ +{ + "result1": { + "ruleId": "java/polynomial-redos", + "ruleIndex": 0, + "rule": { + "id": "java/polynomial-redos", + "index": 0 + }, + "message": { + "text": "This [regular expression](1) that depends on a [user-provided value](2) may run slow on strings with many repetitions of '\\\\t'." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2855, + "startColumn": 39, + "endColumn": 43 + } + } + } + ], + "partialFingerprints": { + "primaryLocationLineHash": "5270db7557dfd174:1", + "primaryLocationStartColumnFingerprint": "30" + }, + "codeFlows": [ + { + "threadFlows": [ + { + "locations": [ + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 654, + "startColumn": 30, + "endColumn": 54 + } + }, + "message": { + "text": "getInputStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 0, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "source" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 80, + "endColumn": 86 + } + }, + "message": { + "text": "stream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3003, + "startColumn": 38, + "endColumn": 52 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 28, + "endColumn": 30 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 13, + "endColumn": 25 + } + }, + "message": { + "text": "this <.field> [post update] : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 54, + "endColumn": 87 + } + }, + "message": { + "text": "new RewindableInputStream(...) : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 720, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "stream : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3089, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3099, + "startColumn": 24, + "endColumn": 36 + } + }, + "message": { + "text": "this <.field> : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3099, + "startColumn": 24, + "endColumn": 36 + } + }, + "message": { + "text": "fInputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3687, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3701, + "startColumn": 22, + "endLine": 3702, + "endColumn": 71 + } + }, + "message": { + "text": "this <.method> : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3649, + "startColumn": 20, + "endColumn": 24 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 30, + "endColumn": 35 + } + }, + "message": { + "text": "super : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 41, + "endColumn": 42 + } + }, + "message": { + "text": "b [post update] : byte[]" + } + }, + "taxa": [ + { + "index": 1, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1964, + "startColumn": 47, + "endColumn": 93 + } + }, + "message": { + "text": "new HttpInputStream(...) : HttpInputStream" + } + }, + "taxa": [ + { + "id": "AdditionalTaintStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1985, + "startColumn": 24, + "endColumn": 35 + } + }, + "message": { + "text": "inputStream : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1573, + "startColumn": 44, + "endColumn": 61 + } + }, + "message": { + "text": "getInputStream0(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 809, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "run(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 816, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 571, + "startColumn": 20, + "endColumn": 62 + } + }, + "message": { + "text": "executePrivileged(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 89, + "startColumn": 18, + "endColumn": 51 + } + }, + "message": { + "text": "doPrivileged(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 93, + "startColumn": 16, + "endColumn": 18 + } + }, + "message": { + "text": "is : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 75, + "startColumn": 31, + "endColumn": 56 + } + }, + "message": { + "text": "getResourceAsStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 76, + "startColumn": 20, + "endColumn": 22 + } + }, + "message": { + "text": "is : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 76, + "startColumn": 20, + "endColumn": 37 + } + }, + "message": { + "text": "readAllBytes(...) : byte[]" + } + }, + "taxa": [ + { + "index": 2, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 80, + "startColumn": 16, + "endColumn": 20 + } + }, + "message": { + "text": "data : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 561, + "startColumn": 22, + "endColumn": 42 + } + }, + "message": { + "text": "handleGetObject(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 574, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "obj : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 326, + "startColumn": 44, + "endColumn": 60 + } + }, + "message": { + "text": "getObject(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 328, + "startColumn": 45, + "endColumn": 50 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 328, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "values [post update] : TextAndMnemonicHashMap [] : byte[]" + } + }, + "taxa": [ + { + "index": 3, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 337, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "values : TextAndMnemonicHashMap [] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 39 + } + }, + "message": { + "text": "getResourceCache(...) : TextAndMnemonicHashMap [] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 48 + } + }, + "message": { + "text": "get(...) : byte[]" + } + }, + "taxa": [ + { + "index": 4, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 42, + "endColumn": 74 + } + }, + "message": { + "text": "getFromResourceBundle(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 16, + "endColumn": 74 + } + }, + "message": { + "text": "...?...:... : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/rtf/MockAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 14 + }, + "region": { + "startLine": 67, + "startColumn": 16, + "endColumn": 33 + } + }, + "message": { + "text": "get(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 151, + "startColumn": 25, + "endColumn": 50 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 154, + "startColumn": 16, + "endColumn": 21 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 328, + "startColumn": 28, + "endColumn": 45 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 336, + "startColumn": 16, + "endColumn": 17 + } + }, + "message": { + "text": "s : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1304, + "startColumn": 27, + "endColumn": 41 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1336, + "startColumn": 39, + "endColumn": 42 + } + }, + "message": { + "text": "arg : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 311, + "startColumn": 45, + "endColumn": 55 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 313, + "startColumn": 22, + "endColumn": 25 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 313, + "startColumn": 9, + "endColumn": 14 + } + }, + "message": { + "text": "super [post update] : StringBuffer" + } + }, + "taxa": [ + { + "index": 5, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1336, + "startColumn": 25, + "endColumn": 31 + } + }, + "message": { + "text": "result [post update] : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1364, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 885, + "startColumn": 16, + "endColumn": 66 + } + }, + "message": { + "text": "subformat(...) : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/Format.java", + "uriBaseId": "%SRCROOT%", + "index": 18 + }, + "region": { + "startLine": 159, + "startColumn": 16, + "endColumn": 69 + } + }, + "message": { + "text": "format(...) : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 713, + "startColumn": 32, + "endColumn": 40 + } + }, + "message": { + "text": "parameter this : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 717, + "startColumn": 27, + "endColumn": 40 + } + }, + "message": { + "text": "toStringCache : String" + } + }, + "taxa": [ + { + "id": "entrypointFieldStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 717, + "startColumn": 16, + "endColumn": 41 + } + }, + "message": { + "text": "new String(...) : String" + } + }, + "taxa": [ + { + "index": 6, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/Format.java", + "uriBaseId": "%SRCROOT%", + "index": 18 + }, + "region": { + "startLine": 159, + "startColumn": 16, + "endColumn": 80 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 860, + "startColumn": 16, + "endColumn": 38 + } + }, + "message": { + "text": "format(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/dv/DatatypeException.java", + "uriBaseId": "%SRCROOT%", + "index": 19 + }, + "region": { + "startLine": 102, + "startColumn": 23, + "endColumn": 64 + } + }, + "message": { + "text": "format(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/dv/DatatypeException.java", + "uriBaseId": "%SRCROOT%", + "index": 19 + }, + "region": { + "startLine": 109, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "msg : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/FactoryConfigurationError.java", + "uriBaseId": "%SRCROOT%", + "index": 20 + }, + "region": { + "startLine": 111, + "startColumn": 20, + "endColumn": 42 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "make/jdk/src/classes/build/tools/module/ModuleInfoExtraTest.java", + "uriBaseId": "%SRCROOT%", + "index": 21 + }, + "region": { + "startLine": 254, + "startColumn": 18, + "endColumn": 32 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2854, + "startColumn": 20, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2855, + "startColumn": 39, + "endColumn": 43 + } + }, + "message": { + "text": "this" + } + } + } + ] + } + ] + }, + { + "threadFlows": [ + { + "locations": [ + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 654, + "startColumn": 30, + "endColumn": 54 + } + }, + "message": { + "text": "getInputStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 0, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "source" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 80, + "endColumn": 86 + } + }, + "message": { + "text": "stream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3003, + "startColumn": 38, + "endColumn": 52 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 28, + "endColumn": 30 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 13, + "endColumn": 25 + } + }, + "message": { + "text": "this <.field> [post update] : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 54, + "endColumn": 87 + } + }, + "message": { + "text": "new RewindableInputStream(...) : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 726, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "stream : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3089, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3118, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "this <.field> : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3118, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "fInputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3687, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3692, + "startColumn": 17, + "endColumn": 27 + } + }, + "message": { + "text": "this <.field> : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3701, + "startColumn": 22, + "endLine": 3702, + "endColumn": 71 + } + }, + "message": { + "text": "this <.method> : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3649, + "startColumn": 20, + "endColumn": 24 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 30, + "endColumn": 35 + } + }, + "message": { + "text": "super : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 41, + "endColumn": 42 + } + }, + "message": { + "text": "b [post update] : byte[]" + } + }, + "taxa": [ + { + "index": 1, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1971, + "startColumn": 35, + "endColumn": 67 + } + }, + "message": { + "text": "new HttpInputStream(...) : HttpInputStream" + } + }, + "taxa": [ + { + "id": "AdditionalTaintStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1985, + "startColumn": 24, + "endColumn": 35 + } + }, + "message": { + "text": "inputStream : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1581, + "startColumn": 24, + "endColumn": 41 + } + }, + "message": { + "text": "getInputStream0(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/net/URL.java", + "uriBaseId": "%SRCROOT%", + "index": 22 + }, + "region": { + "startLine": 1317, + "startColumn": 16, + "endColumn": 49 + } + }, + "message": { + "text": "getInputStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 586, + "startColumn": 43, + "endColumn": 59 + } + }, + "message": { + "text": "openStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 587, + "startColumn": 64, + "endColumn": 66 + } + }, + "message": { + "text": "in : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 587, + "startColumn": 42, + "endColumn": 79 + } + }, + "message": { + "text": "new InputStreamReader(...) : InputStreamReader" + } + }, + "taxa": [ + { + "index": 7, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 591, + "startColumn": 37, + "endColumn": 43 + } + }, + "message": { + "text": "reader : InputStreamReader" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/Reader.java", + "uriBaseId": "%SRCROOT%", + "index": 24 + }, + "region": { + "startLine": 264, + "startColumn": 16, + "endColumn": 20 + } + }, + "message": { + "text": "parameter this : InputStreamReader" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/Reader.java", + "uriBaseId": "%SRCROOT%", + "index": 24 + }, + "region": { + "startLine": 265, + "startColumn": 16, + "endColumn": 42 + } + }, + "message": { + "text": "this <.method> : InputStreamReader" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/Reader.java", + "uriBaseId": "%SRCROOT%", + "index": 24 + }, + "region": { + "startLine": 265, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "cbuf [post update] : char[]" + } + }, + "taxa": [ + { + "index": 8, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 591, + "startColumn": 49, + "endColumn": 52 + } + }, + "message": { + "text": "buf [post update] : char[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 592, + "startColumn": 39, + "endColumn": 42 + } + }, + "message": { + "text": "buf : char[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 232, + "startColumn": 33, + "endColumn": 43 + } + }, + "message": { + "text": "str : char[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 233, + "startColumn": 22, + "endColumn": 25 + } + }, + "message": { + "text": "str : char[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 233, + "startColumn": 9, + "endColumn": 14 + } + }, + "message": { + "text": "super [post update] : StringBuilder" + } + }, + "taxa": [ + { + "index": 5, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 592, + "startColumn": 29, + "endColumn": 31 + } + }, + "message": { + "text": "sb [post update] : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 595, + "startColumn": 34, + "endColumn": 36 + } + }, + "message": { + "text": "sb : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 451, + "startColumn": 19, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 453, + "startColumn": 27, + "endColumn": 31 + } + }, + "message": { + "text": "this : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1486, + "startColumn": 19, + "endColumn": 40 + } + }, + "message": { + "text": "builder : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1487, + "startColumn": 14, + "endColumn": 21 + } + }, + "message": { + "text": "builder : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1487, + "startColumn": 9, + "endColumn": 29 + } + }, + "message": { + "text": "this [post update] : String" + } + }, + "taxa": [ + { + "index": 6, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 453, + "startColumn": 16, + "endColumn": 32 + } + }, + "message": { + "text": "new String(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 595, + "startColumn": 34, + "endColumn": 47 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 604, + "startColumn": 40, + "endColumn": 43 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2718, + "startColumn": 19, + "endColumn": 28 + } + }, + "message": { + "text": "parameter this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2722, + "startColumn": 20, + "endColumn": 24 + } + }, + "message": { + "text": "this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 604, + "startColumn": 40, + "endColumn": 60 + } + }, + "message": { + "text": "substring(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 778, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "run(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 785, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 319, + "startColumn": 16, + "endColumn": 76 + } + }, + "message": { + "text": "executePrivileged(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/security/provider/SubjectCodeSource.java", + "uriBaseId": "%SRCROOT%", + "index": 26 + }, + "region": { + "startLine": 369, + "startColumn": 25, + "endLine": 374, + "endColumn": 27 + } + }, + "message": { + "text": "doPrivileged(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/security/provider/SubjectCodeSource.java", + "uriBaseId": "%SRCROOT%", + "index": 26 + }, + "region": { + "startLine": 386, + "startColumn": 16, + "endColumn": 24 + } + }, + "message": { + "text": "returnMe : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 4230, + "startColumn": 41, + "endColumn": 55 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 4230, + "startColumn": 16, + "endColumn": 55 + } + }, + "message": { + "text": "...?...:... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 173, + "startColumn": 23, + "endColumn": 42 + } + }, + "message": { + "text": "valueOf(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 178, + "startColumn": 33, + "endColumn": 43 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 179, + "startColumn": 22, + "endColumn": 25 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 179, + "startColumn": 9, + "endColumn": 14 + } + }, + "message": { + "text": "super [post update] : StringBuilder" + } + }, + "taxa": [ + { + "index": 5, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 173, + "startColumn": 16, + "endColumn": 43 + } + }, + "message": { + "text": "this <.method> [post update] : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/BasicAttribute.java", + "uriBaseId": "%SRCROOT%", + "index": 27 + }, + "region": { + "startLine": 221, + "startColumn": 17, + "endColumn": 23 + } + }, + "message": { + "text": "answer [post update] : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/BasicAttribute.java", + "uriBaseId": "%SRCROOT%", + "index": 27 + }, + "region": { + "startLine": 225, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "answer : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 451, + "startColumn": 19, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 453, + "startColumn": 27, + "endColumn": 31 + } + }, + "message": { + "text": "this : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1486, + "startColumn": 19, + "endColumn": 40 + } + }, + "message": { + "text": "builder : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1487, + "startColumn": 14, + "endColumn": 21 + } + }, + "message": { + "text": "builder : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1487, + "startColumn": 9, + "endColumn": 29 + } + }, + "message": { + "text": "this [post update] : String" + } + }, + "taxa": [ + { + "index": 6, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 453, + "startColumn": 16, + "endColumn": 32 + } + }, + "message": { + "text": "new String(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/BasicAttribute.java", + "uriBaseId": "%SRCROOT%", + "index": 27 + }, + "region": { + "startLine": 225, + "startColumn": 16, + "endColumn": 33 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/ModificationItem.java", + "uriBaseId": "%SRCROOT%", + "index": 28 + }, + "region": { + "startLine": 118, + "startColumn": 41, + "endColumn": 56 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/ModificationItem.java", + "uriBaseId": "%SRCROOT%", + "index": 28 + }, + "region": { + "startLine": 118, + "startColumn": 21, + "endColumn": 56 + } + }, + "message": { + "text": "... + ... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/AttributeModificationException.java", + "uriBaseId": "%SRCROOT%", + "index": 29 + }, + "region": { + "startLine": 131, + "startColumn": 22, + "endColumn": 43 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/AttributeModificationException.java", + "uriBaseId": "%SRCROOT%", + "index": 29 + }, + "region": { + "startLine": 133, + "startColumn": 16, + "endColumn": 20 + } + }, + "message": { + "text": "orig : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/WriteAbortedException.java", + "uriBaseId": "%SRCROOT%", + "index": 30 + }, + "region": { + "startLine": 74, + "startColumn": 48, + "endColumn": 65 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/WriteAbortedException.java", + "uriBaseId": "%SRCROOT%", + "index": 30 + }, + "region": { + "startLine": 74, + "startColumn": 20, + "endColumn": 65 + } + }, + "message": { + "text": "... + ... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/FactoryConfigurationError.java", + "uriBaseId": "%SRCROOT%", + "index": 20 + }, + "region": { + "startLine": 111, + "startColumn": 20, + "endColumn": 42 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "make/jdk/src/classes/build/tools/module/ModuleInfoExtraTest.java", + "uriBaseId": "%SRCROOT%", + "index": 21 + }, + "region": { + "startLine": 270, + "startColumn": 18, + "endColumn": 32 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2854, + "startColumn": 20, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2855, + "startColumn": 39, + "endColumn": 43 + } + }, + "message": { + "text": "this" + } + } + } + ] + } + ] + }, + { + "threadFlows": [ + { + "locations": [ + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 654, + "startColumn": 30, + "endColumn": 54 + } + }, + "message": { + "text": "getInputStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 0, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "source" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 80, + "endColumn": 86 + } + }, + "message": { + "text": "stream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3003, + "startColumn": 38, + "endColumn": 52 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 28, + "endColumn": 30 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 13, + "endColumn": 25 + } + }, + "message": { + "text": "this <.field> [post update] : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 54, + "endColumn": 87 + } + }, + "message": { + "text": "new RewindableInputStream(...) : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 774, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "stream : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3089, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3099, + "startColumn": 24, + "endColumn": 36 + } + }, + "message": { + "text": "this <.field> : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3099, + "startColumn": 24, + "endColumn": 36 + } + }, + "message": { + "text": "fInputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3687, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3701, + "startColumn": 22, + "endLine": 3702, + "endColumn": 71 + } + }, + "message": { + "text": "this <.method> : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3649, + "startColumn": 20, + "endColumn": 24 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 30, + "endColumn": 35 + } + }, + "message": { + "text": "super : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 41, + "endColumn": 42 + } + }, + "message": { + "text": "b [post update] : byte[]" + } + }, + "taxa": [ + { + "index": 1, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1964, + "startColumn": 47, + "endColumn": 93 + } + }, + "message": { + "text": "new HttpInputStream(...) : HttpInputStream" + } + }, + "taxa": [ + { + "id": "AdditionalTaintStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1964, + "startColumn": 33, + "endColumn": 44 + } + }, + "message": { + "text": "this <.field> [post update] : HttpURLConnection [inputStream] : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1970, + "startColumn": 23, + "endColumn": 34 + } + }, + "message": { + "text": "this <.field> : HttpURLConnection [inputStream] : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1970, + "startColumn": 23, + "endColumn": 34 + } + }, + "message": { + "text": "inputStream : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1985, + "startColumn": 24, + "endColumn": 35 + } + }, + "message": { + "text": "inputStream : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1581, + "startColumn": 24, + "endColumn": 41 + } + }, + "message": { + "text": "getInputStream0(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/ftp/FtpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 31 + }, + "region": { + "startLine": 424, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "getInputStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/net/URL.java", + "uriBaseId": "%SRCROOT%", + "index": 22 + }, + "region": { + "startLine": 1317, + "startColumn": 16, + "endColumn": 49 + } + }, + "message": { + "text": "getInputStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/Module.java", + "uriBaseId": "%SRCROOT%", + "index": 32 + }, + "region": { + "startLine": 1735, + "startColumn": 24, + "endColumn": 40 + } + }, + "message": { + "text": "openStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 86, + "startColumn": 20, + "endColumn": 68 + } + }, + "message": { + "text": "getResourceAsStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 809, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "run(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 816, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 571, + "startColumn": 20, + "endColumn": 62 + } + }, + "message": { + "text": "executePrivileged(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 89, + "startColumn": 18, + "endColumn": 51 + } + }, + "message": { + "text": "doPrivileged(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 93, + "startColumn": 16, + "endColumn": 18 + } + }, + "message": { + "text": "is : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 75, + "startColumn": 31, + "endColumn": 56 + } + }, + "message": { + "text": "getResourceAsStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 76, + "startColumn": 20, + "endColumn": 22 + } + }, + "message": { + "text": "is : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 76, + "startColumn": 20, + "endColumn": 37 + } + }, + "message": { + "text": "readAllBytes(...) : byte[]" + } + }, + "taxa": [ + { + "index": 2, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 80, + "startColumn": 16, + "endColumn": 20 + } + }, + "message": { + "text": "data : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 561, + "startColumn": 22, + "endColumn": 42 + } + }, + "message": { + "text": "handleGetObject(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 574, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "obj : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 564, + "startColumn": 23, + "endColumn": 44 + } + }, + "message": { + "text": "getObject(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 574, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "obj : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 326, + "startColumn": 44, + "endColumn": 60 + } + }, + "message": { + "text": "getObject(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 328, + "startColumn": 45, + "endColumn": 50 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 328, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "values [post update] : TextAndMnemonicHashMap [] : byte[]" + } + }, + "taxa": [ + { + "index": 3, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 335, + "startColumn": 34, + "endColumn": 40 + } + }, + "message": { + "text": "values : TextAndMnemonicHashMap [] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 335, + "startColumn": 13, + "endColumn": 26 + } + }, + "message": { + "text": "resourceCache [post update] : HashMap [, ] : byte[]" + } + }, + "taxa": [ + { + "index": 3, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 335, + "startColumn": 13, + "endColumn": 26 + } + }, + "message": { + "text": "this <.field> [post update] : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 39 + } + }, + "message": { + "text": "this <.method> [post update] : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 42, + "endColumn": 74 + } + }, + "message": { + "text": "this <.method> [post update] : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 544, + "startColumn": 23, + "endColumn": 33 + } + }, + "message": { + "text": "uiDefaults [post update] : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 548, + "startColumn": 23, + "endColumn": 33 + } + }, + "message": { + "text": "uiDefaults : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 170, + "startColumn": 19, + "endColumn": 22 + } + }, + "message": { + "text": "parameter this : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 42, + "endColumn": 74 + } + }, + "message": { + "text": "this <.method> : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 281, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "parameter this : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 39 + } + }, + "message": { + "text": "this <.method> : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 305, + "startColumn": 33, + "endColumn": 49 + } + }, + "message": { + "text": "parameter this : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 306, + "startColumn": 38, + "endColumn": 51 + } + }, + "message": { + "text": "this <.field> : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 306, + "startColumn": 38, + "endColumn": 51 + } + }, + "message": { + "text": "resourceCache : HashMap [, ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 306, + "startColumn": 38, + "endColumn": 58 + } + }, + "message": { + "text": "get(...) : TextAndMnemonicHashMap [] : byte[]" + } + }, + "taxa": [ + { + "index": 4, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 337, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "values : TextAndMnemonicHashMap [] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 39 + } + }, + "message": { + "text": "getResourceCache(...) : TextAndMnemonicHashMap [] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 48 + } + }, + "message": { + "text": "get(...) : byte[]" + } + }, + "taxa": [ + { + "index": 4, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 42, + "endColumn": 74 + } + }, + "message": { + "text": "getFromResourceBundle(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 16, + "endColumn": 74 + } + }, + "message": { + "text": "...?...:... : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 548, + "startColumn": 23, + "endColumn": 65 + } + }, + "message": { + "text": "get(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 558, + "startColumn": 20, + "endColumn": 23 + } + }, + "message": { + "text": "obj : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 241, + "startColumn": 21, + "endColumn": 59 + } + }, + "message": { + "text": "createValue(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 244, + "startColumn": 16, + "endColumn": 21 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 171, + "startColumn": 24, + "endColumn": 47 + } + }, + "message": { + "text": "getFromHashtable(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 16, + "endColumn": 74 + } + }, + "message": { + "text": "...?...:... : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/MultiUIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 34 + }, + "region": { + "startLine": 59, + "startColumn": 24, + "endColumn": 38 + } + }, + "message": { + "text": "get(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/MultiUIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 34 + }, + "region": { + "startLine": 61, + "startColumn": 20, + "endColumn": 25 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/rtf/MockAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 14 + }, + "region": { + "startLine": 67, + "startColumn": 16, + "endColumn": 33 + } + }, + "message": { + "text": "get(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/StyleContext.java", + "uriBaseId": "%SRCROOT%", + "index": 35 + }, + "region": { + "startLine": 1496, + "startColumn": 20, + "endColumn": 53 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 151, + "startColumn": 25, + "endColumn": 50 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 154, + "startColumn": 16, + "endColumn": 21 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/html/StyleSheet.java", + "uriBaseId": "%SRCROOT%", + "index": 36 + }, + "region": { + "startLine": 845, + "startColumn": 20, + "endColumn": 43 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 328, + "startColumn": 28, + "endColumn": 45 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 336, + "startColumn": 16, + "endColumn": 17 + } + }, + "message": { + "text": "s : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/tree/DefaultMutableTreeNode.java", + "uriBaseId": "%SRCROOT%", + "index": 37 + }, + "region": { + "startLine": 1264, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1304, + "startColumn": 27, + "endColumn": 41 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1349, + "startColumn": 35, + "endColumn": 38 + } + }, + "message": { + "text": "arg : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 311, + "startColumn": 45, + "endColumn": 55 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 313, + "startColumn": 22, + "endColumn": 25 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 313, + "startColumn": 9, + "endColumn": 14 + } + }, + "message": { + "text": "super [post update] : StringBuffer" + } + }, + "taxa": [ + { + "index": 5, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1349, + "startColumn": 21, + "endColumn": 27 + } + }, + "message": { + "text": "result [post update] : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1364, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 885, + "startColumn": 16, + "endColumn": 66 + } + }, + "message": { + "text": "subformat(...) : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/Format.java", + "uriBaseId": "%SRCROOT%", + "index": 18 + }, + "region": { + "startLine": 159, + "startColumn": 16, + "endColumn": 69 + } + }, + "message": { + "text": "format(...) : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 713, + "startColumn": 32, + "endColumn": 40 + } + }, + "message": { + "text": "parameter this : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 715, + "startColumn": 47, + "endColumn": 51 + } + }, + "message": { + "text": "this : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 715, + "startColumn": 36, + "endColumn": 58 + } + }, + "message": { + "text": "new String(...) : String" + } + }, + "taxa": [ + { + "index": 6, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 715, + "startColumn": 20, + "endColumn": 58 + } + }, + "message": { + "text": "...=... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/Format.java", + "uriBaseId": "%SRCROOT%", + "index": 18 + }, + "region": { + "startLine": 159, + "startColumn": 16, + "endColumn": 80 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/jdk.internal.opt/share/classes/jdk/internal/joptsimple/internal/Messages.java", + "uriBaseId": "%SRCROOT%", + "index": 38 + }, + "region": { + "startLine": 75, + "startColumn": 16, + "endColumn": 37 + } + }, + "message": { + "text": "format(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/jdk.internal.opt/share/classes/jdk/internal/joptsimple/OptionException.java", + "uriBaseId": "%SRCROOT%", + "index": 39 + }, + "region": { + "startLine": 152, + "startColumn": 16, + "endColumn": 121 + } + }, + "message": { + "text": "message(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/jdk.internal.opt/share/classes/jdk/internal/joptsimple/OptionException.java", + "uriBaseId": "%SRCROOT%", + "index": 39 + }, + "region": { + "startLine": 148, + "startColumn": 16, + "endColumn": 42 + } + }, + "message": { + "text": "formattedMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/jdk.internal.opt/share/classes/jdk/internal/joptsimple/OptionException.java", + "uriBaseId": "%SRCROOT%", + "index": 39 + }, + "region": { + "startLine": 144, + "startColumn": 16, + "endColumn": 55 + } + }, + "message": { + "text": "localizedMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/transform/TransformerFactoryConfigurationError.java", + "uriBaseId": "%SRCROOT%", + "index": 40 + }, + "region": { + "startLine": 110, + "startColumn": 20, + "endColumn": 42 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "make/jdk/src/classes/build/tools/module/ModuleInfoExtraTest.java", + "uriBaseId": "%SRCROOT%", + "index": 21 + }, + "region": { + "startLine": 254, + "startColumn": 18, + "endColumn": 32 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2854, + "startColumn": 20, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2855, + "startColumn": 39, + "endColumn": 43 + } + }, + "message": { + "text": "this" + } + } + } + ] + } + ] + }, + { + "threadFlows": [ + { + "locations": [ + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 654, + "startColumn": 30, + "endColumn": 54 + } + }, + "message": { + "text": "getInputStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 0, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "source" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 80, + "endColumn": 86 + } + }, + "message": { + "text": "stream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3003, + "startColumn": 38, + "endColumn": 52 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 28, + "endColumn": 30 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 13, + "endColumn": 25 + } + }, + "message": { + "text": "this <.field> [post update] : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 54, + "endColumn": 87 + } + }, + "message": { + "text": "new RewindableInputStream(...) : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 779, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "stream : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3089, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3099, + "startColumn": 24, + "endColumn": 36 + } + }, + "message": { + "text": "this <.field> : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3099, + "startColumn": 24, + "endColumn": 36 + } + }, + "message": { + "text": "fInputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3687, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3701, + "startColumn": 22, + "endLine": 3702, + "endColumn": 71 + } + }, + "message": { + "text": "this <.method> : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3649, + "startColumn": 20, + "endColumn": 24 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 30, + "endColumn": 35 + } + }, + "message": { + "text": "super : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 41, + "endColumn": 42 + } + }, + "message": { + "text": "b [post update] : byte[]" + } + }, + "taxa": [ + { + "index": 1, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1971, + "startColumn": 35, + "endColumn": 67 + } + }, + "message": { + "text": "new HttpInputStream(...) : HttpInputStream" + } + }, + "taxa": [ + { + "id": "AdditionalTaintStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1971, + "startColumn": 21, + "endColumn": 32 + } + }, + "message": { + "text": "this <.field> [post update] : HttpURLConnection [inputStream] : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1983, + "startColumn": 17, + "endColumn": 23 + } + }, + "message": { + "text": "this <.field> : HttpURLConnection [inputStream] : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1984, + "startColumn": 17, + "endColumn": 32 + } + }, + "message": { + "text": "this <.field> : HttpURLConnection [inputStream] : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1985, + "startColumn": 24, + "endColumn": 35 + } + }, + "message": { + "text": "this <.field> : HttpURLConnection [inputStream] : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1985, + "startColumn": 24, + "endColumn": 35 + } + }, + "message": { + "text": "inputStream : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1573, + "startColumn": 44, + "endColumn": 61 + } + }, + "message": { + "text": "getInputStream0(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 809, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "run(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 816, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 571, + "startColumn": 20, + "endColumn": 62 + } + }, + "message": { + "text": "executePrivileged(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 89, + "startColumn": 18, + "endColumn": 51 + } + }, + "message": { + "text": "doPrivileged(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 93, + "startColumn": 16, + "endColumn": 18 + } + }, + "message": { + "text": "is : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 75, + "startColumn": 31, + "endColumn": 56 + } + }, + "message": { + "text": "getResourceAsStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 76, + "startColumn": 20, + "endColumn": 22 + } + }, + "message": { + "text": "is : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 76, + "startColumn": 20, + "endColumn": 37 + } + }, + "message": { + "text": "readAllBytes(...) : byte[]" + } + }, + "taxa": [ + { + "index": 2, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 80, + "startColumn": 16, + "endColumn": 20 + } + }, + "message": { + "text": "data : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 561, + "startColumn": 22, + "endColumn": 42 + } + }, + "message": { + "text": "handleGetObject(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 574, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "obj : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 326, + "startColumn": 44, + "endColumn": 60 + } + }, + "message": { + "text": "getObject(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 328, + "startColumn": 45, + "endColumn": 50 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 328, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "values [post update] : TextAndMnemonicHashMap [] : byte[]" + } + }, + "taxa": [ + { + "index": 3, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 337, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "values : TextAndMnemonicHashMap [] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 39 + } + }, + "message": { + "text": "getResourceCache(...) : TextAndMnemonicHashMap [] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 48 + } + }, + "message": { + "text": "get(...) : byte[]" + } + }, + "taxa": [ + { + "index": 4, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 42, + "endColumn": 74 + } + }, + "message": { + "text": "getFromResourceBundle(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 16, + "endColumn": 74 + } + }, + "message": { + "text": "...?...:... : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/MultiUIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 34 + }, + "region": { + "startLine": 65, + "startColumn": 39, + "endColumn": 53 + } + }, + "message": { + "text": "get(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/MultiUIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 34 + }, + "region": { + "startLine": 67, + "startColumn": 24, + "endColumn": 29 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/rtf/MockAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 14 + }, + "region": { + "startLine": 67, + "startColumn": 16, + "endColumn": 33 + } + }, + "message": { + "text": "get(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/AbstractDocument.java", + "uriBaseId": "%SRCROOT%", + "index": 41 + }, + "region": { + "startLine": 1939, + "startColumn": 28, + "endColumn": 61 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/AbstractDocument.java", + "uriBaseId": "%SRCROOT%", + "index": 41 + }, + "region": { + "startLine": 1949, + "startColumn": 20, + "endColumn": 25 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 151, + "startColumn": 25, + "endColumn": 50 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 154, + "startColumn": 16, + "endColumn": 21 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 328, + "startColumn": 28, + "endColumn": 45 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 336, + "startColumn": 16, + "endColumn": 17 + } + }, + "message": { + "text": "s : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/invoke/ClassSpecializer.java", + "uriBaseId": "%SRCROOT%", + "index": 42 + }, + "region": { + "startLine": 262, + "startColumn": 53, + "endColumn": 67 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/invoke/ClassSpecializer.java", + "uriBaseId": "%SRCROOT%", + "index": 42 + }, + "region": { + "startLine": 262, + "startColumn": 20, + "endColumn": 144 + } + }, + "message": { + "text": "... + ... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1304, + "startColumn": 27, + "endColumn": 41 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1336, + "startColumn": 39, + "endColumn": 42 + } + }, + "message": { + "text": "arg : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 311, + "startColumn": 45, + "endColumn": 55 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 313, + "startColumn": 22, + "endColumn": 25 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 313, + "startColumn": 9, + "endColumn": 14 + } + }, + "message": { + "text": "super [post update] : StringBuffer" + } + }, + "taxa": [ + { + "index": 5, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1336, + "startColumn": 25, + "endColumn": 31 + } + }, + "message": { + "text": "result [post update] : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1364, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 885, + "startColumn": 16, + "endColumn": 66 + } + }, + "message": { + "text": "subformat(...) : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/Format.java", + "uriBaseId": "%SRCROOT%", + "index": 18 + }, + "region": { + "startLine": 159, + "startColumn": 16, + "endColumn": 69 + } + }, + "message": { + "text": "format(...) : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 713, + "startColumn": 32, + "endColumn": 40 + } + }, + "message": { + "text": "parameter this : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 717, + "startColumn": 27, + "endColumn": 40 + } + }, + "message": { + "text": "toStringCache : String" + } + }, + "taxa": [ + { + "id": "entrypointFieldStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 717, + "startColumn": 16, + "endColumn": 41 + } + }, + "message": { + "text": "new String(...) : String" + } + }, + "taxa": [ + { + "index": 6, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/Format.java", + "uriBaseId": "%SRCROOT%", + "index": 18 + }, + "region": { + "startLine": 159, + "startColumn": 16, + "endColumn": 80 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 860, + "startColumn": 16, + "endColumn": 38 + } + }, + "message": { + "text": "format(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMsg.java", + "uriBaseId": "%SRCROOT%", + "index": 43 + }, + "region": { + "startLine": 293, + "startColumn": 15, + "endColumn": 63 + } + }, + "message": { + "text": "format(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/ErrorMsg.java", + "uriBaseId": "%SRCROOT%", + "index": 43 + }, + "region": { + "startLine": 294, + "startColumn": 16, + "endColumn": 37 + } + }, + "message": { + "text": "... + ... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/TypeCheckError.java", + "uriBaseId": "%SRCROOT%", + "index": 44 + }, + "region": { + "startLine": 77, + "startColumn": 16, + "endColumn": 33 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/compiler/util/TypeCheckError.java", + "uriBaseId": "%SRCROOT%", + "index": 44 + }, + "region": { + "startLine": 62, + "startColumn": 16, + "endColumn": 26 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/transform/TransformerFactoryConfigurationError.java", + "uriBaseId": "%SRCROOT%", + "index": 40 + }, + "region": { + "startLine": 110, + "startColumn": 20, + "endColumn": 42 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "make/jdk/src/classes/build/tools/module/ModuleInfoExtraTest.java", + "uriBaseId": "%SRCROOT%", + "index": 21 + }, + "region": { + "startLine": 270, + "startColumn": 18, + "endColumn": 32 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2854, + "startColumn": 20, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2855, + "startColumn": 39, + "endColumn": 43 + } + }, + "message": { + "text": "this" + } + } + } + ] + } + ] + } + ], + "relatedLocations": [ + { + "id": 1, + "physicalLocation": { + "artifactLocation": { + "uri": "src/jdk.compiler/share/classes/com/sun/tools/javac/main/Main.java", + "uriBaseId": "%SRCROOT%", + "index": 1 + }, + "region": { + "startLine": 379, + "startColumn": 42, + "endColumn": 46 + } + }, + "message": { + "text": "regular expression" + } + }, + { + "id": 2, + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 654, + "startColumn": 30, + "endColumn": 54 + } + }, + "message": { + "text": "user-provided value" + } + } + ] + }, + "result2": { + "ruleId": "java/polynomial-redos", + "ruleIndex": 0, + "rule": { + "id": "java/polynomial-redos", + "index": 0 + }, + "message": { + "text": "This [regular expression](1) that depends on a [user-provided value](2) may run slow on strings with many repetitions of '\\\\t'." + }, + "locations": [ + { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2855, + "startColumn": 39, + "endColumn": 43 + } + } + } + ], + "partialFingerprints": { + "primaryLocationLineHash": "5270db7557dfd174:1", + "primaryLocationStartColumnFingerprint": "30" + }, + "codeFlows": [ + { + "threadFlows": [ + { + "locations": [ + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 654, + "startColumn": 30, + "endColumn": 54 + } + }, + "message": { + "text": "getInputStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 0, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "source" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 80, + "endColumn": 86 + } + }, + "message": { + "text": "stream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3003, + "startColumn": 38, + "endColumn": 52 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 28, + "endColumn": 30 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 13, + "endColumn": 25 + } + }, + "message": { + "text": "this <.field> [post update] : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 54, + "endColumn": 87 + } + }, + "message": { + "text": "new RewindableInputStream(...) : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 720, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "stream : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3089, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3099, + "startColumn": 24, + "endColumn": 36 + } + }, + "message": { + "text": "this <.field> : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3099, + "startColumn": 24, + "endColumn": 36 + } + }, + "message": { + "text": "fInputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3687, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3701, + "startColumn": 22, + "endLine": 3702, + "endColumn": 71 + } + }, + "message": { + "text": "this <.method> : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3649, + "startColumn": 20, + "endColumn": 24 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 30, + "endColumn": 35 + } + }, + "message": { + "text": "super : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 41, + "endColumn": 42 + } + }, + "message": { + "text": "b [post update] : byte[]" + } + }, + "taxa": [ + { + "index": 1, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1964, + "startColumn": 47, + "endColumn": 93 + } + }, + "message": { + "text": "new HttpInputStream(...) : HttpInputStream" + } + }, + "taxa": [ + { + "id": "AdditionalTaintStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1985, + "startColumn": 24, + "endColumn": 35 + } + }, + "message": { + "text": "inputStream : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1573, + "startColumn": 44, + "endColumn": 61 + } + }, + "message": { + "text": "getInputStream0(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 809, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "run(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 816, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 571, + "startColumn": 20, + "endColumn": 62 + } + }, + "message": { + "text": "executePrivileged(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 89, + "startColumn": 18, + "endColumn": 51 + } + }, + "message": { + "text": "doPrivileged(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 93, + "startColumn": 16, + "endColumn": 18 + } + }, + "message": { + "text": "is : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 75, + "startColumn": 31, + "endColumn": 56 + } + }, + "message": { + "text": "getResourceAsStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 76, + "startColumn": 20, + "endColumn": 22 + } + }, + "message": { + "text": "is : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 76, + "startColumn": 20, + "endColumn": 37 + } + }, + "message": { + "text": "readAllBytes(...) : byte[]" + } + }, + "taxa": [ + { + "index": 2, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 80, + "startColumn": 16, + "endColumn": 20 + } + }, + "message": { + "text": "data : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 561, + "startColumn": 22, + "endColumn": 42 + } + }, + "message": { + "text": "handleGetObject(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 574, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "obj : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 326, + "startColumn": 44, + "endColumn": 60 + } + }, + "message": { + "text": "getObject(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 328, + "startColumn": 45, + "endColumn": 50 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 328, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "values [post update] : TextAndMnemonicHashMap [] : byte[]" + } + }, + "taxa": [ + { + "index": 3, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 337, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "values : TextAndMnemonicHashMap [] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 39 + } + }, + "message": { + "text": "getResourceCache(...) : TextAndMnemonicHashMap [] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 48 + } + }, + "message": { + "text": "get(...) : byte[]" + } + }, + "taxa": [ + { + "index": 4, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 42, + "endColumn": 74 + } + }, + "message": { + "text": "getFromResourceBundle(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 16, + "endColumn": 74 + } + }, + "message": { + "text": "...?...:... : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/rtf/MockAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 14 + }, + "region": { + "startLine": 67, + "startColumn": 16, + "endColumn": 33 + } + }, + "message": { + "text": "get(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 151, + "startColumn": 25, + "endColumn": 50 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 154, + "startColumn": 16, + "endColumn": 21 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 328, + "startColumn": 28, + "endColumn": 45 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 336, + "startColumn": 16, + "endColumn": 17 + } + }, + "message": { + "text": "s : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1304, + "startColumn": 27, + "endColumn": 41 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1336, + "startColumn": 39, + "endColumn": 42 + } + }, + "message": { + "text": "arg : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 311, + "startColumn": 45, + "endColumn": 55 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 313, + "startColumn": 22, + "endColumn": 25 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 313, + "startColumn": 9, + "endColumn": 14 + } + }, + "message": { + "text": "super [post update] : StringBuffer" + } + }, + "taxa": [ + { + "index": 5, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1336, + "startColumn": 25, + "endColumn": 31 + } + }, + "message": { + "text": "result [post update] : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1364, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 885, + "startColumn": 16, + "endColumn": 66 + } + }, + "message": { + "text": "subformat(...) : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/Format.java", + "uriBaseId": "%SRCROOT%", + "index": 18 + }, + "region": { + "startLine": 159, + "startColumn": 16, + "endColumn": 69 + } + }, + "message": { + "text": "format(...) : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 713, + "startColumn": 32, + "endColumn": 40 + } + }, + "message": { + "text": "parameter this : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 717, + "startColumn": 27, + "endColumn": 40 + } + }, + "message": { + "text": "toStringCache : String" + } + }, + "taxa": [ + { + "id": "entrypointFieldStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 717, + "startColumn": 16, + "endColumn": 41 + } + }, + "message": { + "text": "new String(...) : String" + } + }, + "taxa": [ + { + "index": 6, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/Format.java", + "uriBaseId": "%SRCROOT%", + "index": 18 + }, + "region": { + "startLine": 159, + "startColumn": 16, + "endColumn": 80 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 860, + "startColumn": 16, + "endColumn": 38 + } + }, + "message": { + "text": "format(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/dv/DatatypeException.java", + "uriBaseId": "%SRCROOT%", + "index": 19 + }, + "region": { + "startLine": 102, + "startColumn": 23, + "endColumn": 64 + } + }, + "message": { + "text": "format(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/dv/DatatypeException.java", + "uriBaseId": "%SRCROOT%", + "index": 19 + }, + "region": { + "startLine": 109, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "msg : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/FactoryConfigurationError.java", + "uriBaseId": "%SRCROOT%", + "index": 20 + }, + "region": { + "startLine": 111, + "startColumn": 20, + "endColumn": 42 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "make/jdk/src/classes/build/tools/module/ModuleInfoExtraTest.java", + "uriBaseId": "%SRCROOT%", + "index": 21 + }, + "region": { + "startLine": 254, + "startColumn": 18, + "endColumn": 32 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2854, + "startColumn": 20, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2855, + "startColumn": 39, + "endColumn": 43 + } + }, + "message": { + "text": "this" + } + } + } + ] + } + ] + }, + { + "threadFlows": [ + { + "locations": [ + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 654, + "startColumn": 30, + "endColumn": 54 + } + }, + "message": { + "text": "getInputStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 0, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "source" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 80, + "endColumn": 86 + } + }, + "message": { + "text": "stream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3003, + "startColumn": 38, + "endColumn": 52 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 28, + "endColumn": 30 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 13, + "endColumn": 25 + } + }, + "message": { + "text": "this <.field> [post update] : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 54, + "endColumn": 87 + } + }, + "message": { + "text": "new RewindableInputStream(...) : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 726, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "stream : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3089, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3118, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "this <.field> : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3118, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "fInputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3687, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3692, + "startColumn": 17, + "endColumn": 27 + } + }, + "message": { + "text": "this <.field> : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3701, + "startColumn": 22, + "endLine": 3702, + "endColumn": 71 + } + }, + "message": { + "text": "this <.method> : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3649, + "startColumn": 20, + "endColumn": 24 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 30, + "endColumn": 35 + } + }, + "message": { + "text": "super : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 41, + "endColumn": 42 + } + }, + "message": { + "text": "b [post update] : byte[]" + } + }, + "taxa": [ + { + "index": 1, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1971, + "startColumn": 35, + "endColumn": 67 + } + }, + "message": { + "text": "new HttpInputStream(...) : HttpInputStream" + } + }, + "taxa": [ + { + "id": "AdditionalTaintStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1985, + "startColumn": 24, + "endColumn": 35 + } + }, + "message": { + "text": "inputStream : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1581, + "startColumn": 24, + "endColumn": 41 + } + }, + "message": { + "text": "getInputStream0(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/net/URL.java", + "uriBaseId": "%SRCROOT%", + "index": 22 + }, + "region": { + "startLine": 1317, + "startColumn": 16, + "endColumn": 49 + } + }, + "message": { + "text": "getInputStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 586, + "startColumn": 43, + "endColumn": 59 + } + }, + "message": { + "text": "openStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 587, + "startColumn": 64, + "endColumn": 66 + } + }, + "message": { + "text": "in : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 587, + "startColumn": 42, + "endColumn": 79 + } + }, + "message": { + "text": "new InputStreamReader(...) : InputStreamReader" + } + }, + "taxa": [ + { + "index": 7, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 591, + "startColumn": 37, + "endColumn": 43 + } + }, + "message": { + "text": "reader : InputStreamReader" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/Reader.java", + "uriBaseId": "%SRCROOT%", + "index": 24 + }, + "region": { + "startLine": 264, + "startColumn": 16, + "endColumn": 20 + } + }, + "message": { + "text": "parameter this : InputStreamReader" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/Reader.java", + "uriBaseId": "%SRCROOT%", + "index": 24 + }, + "region": { + "startLine": 265, + "startColumn": 16, + "endColumn": 42 + } + }, + "message": { + "text": "this <.method> : InputStreamReader" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/Reader.java", + "uriBaseId": "%SRCROOT%", + "index": 24 + }, + "region": { + "startLine": 265, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "cbuf [post update] : char[]" + } + }, + "taxa": [ + { + "index": 8, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 591, + "startColumn": 49, + "endColumn": 52 + } + }, + "message": { + "text": "buf [post update] : char[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 592, + "startColumn": 39, + "endColumn": 42 + } + }, + "message": { + "text": "buf : char[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 232, + "startColumn": 33, + "endColumn": 43 + } + }, + "message": { + "text": "str : char[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 233, + "startColumn": 22, + "endColumn": 25 + } + }, + "message": { + "text": "str : char[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 233, + "startColumn": 9, + "endColumn": 14 + } + }, + "message": { + "text": "super [post update] : StringBuilder" + } + }, + "taxa": [ + { + "index": 5, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 592, + "startColumn": 29, + "endColumn": 31 + } + }, + "message": { + "text": "sb [post update] : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 595, + "startColumn": 34, + "endColumn": 36 + } + }, + "message": { + "text": "sb : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 451, + "startColumn": 19, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 453, + "startColumn": 27, + "endColumn": 31 + } + }, + "message": { + "text": "this : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1486, + "startColumn": 19, + "endColumn": 40 + } + }, + "message": { + "text": "builder : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1487, + "startColumn": 14, + "endColumn": 21 + } + }, + "message": { + "text": "builder : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1487, + "startColumn": 9, + "endColumn": 29 + } + }, + "message": { + "text": "this [post update] : String" + } + }, + "taxa": [ + { + "index": 6, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 453, + "startColumn": 16, + "endColumn": 32 + } + }, + "message": { + "text": "new String(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 595, + "startColumn": 34, + "endColumn": 47 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 604, + "startColumn": 40, + "endColumn": 43 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2718, + "startColumn": 19, + "endColumn": 28 + } + }, + "message": { + "text": "parameter this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2722, + "startColumn": 20, + "endColumn": 24 + } + }, + "message": { + "text": "this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/com/sun/java/swing/plaf/gtk/Metacity.java", + "uriBaseId": "%SRCROOT%", + "index": 23 + }, + "region": { + "startLine": 604, + "startColumn": 40, + "endColumn": 60 + } + }, + "message": { + "text": "substring(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 778, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "run(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 785, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 319, + "startColumn": 16, + "endColumn": 76 + } + }, + "message": { + "text": "executePrivileged(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/security/provider/SubjectCodeSource.java", + "uriBaseId": "%SRCROOT%", + "index": 26 + }, + "region": { + "startLine": 369, + "startColumn": 25, + "endLine": 374, + "endColumn": 27 + } + }, + "message": { + "text": "doPrivileged(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/security/provider/SubjectCodeSource.java", + "uriBaseId": "%SRCROOT%", + "index": 26 + }, + "region": { + "startLine": 386, + "startColumn": 16, + "endColumn": 24 + } + }, + "message": { + "text": "returnMe : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 4230, + "startColumn": 41, + "endColumn": 55 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 4230, + "startColumn": 16, + "endColumn": 55 + } + }, + "message": { + "text": "...?...:... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 173, + "startColumn": 23, + "endColumn": 42 + } + }, + "message": { + "text": "valueOf(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 178, + "startColumn": 33, + "endColumn": 43 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 179, + "startColumn": 22, + "endColumn": 25 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 179, + "startColumn": 9, + "endColumn": 14 + } + }, + "message": { + "text": "super [post update] : StringBuilder" + } + }, + "taxa": [ + { + "index": 5, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 173, + "startColumn": 16, + "endColumn": 43 + } + }, + "message": { + "text": "this <.method> [post update] : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/BasicAttribute.java", + "uriBaseId": "%SRCROOT%", + "index": 27 + }, + "region": { + "startLine": 221, + "startColumn": 17, + "endColumn": 23 + } + }, + "message": { + "text": "answer [post update] : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/BasicAttribute.java", + "uriBaseId": "%SRCROOT%", + "index": 27 + }, + "region": { + "startLine": 225, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "answer : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 451, + "startColumn": 19, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 453, + "startColumn": 27, + "endColumn": 31 + } + }, + "message": { + "text": "this : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1486, + "startColumn": 19, + "endColumn": 40 + } + }, + "message": { + "text": "builder : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1487, + "startColumn": 14, + "endColumn": 21 + } + }, + "message": { + "text": "builder : StringBuilder" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 1487, + "startColumn": 9, + "endColumn": 29 + } + }, + "message": { + "text": "this [post update] : String" + } + }, + "taxa": [ + { + "index": 6, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuilder.java", + "uriBaseId": "%SRCROOT%", + "index": 25 + }, + "region": { + "startLine": 453, + "startColumn": 16, + "endColumn": 32 + } + }, + "message": { + "text": "new String(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/BasicAttribute.java", + "uriBaseId": "%SRCROOT%", + "index": 27 + }, + "region": { + "startLine": 225, + "startColumn": 16, + "endColumn": 33 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/ModificationItem.java", + "uriBaseId": "%SRCROOT%", + "index": 28 + }, + "region": { + "startLine": 118, + "startColumn": 41, + "endColumn": 56 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/ModificationItem.java", + "uriBaseId": "%SRCROOT%", + "index": 28 + }, + "region": { + "startLine": 118, + "startColumn": 21, + "endColumn": 56 + } + }, + "message": { + "text": "... + ... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/AttributeModificationException.java", + "uriBaseId": "%SRCROOT%", + "index": 29 + }, + "region": { + "startLine": 131, + "startColumn": 22, + "endColumn": 43 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/javax/naming/directory/AttributeModificationException.java", + "uriBaseId": "%SRCROOT%", + "index": 29 + }, + "region": { + "startLine": 133, + "startColumn": 16, + "endColumn": 20 + } + }, + "message": { + "text": "orig : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/WriteAbortedException.java", + "uriBaseId": "%SRCROOT%", + "index": 30 + }, + "region": { + "startLine": 74, + "startColumn": 48, + "endColumn": 65 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/WriteAbortedException.java", + "uriBaseId": "%SRCROOT%", + "index": 30 + }, + "region": { + "startLine": 74, + "startColumn": 20, + "endColumn": 65 + } + }, + "message": { + "text": "... + ... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/parsers/FactoryConfigurationError.java", + "uriBaseId": "%SRCROOT%", + "index": 20 + }, + "region": { + "startLine": 111, + "startColumn": 20, + "endColumn": 42 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "make/jdk/src/classes/build/tools/module/ModuleInfoExtraTest.java", + "uriBaseId": "%SRCROOT%", + "index": 21 + }, + "region": { + "startLine": 270, + "startColumn": 18, + "endColumn": 32 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2854, + "startColumn": 20, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2855, + "startColumn": 39, + "endColumn": 43 + } + }, + "message": { + "text": "this" + } + } + } + ] + } + ] + }, + { + "threadFlows": [ + { + "locations": [ + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 654, + "startColumn": 30, + "endColumn": 54 + } + }, + "message": { + "text": "getInputStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 0, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "source" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 80, + "endColumn": 86 + } + }, + "message": { + "text": "stream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3003, + "startColumn": 38, + "endColumn": 52 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 28, + "endColumn": 30 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 13, + "endColumn": 25 + } + }, + "message": { + "text": "this <.field> [post update] : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 54, + "endColumn": 87 + } + }, + "message": { + "text": "new RewindableInputStream(...) : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 774, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "stream : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3089, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3099, + "startColumn": 24, + "endColumn": 36 + } + }, + "message": { + "text": "this <.field> : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3099, + "startColumn": 24, + "endColumn": 36 + } + }, + "message": { + "text": "fInputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3687, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3701, + "startColumn": 22, + "endLine": 3702, + "endColumn": 71 + } + }, + "message": { + "text": "this <.method> : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3649, + "startColumn": 20, + "endColumn": 24 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 30, + "endColumn": 35 + } + }, + "message": { + "text": "super : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 41, + "endColumn": 42 + } + }, + "message": { + "text": "b [post update] : byte[]" + } + }, + "taxa": [ + { + "index": 1, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1964, + "startColumn": 47, + "endColumn": 93 + } + }, + "message": { + "text": "new HttpInputStream(...) : HttpInputStream" + } + }, + "taxa": [ + { + "id": "AdditionalTaintStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1964, + "startColumn": 33, + "endColumn": 44 + } + }, + "message": { + "text": "this <.field> [post update] : HttpURLConnection [inputStream] : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1970, + "startColumn": 23, + "endColumn": 34 + } + }, + "message": { + "text": "this <.field> : HttpURLConnection [inputStream] : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1970, + "startColumn": 23, + "endColumn": 34 + } + }, + "message": { + "text": "inputStream : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1985, + "startColumn": 24, + "endColumn": 35 + } + }, + "message": { + "text": "inputStream : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1581, + "startColumn": 24, + "endColumn": 41 + } + }, + "message": { + "text": "getInputStream0(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/net/URLClassLoader.java", + "uriBaseId": "%SRCROOT%", + "index": 31 + }, + "region": { + "startLine": 296, + "startColumn": 30, + "endColumn": 51 + } + }, + "message": { + "text": "getInputStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/net/URLClassLoader.java", + "uriBaseId": "%SRCROOT%", + "index": 31 + }, + "region": { + "startLine": 309, + "startColumn": 20, + "endColumn": 22 + } + }, + "message": { + "text": "is : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/java/beans/Beans.java", + "uriBaseId": "%SRCROOT%", + "index": 32 + }, + "region": { + "startLine": 203, + "startColumn": 20, + "endColumn": 52 + } + }, + "message": { + "text": "getResourceAsStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/java/beans/Beans.java", + "uriBaseId": "%SRCROOT%", + "index": 32 + }, + "region": { + "startLine": 209, + "startColumn": 60, + "endColumn": 63 + } + }, + "message": { + "text": "ins : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/java/beans/Beans.java", + "uriBaseId": "%SRCROOT%", + "index": 32 + }, + "region": { + "startLine": 498, + "startColumn": 40, + "endColumn": 54 + } + }, + "message": { + "text": "in : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/java/beans/Beans.java", + "uriBaseId": "%SRCROOT%", + "index": 32 + }, + "region": { + "startLine": 501, + "startColumn": 15, + "endColumn": 17 + } + }, + "message": { + "text": "in : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/java/beans/Beans.java", + "uriBaseId": "%SRCROOT%", + "index": 32 + }, + "region": { + "startLine": 501, + "startColumn": 9, + "endColumn": 19 + } + }, + "message": { + "text": "this [post update] : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/java/beans/Beans.java", + "uriBaseId": "%SRCROOT%", + "index": 32 + }, + "region": { + "startLine": 209, + "startColumn": 28, + "endColumn": 69 + } + }, + "message": { + "text": "new ObjectInputStreamWithLoader(...) : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/java/beans/Beans.java", + "uriBaseId": "%SRCROOT%", + "index": 32 + }, + "region": { + "startLine": 211, + "startColumn": 26, + "endColumn": 30 + } + }, + "message": { + "text": "oins : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 494, + "startColumn": 25, + "endColumn": 35 + } + }, + "message": { + "text": "parameter this : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 496, + "startColumn": 16, + "endColumn": 40 + } + }, + "message": { + "text": "this <.method> : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 525, + "startColumn": 26, + "endColumn": 36 + } + }, + "message": { + "text": "parameter this : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 538, + "startColumn": 26, + "endColumn": 50 + } + }, + "message": { + "text": "this <.method> : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1692, + "startColumn": 20, + "endColumn": 31 + } + }, + "message": { + "text": "parameter this : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1748, + "startColumn": 41, + "endColumn": 60 + } + }, + "message": { + "text": "this <.method> : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2132, + "startColumn": 20, + "endColumn": 29 + } + }, + "message": { + "text": "parameter this : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2163, + "startColumn": 17, + "endColumn": 20 + } + }, + "message": { + "text": "this <.field> : ObjectInputStreamWithLoader [bin, in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2163, + "startColumn": 17, + "endColumn": 20 + } + }, + "message": { + "text": "bin : BlockDataInputStream [in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 3368, + "startColumn": 21, + "endColumn": 30 + } + }, + "message": { + "text": "parameter this : BlockDataInputStream [in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 3372, + "startColumn": 25, + "endColumn": 48 + } + }, + "message": { + "text": "this <.method> : BlockDataInputStream [in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 3327, + "startColumn": 13, + "endColumn": 17 + } + }, + "message": { + "text": "parameter this : BlockDataInputStream [in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 3348, + "startColumn": 24, + "endColumn": 26 + } + }, + "message": { + "text": "this <.field> : BlockDataInputStream [in] : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 3348, + "startColumn": 24, + "endColumn": 26 + } + }, + "message": { + "text": "in : PeekInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 3348, + "startColumn": 32, + "endColumn": 33 + } + }, + "message": { + "text": "b [post update] : byte[]" + } + }, + "taxa": [ + { + "index": 1, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 408, + "startColumn": 15, + "endColumn": 43 + } + }, + "message": { + "text": "new BlockDataInputStream(...) : BlockDataInputStream" + } + }, + "taxa": [ + { + "id": "AdditionalTaintStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 408, + "startColumn": 9, + "endColumn": 12 + } + }, + "message": { + "text": "this <.field> [post update] : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/com/sun/jndi/ldap/Obj.java", + "uriBaseId": "%SRCROOT%", + "index": 34 + }, + "region": { + "startLine": 539, + "startColumn": 21, + "endColumn": 49 + } + }, + "message": { + "text": "new ObjectInputStream(...) : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/com/sun/jndi/ldap/Obj.java", + "uriBaseId": "%SRCROOT%", + "index": 34 + }, + "region": { + "startLine": 541, + "startColumn": 24, + "endColumn": 32 + } + }, + "message": { + "text": "deserial : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 494, + "startColumn": 25, + "endColumn": 35 + } + }, + "message": { + "text": "parameter this : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 496, + "startColumn": 16, + "endColumn": 40 + } + }, + "message": { + "text": "this <.method> : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 525, + "startColumn": 26, + "endColumn": 36 + } + }, + "message": { + "text": "parameter this : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 538, + "startColumn": 26, + "endColumn": 50 + } + }, + "message": { + "text": "this <.method> : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1692, + "startColumn": 20, + "endColumn": 31 + } + }, + "message": { + "text": "parameter this : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1742, + "startColumn": 41, + "endColumn": 61 + } + }, + "message": { + "text": "this <.method> : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2115, + "startColumn": 20, + "endColumn": 30 + } + }, + "message": { + "text": "parameter this : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2118, + "startColumn": 36, + "endColumn": 39 + } + }, + "message": { + "text": "this <.field> : ObjectInputStream [bin] : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2118, + "startColumn": 36, + "endColumn": 39 + } + }, + "message": { + "text": "bin : BlockDataInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2118, + "startColumn": 36, + "endColumn": 49 + } + }, + "message": { + "text": "readUTF(...) : String" + } + }, + "taxa": [ + { + "index": 9, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 2125, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1742, + "startColumn": 41, + "endColumn": 61 + } + }, + "message": { + "text": "readString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1807, + "startColumn": 33, + "endColumn": 43 + } + }, + "message": { + "text": "obj : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1809, + "startColumn": 20, + "endColumn": 23 + } + }, + "message": { + "text": "obj : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 1742, + "startColumn": 28, + "endColumn": 62 + } + }, + "message": { + "text": "checkResolve(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 538, + "startColumn": 26, + "endColumn": 50 + } + }, + "message": { + "text": "readObject0(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 548, + "startColumn": 20, + "endColumn": 23 + } + }, + "message": { + "text": "obj : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/io/ObjectInputStream.java", + "uriBaseId": "%SRCROOT%", + "index": 33 + }, + "region": { + "startLine": 496, + "startColumn": 16, + "endColumn": 40 + } + }, + "message": { + "text": "readObject(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/com/sun/jndi/ldap/Obj.java", + "uriBaseId": "%SRCROOT%", + "index": 34 + }, + "region": { + "startLine": 541, + "startColumn": 24, + "endColumn": 45 + } + }, + "message": { + "text": "readObject(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/com/sun/jndi/ldap/Obj.java", + "uriBaseId": "%SRCROOT%", + "index": 34 + }, + "region": { + "startLine": 240, + "startColumn": 24, + "endColumn": 65 + } + }, + "message": { + "text": "deserializeObject(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.naming/share/classes/com/sun/jndi/ldap/LdapBindingEnumeration.java", + "uriBaseId": "%SRCROOT%", + "index": 35 + }, + "region": { + "startLine": 65, + "startColumn": 62, + "endColumn": 85 + } + }, + "message": { + "text": "decodeObject(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 809, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "run(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 816, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 714, + "startColumn": 20, + "endColumn": 62 + } + }, + "message": { + "text": "executePrivileged(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1586, + "startColumn": 28, + "endLine": 1588, + "endColumn": 73 + } + }, + "message": { + "text": "doPrivileged(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1632, + "startColumn": 20, + "endColumn": 71 + } + }, + "message": { + "text": "unwrap(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1071, + "startColumn": 13, + "endColumn": 92 + } + }, + "message": { + "text": "unwrap(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1075, + "startColumn": 61, + "endColumn": 74 + } + }, + "message": { + "text": "handbackValue : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1075, + "startColumn": 17, + "endColumn": 76 + } + }, + "message": { + "text": "{...} : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1087, + "startColumn": 15, + "endColumn": 21 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1380, + "startColumn": 42, + "endColumn": 63 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1402, + "startColumn": 52, + "endColumn": 58 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1304, + "startColumn": 51, + "endColumn": 66 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1306, + "startColumn": 27, + "endColumn": 33 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1306, + "startColumn": 13, + "endColumn": 17 + } + }, + "message": { + "text": "this [post update] : PrivilegedOperation [params, []] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1402, + "startColumn": 17, + "endColumn": 59 + } + }, + "message": { + "text": "new PrivilegedOperation(...) : PrivilegedOperation [params, []] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1405, + "startColumn": 28, + "endColumn": 30 + } + }, + "message": { + "text": "op : PrivilegedOperation [params, []] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1309, + "startColumn": 23, + "endColumn": 26 + } + }, + "message": { + "text": "parameter this : PrivilegedOperation [params, []] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1310, + "startColumn": 43, + "endColumn": 49 + } + }, + "message": { + "text": "this <.field> : PrivilegedOperation [params, []] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1310, + "startColumn": 43, + "endColumn": 49 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1421, + "startColumn": 47, + "endColumn": 62 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1427, + "startColumn": 52, + "endColumn": 58 + } + }, + "message": { + "text": "params : Object[] [[]] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1427, + "startColumn": 52, + "endColumn": 61 + } + }, + "message": { + "text": "...[...] : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management.rmi/share/classes/javax/management/remote/rmi/RMIConnectionImpl.java", + "uriBaseId": "%SRCROOT%", + "index": 2 + }, + "region": { + "startLine": 1427, + "startColumn": 44, + "endColumn": 61 + } + }, + "message": { + "text": "(...)... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 3 + }, + "region": { + "startLine": 170, + "startColumn": 39, + "endColumn": 55 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 3 + }, + "region": { + "startLine": 177, + "startColumn": 21, + "endColumn": 30 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 247, + "startColumn": 29, + "endColumn": 45 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 248, + "startColumn": 40, + "endColumn": 49 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 303, + "startColumn": 70, + "endColumn": 80 + } + }, + "message": { + "text": "arg : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 333, + "startColumn": 56, + "endColumn": 59 + } + }, + "message": { + "text": "arg : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 360, + "startColumn": 61, + "endColumn": 77 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 362, + "startColumn": 50, + "endColumn": 59 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 368, + "startColumn": 59, + "endColumn": 75 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.management/share/classes/com/sun/jmx/remote/security/MBeanServerFileAccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 4 + }, + "region": { + "startLine": 387, + "startColumn": 16, + "endColumn": 25 + } + }, + "message": { + "text": "className : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2854, + "startColumn": 20, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2855, + "startColumn": 39, + "endColumn": 43 + } + }, + "message": { + "text": "this" + } + } + } + ] + } + ] + }, + { + "threadFlows": [ + { + "locations": [ + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 654, + "startColumn": 30, + "endColumn": 54 + } + }, + "message": { + "text": "getInputStream(...) : InputStream" + } + }, + "taxa": [ + { + "index": 0, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "source" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 80, + "endColumn": 86 + } + }, + "message": { + "text": "stream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3003, + "startColumn": 38, + "endColumn": 52 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 28, + "endColumn": 30 + } + }, + "message": { + "text": "is : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3005, + "startColumn": 13, + "endColumn": 25 + } + }, + "message": { + "text": "this <.field> [post update] : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 697, + "startColumn": 54, + "endColumn": 87 + } + }, + "message": { + "text": "new RewindableInputStream(...) : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 779, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "stream : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3089, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3099, + "startColumn": 24, + "endColumn": 36 + } + }, + "message": { + "text": "this <.field> : RewindableInputStream [fInputStream] : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 3099, + "startColumn": 24, + "endColumn": 36 + } + }, + "message": { + "text": "fInputStream : InputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3687, + "startColumn": 21, + "endColumn": 25 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3701, + "startColumn": 22, + "endLine": 3702, + "endColumn": 71 + } + }, + "message": { + "text": "this <.method> : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3649, + "startColumn": 20, + "endColumn": 24 + } + }, + "message": { + "text": "parameter this : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 30, + "endColumn": 35 + } + }, + "message": { + "text": "super : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 3652, + "startColumn": 41, + "endColumn": 42 + } + }, + "message": { + "text": "b [post update] : byte[]" + } + }, + "taxa": [ + { + "index": 1, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1971, + "startColumn": 35, + "endColumn": 67 + } + }, + "message": { + "text": "new HttpInputStream(...) : HttpInputStream" + } + }, + "taxa": [ + { + "id": "AdditionalTaintStep", + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1971, + "startColumn": 21, + "endColumn": 32 + } + }, + "message": { + "text": "this <.field> [post update] : HttpURLConnection [inputStream] : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1983, + "startColumn": 17, + "endColumn": 23 + } + }, + "message": { + "text": "this <.field> : HttpURLConnection [inputStream] : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1984, + "startColumn": 17, + "endColumn": 32 + } + }, + "message": { + "text": "this <.field> : HttpURLConnection [inputStream] : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1985, + "startColumn": 24, + "endColumn": 35 + } + }, + "message": { + "text": "this <.field> : HttpURLConnection [inputStream] : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1985, + "startColumn": 24, + "endColumn": 35 + } + }, + "message": { + "text": "inputStream : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/http/HttpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 10 + }, + "region": { + "startLine": 1581, + "startColumn": 24, + "endColumn": 41 + } + }, + "message": { + "text": "getInputStream0(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/net/www/protocol/ftp/FtpURLConnection.java", + "uriBaseId": "%SRCROOT%", + "index": 36 + }, + "region": { + "startLine": 424, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "getInputStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/net/URL.java", + "uriBaseId": "%SRCROOT%", + "index": 22 + }, + "region": { + "startLine": 1317, + "startColumn": 16, + "endColumn": 49 + } + }, + "message": { + "text": "getInputStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/Module.java", + "uriBaseId": "%SRCROOT%", + "index": 37 + }, + "region": { + "startLine": 1735, + "startColumn": 24, + "endColumn": 40 + } + }, + "message": { + "text": "openStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 86, + "startColumn": 20, + "endColumn": 68 + } + }, + "message": { + "text": "getResourceAsStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 809, + "startColumn": 20, + "endColumn": 32 + } + }, + "message": { + "text": "run(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 816, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/security/AccessController.java", + "uriBaseId": "%SRCROOT%", + "index": 5 + }, + "region": { + "startLine": 571, + "startColumn": 20, + "endColumn": 62 + } + }, + "message": { + "text": "executePrivileged(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 89, + "startColumn": 18, + "endColumn": 51 + } + }, + "message": { + "text": "doPrivileged(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 93, + "startColumn": 16, + "endColumn": 18 + } + }, + "message": { + "text": "is : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 75, + "startColumn": 31, + "endColumn": 56 + } + }, + "message": { + "text": "getResourceAsStream(...) : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 76, + "startColumn": 20, + "endColumn": 22 + } + }, + "message": { + "text": "is : HttpInputStream" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 76, + "startColumn": 20, + "endColumn": 37 + } + }, + "message": { + "text": "readAllBytes(...) : byte[]" + } + }, + "taxa": [ + { + "index": 2, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/sun/util/resources/BreakIteratorResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 11 + }, + "region": { + "startLine": 80, + "startColumn": 16, + "endColumn": 20 + } + }, + "message": { + "text": "data : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 561, + "startColumn": 22, + "endColumn": 42 + } + }, + "message": { + "text": "handleGetObject(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 574, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "obj : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 564, + "startColumn": 23, + "endColumn": 44 + } + }, + "message": { + "text": "getObject(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/util/ResourceBundle.java", + "uriBaseId": "%SRCROOT%", + "index": 12 + }, + "region": { + "startLine": 574, + "startColumn": 16, + "endColumn": 19 + } + }, + "message": { + "text": "obj : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 326, + "startColumn": 44, + "endColumn": 60 + } + }, + "message": { + "text": "getObject(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 328, + "startColumn": 45, + "endColumn": 50 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 328, + "startColumn": 29, + "endColumn": 35 + } + }, + "message": { + "text": "values [post update] : TextAndMnemonicHashMap [] : byte[]" + } + }, + "taxa": [ + { + "index": 3, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 335, + "startColumn": 34, + "endColumn": 40 + } + }, + "message": { + "text": "values : TextAndMnemonicHashMap [] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 335, + "startColumn": 13, + "endColumn": 26 + } + }, + "message": { + "text": "resourceCache [post update] : HashMap [, ] : byte[]" + } + }, + "taxa": [ + { + "index": 3, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 335, + "startColumn": 13, + "endColumn": 26 + } + }, + "message": { + "text": "this <.field> [post update] : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 39 + } + }, + "message": { + "text": "this <.method> [post update] : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 42, + "endColumn": 74 + } + }, + "message": { + "text": "this <.method> [post update] : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java", + "uriBaseId": "%SRCROOT%", + "index": 38 + }, + "region": { + "startLine": 544, + "startColumn": 23, + "endColumn": 33 + } + }, + "message": { + "text": "uiDefaults [post update] : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java", + "uriBaseId": "%SRCROOT%", + "index": 38 + }, + "region": { + "startLine": 548, + "startColumn": 23, + "endColumn": 33 + } + }, + "message": { + "text": "uiDefaults : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 170, + "startColumn": 19, + "endColumn": 22 + } + }, + "message": { + "text": "parameter this : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 42, + "endColumn": 74 + } + }, + "message": { + "text": "this <.method> : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 281, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "parameter this : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 39 + } + }, + "message": { + "text": "this <.method> : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 305, + "startColumn": 33, + "endColumn": 49 + } + }, + "message": { + "text": "parameter this : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 306, + "startColumn": 38, + "endColumn": 51 + } + }, + "message": { + "text": "this <.field> : UIDefaults [resourceCache, , ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 306, + "startColumn": 38, + "endColumn": 51 + } + }, + "message": { + "text": "resourceCache : HashMap [, ] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 306, + "startColumn": 38, + "endColumn": 58 + } + }, + "message": { + "text": "get(...) : TextAndMnemonicHashMap [] : byte[]" + } + }, + "taxa": [ + { + "index": 4, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 337, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "values : TextAndMnemonicHashMap [] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 39 + } + }, + "message": { + "text": "getResourceCache(...) : TextAndMnemonicHashMap [] : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 298, + "startColumn": 20, + "endColumn": 48 + } + }, + "message": { + "text": "get(...) : byte[]" + } + }, + "taxa": [ + { + "index": 4, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 42, + "endColumn": 74 + } + }, + "message": { + "text": "getFromResourceBundle(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 16, + "endColumn": 74 + } + }, + "message": { + "text": "...?...:... : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java", + "uriBaseId": "%SRCROOT%", + "index": 38 + }, + "region": { + "startLine": 548, + "startColumn": 23, + "endColumn": 65 + } + }, + "message": { + "text": "get(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/plaf/nimbus/NimbusLookAndFeel.java", + "uriBaseId": "%SRCROOT%", + "index": 38 + }, + "region": { + "startLine": 558, + "startColumn": 20, + "endColumn": 23 + } + }, + "message": { + "text": "obj : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 241, + "startColumn": 21, + "endColumn": 59 + } + }, + "message": { + "text": "createValue(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 244, + "startColumn": 16, + "endColumn": 21 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 171, + "startColumn": 24, + "endColumn": 47 + } + }, + "message": { + "text": "getFromHashtable(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/UIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 13 + }, + "region": { + "startLine": 172, + "startColumn": 16, + "endColumn": 74 + } + }, + "message": { + "text": "...?...:... : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/MultiUIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 39 + }, + "region": { + "startLine": 59, + "startColumn": 24, + "endColumn": 38 + } + }, + "message": { + "text": "get(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/MultiUIDefaults.java", + "uriBaseId": "%SRCROOT%", + "index": 39 + }, + "region": { + "startLine": 61, + "startColumn": 20, + "endColumn": 25 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/rtf/MockAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 14 + }, + "region": { + "startLine": 67, + "startColumn": 16, + "endColumn": 33 + } + }, + "message": { + "text": "get(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/StyleContext.java", + "uriBaseId": "%SRCROOT%", + "index": 40 + }, + "region": { + "startLine": 1496, + "startColumn": 20, + "endColumn": 53 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 151, + "startColumn": 25, + "endColumn": 50 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 154, + "startColumn": 16, + "endColumn": 21 + } + }, + "message": { + "text": "value : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/html/StyleSheet.java", + "uriBaseId": "%SRCROOT%", + "index": 41 + }, + "region": { + "startLine": 845, + "startColumn": 20, + "endColumn": 43 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 328, + "startColumn": 28, + "endColumn": 45 + } + }, + "message": { + "text": "getAttribute(...) : byte[]" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/text/SimpleAttributeSet.java", + "uriBaseId": "%SRCROOT%", + "index": 15 + }, + "region": { + "startLine": 336, + "startColumn": 16, + "endColumn": 17 + } + }, + "message": { + "text": "s : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.desktop/share/classes/javax/swing/tree/DefaultMutableTreeNode.java", + "uriBaseId": "%SRCROOT%", + "index": 42 + }, + "region": { + "startLine": 1264, + "startColumn": 20, + "endColumn": 41 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1304, + "startColumn": 27, + "endColumn": 41 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1349, + "startColumn": 35, + "endColumn": 38 + } + }, + "message": { + "text": "arg : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 311, + "startColumn": 45, + "endColumn": 55 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 313, + "startColumn": 22, + "endColumn": 25 + } + }, + "message": { + "text": "str : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 313, + "startColumn": 9, + "endColumn": 14 + } + }, + "message": { + "text": "super [post update] : StringBuffer" + } + }, + "taxa": [ + { + "index": 5, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1349, + "startColumn": 21, + "endColumn": 27 + } + }, + "message": { + "text": "result [post update] : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 1364, + "startColumn": 16, + "endColumn": 22 + } + }, + "message": { + "text": "result : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/MessageFormat.java", + "uriBaseId": "%SRCROOT%", + "index": 16 + }, + "region": { + "startLine": 885, + "startColumn": 16, + "endColumn": 66 + } + }, + "message": { + "text": "subformat(...) : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/Format.java", + "uriBaseId": "%SRCROOT%", + "index": 18 + }, + "region": { + "startLine": 159, + "startColumn": 16, + "endColumn": 69 + } + }, + "message": { + "text": "format(...) : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 713, + "startColumn": 32, + "endColumn": 40 + } + }, + "message": { + "text": "parameter this : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 715, + "startColumn": 47, + "endColumn": 51 + } + }, + "message": { + "text": "this : StringBuffer" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 715, + "startColumn": 36, + "endColumn": 58 + } + }, + "message": { + "text": "new String(...) : String" + } + }, + "taxa": [ + { + "index": 6, + "toolComponent": { + "index": 13 + }, + "properties": { + "CodeQL/DataflowRole": "step" + } + } + ] + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/StringBuffer.java", + "uriBaseId": "%SRCROOT%", + "index": 17 + }, + "region": { + "startLine": 715, + "startColumn": 20, + "endColumn": 58 + } + }, + "message": { + "text": "...=... : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/text/Format.java", + "uriBaseId": "%SRCROOT%", + "index": 18 + }, + "region": { + "startLine": 159, + "startColumn": 16, + "endColumn": 80 + } + }, + "message": { + "text": "toString(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/jdk.internal.opt/share/classes/jdk/internal/joptsimple/internal/Messages.java", + "uriBaseId": "%SRCROOT%", + "index": 43 + }, + "region": { + "startLine": 75, + "startColumn": 16, + "endColumn": 37 + } + }, + "message": { + "text": "format(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/jdk.internal.opt/share/classes/jdk/internal/joptsimple/OptionException.java", + "uriBaseId": "%SRCROOT%", + "index": 44 + }, + "region": { + "startLine": 152, + "startColumn": 16, + "endColumn": 121 + } + }, + "message": { + "text": "message(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/jdk.internal.opt/share/classes/jdk/internal/joptsimple/OptionException.java", + "uriBaseId": "%SRCROOT%", + "index": 44 + }, + "region": { + "startLine": 148, + "startColumn": 16, + "endColumn": 42 + } + }, + "message": { + "text": "formattedMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/jdk.internal.opt/share/classes/jdk/internal/joptsimple/OptionException.java", + "uriBaseId": "%SRCROOT%", + "index": 44 + }, + "region": { + "startLine": 144, + "startColumn": 16, + "endColumn": 55 + } + }, + "message": { + "text": "localizedMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/javax/xml/transform/TransformerFactoryConfigurationError.java", + "uriBaseId": "%SRCROOT%", + "index": 45 + }, + "region": { + "startLine": 110, + "startColumn": 20, + "endColumn": 42 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "make/jdk/src/classes/build/tools/module/ModuleInfoExtraTest.java", + "uriBaseId": "%SRCROOT%", + "index": 21 + }, + "region": { + "startLine": 254, + "startColumn": 18, + "endColumn": 32 + } + }, + "message": { + "text": "getMessage(...) : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2854, + "startColumn": 20, + "endColumn": 27 + } + }, + "message": { + "text": "parameter this : String" + } + } + }, + { + "location": { + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.base/share/classes/java/lang/String.java", + "uriBaseId": "%SRCROOT%", + "index": 0 + }, + "region": { + "startLine": 2855, + "startColumn": 39, + "endColumn": 43 + } + }, + "message": { + "text": "this" + } + } + } + ] + } + ] + } + ], + "relatedLocations": [ + { + "id": 1, + "physicalLocation": { + "artifactLocation": { + "uri": "src/jdk.compiler/share/classes/com/sun/tools/javac/main/Main.java", + "uriBaseId": "%SRCROOT%", + "index": 1 + }, + "region": { + "startLine": 379, + "startColumn": 42, + "endColumn": 46 + } + }, + "message": { + "text": "regular expression" + } + }, + { + "id": 2, + "physicalLocation": { + "artifactLocation": { + "uri": "src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl/XMLEntityManager.java", + "uriBaseId": "%SRCROOT%", + "index": 9 + }, + "region": { + "startLine": 654, + "startColumn": 30, + "endColumn": 54 + } + }, + "message": { + "text": "user-provided value" + } + } + ] + } +} diff --git a/extensions/ql-vscode/test/unit-tests/compare/sarif-diff.test.ts b/extensions/ql-vscode/test/unit-tests/compare/sarif-diff.test.ts index 15d5df07a48..5785866fd35 100644 --- a/extensions/ql-vscode/test/unit-tests/compare/sarif-diff.test.ts +++ b/extensions/ql-vscode/test/unit-tests/compare/sarif-diff.test.ts @@ -1,5 +1,7 @@ import type { Result } from "sarif"; import { sarifDiff } from "../../../src/compare/sarif-diff"; +import { readJson } from "fs-extra"; +import { resolve } from "path"; describe("sarifDiff", () => { const result1: Result = { @@ -496,6 +498,28 @@ describe("sarifDiff", () => { }); }); + it("only compares the source and sink of a result", async () => { + const { result1, result2 } = (await readJson( + resolve(__dirname, "differentPathsSameSourceSink.json"), + )) as { result1: Result; result2: Result }; + + expect(sarifDiff([result1], [result2])).toEqual({ + from: [], + to: [], + }); + }); + + it("gives a diff when the source and sink of a result differ", async () => { + const { result1, result2 } = (await readJson( + resolve(__dirname, "differentPathsDifferentSourceSink.json"), + )) as { result1: Result; result2: Result }; + + expect(sarifDiff([result1, result2], [result2])).toEqual({ + from: [result1], + to: [], + }); + }); + it("does not modify the input", () => { const result1: Result = { message: { diff --git a/extensions/ql-vscode/test/unit-tests/data/evaluator-log-summaries/bad-join-order.jsonl b/extensions/ql-vscode/test/unit-tests/data/evaluator-log-summaries/bad-join-order.jsonl index 8d366067387..59d6e67f64a 100644 --- a/extensions/ql-vscode/test/unit-tests/data/evaluator-log-summaries/bad-join-order.jsonl +++ b/extensions/ql-vscode/test/unit-tests/data/evaluator-log-summaries/bad-join-order.jsonl @@ -11458,7 +11458,7 @@ "duplicationPercentages" : [ 0, -1, 1, 0, -1, 0, -1, 0, 0, -1, 1, 0, 1, -1, 1, 0 ] }, { "raReference" : "order_500000", - "counts" : [ 0, -1, 0, -1, 3138, -1, 3138, 3138, -1, 0, -1, 0, 0, -1, 0, -1, 133, 133, -1, 0, 0, -1, 133, 133, 3271, 3271, 3271 ], + "counts" : [ 0, -1, 0, -1, 31380000, -1, 3138, 3138, -1, 0, -1, 0, 0, -1, 0, -1, 133, 133, -1, 0, 0, -1, 133, 133, 3271, 3271, 3271 ], "duplicationPercentages" : [ 0, -1, 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, 0, -1, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, 0, 0, 1 ] }, { "raReference" : "order_500000", diff --git a/extensions/ql-vscode/test/unit-tests/jest.config.ts b/extensions/ql-vscode/test/unit-tests/jest.config.ts index 74c207b2715..21f0a38b2ea 100644 --- a/extensions/ql-vscode/test/unit-tests/jest.config.ts +++ b/extensions/ql-vscode/test/unit-tests/jest.config.ts @@ -1,4 +1,5 @@ import type { Config } from "jest"; +import { transformIgnorePatterns } from "../jest-config"; /* * For a detailed explanation regarding each configuration property and type check, visit: @@ -180,10 +181,7 @@ const config: Config = { }, // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - transformIgnorePatterns: [ - // These use ES modules, so need to be transformed - "node_modules/(?!(?:@vscode/webview-ui-toolkit|@microsoft/.+|exenv-es6|nanoid|p-queue|p-timeout)/.*)", - ], + transformIgnorePatterns, // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them // unmockedModulePathPatterns: undefined, diff --git a/extensions/ql-vscode/test/unit-tests/log-scanner.test.ts b/extensions/ql-vscode/test/unit-tests/log-scanner.test.ts index 3d49f3362a1..0012cecda23 100644 --- a/extensions/ql-vscode/test/unit-tests/log-scanner.test.ts +++ b/extensions/ql-vscode/test/unit-tests/log-scanner.test.ts @@ -1,28 +1,39 @@ +import { scanAndReportJoinOrderProblems } from "../../src/log-insights/join-order"; import type { EvaluationLogProblemReporter } from "../../src/log-insights/log-scanner"; -import { EvaluationLogScannerSet } from "../../src/log-insights/log-scanner"; -import { JoinOrderScannerProvider } from "../../src/log-insights/join-order"; import { join } from "path"; interface TestProblem { predicateName: string; raHash: string; - iteration: number; + order: string | undefined; message: string; } class TestProblemReporter implements EvaluationLogProblemReporter { public readonly problems: TestProblem[] = []; - public reportProblem( + public reportProblemNonRecursive( predicateName: string, raHash: string, - iteration: number, message: string, ): void { this.problems.push({ predicateName, raHash, - iteration, + order: undefined, + message, + }); + } + public reportProblemForRecursionSummary( + predicateName: string, + raHash: string, + order: string, + message: string, + ): void { + this.problems.push({ + predicateName, + raHash, + order, message, }); } @@ -34,23 +45,33 @@ class TestProblemReporter implements EvaluationLogProblemReporter { describe("log scanners", () => { it("should detect bad join orders", async () => { - const scanners = new EvaluationLogScannerSet(); - scanners.registerLogScannerProvider(new JoinOrderScannerProvider(() => 50)); const summaryPath = join( __dirname, "data/evaluator-log-summaries/bad-join-order.jsonl", ); const problemReporter = new TestProblemReporter(); - await scanners.scanLog(summaryPath, problemReporter); + await scanAndReportJoinOrderProblems(summaryPath, problemReporter, 50); + + expect(problemReporter.problems.length).toBe(2); - expect(problemReporter.problems.length).toBe(1); - expect(problemReporter.problems[0].predicateName).toBe("#select#ff"); + expect(problemReporter.problems[0].predicateName).toBe( + "Enclosing::exprEnclosingElement#c50c5fbf#ff", + ); expect(problemReporter.problems[0].raHash).toBe( - "1bb43c97jpmuh8r2v0f9hktim63", + "7cc60wtoigvl1lheqqa12d8fmi4", ); - expect(problemReporter.problems[0].iteration).toBe(0); + expect(problemReporter.problems[0].order).toBe("order_500000"); expect(problemReporter.problems[0].message).toBe( - "Relation '#select#ff' has an inefficient join order. Its join order metric is 4961.83, which is larger than the threshold of 50.00.", + "The order_500000 pipeline for 'Enclosing::exprEnclosingElement#c50c5fbf#ff@7cc60wto' has an inefficient join order. Its join order metric is 98.07, which is larger than the threshold of 50.00.", + ); + + expect(problemReporter.problems[1].predicateName).toBe("#select#ff"); + expect(problemReporter.problems[1].raHash).toBe( + "1bb43c97jpmuh8r2v0f9hktim63", + ); + expect(problemReporter.problems[1].order).toBeUndefined(); + expect(problemReporter.problems[1].message).toBe( + "'#select#ff@1bb43c97' has an inefficient join order. Its join order metric is 4961.83, which is larger than the threshold of 50.00.", ); }); }); diff --git a/extensions/ql-vscode/test/unit-tests/model-editor/auto-model.test.ts b/extensions/ql-vscode/test/unit-tests/model-editor/auto-model.test.ts deleted file mode 100644 index 50e67fffdc8..00000000000 --- a/extensions/ql-vscode/test/unit-tests/model-editor/auto-model.test.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { - createAutoModelRequest, - encodeSarif, -} from "../../../src/model-editor/auto-model"; -import { Mode } from "../../../src/model-editor/shared/mode"; -import { AutomodelMode } from "../../../src/model-editor/auto-model-api"; -import type { AutoModelQueriesResult } from "../../../src/model-editor/auto-model-codeml-queries"; -import type { Log } from "sarif"; -import { gzipDecode } from "../../../src/common/zlib"; - -describe("createAutoModelRequest", () => { - const createSarifLog = (queryId: string): Log => { - return { - version: "2.1.0", - $schema: "http://json.schemastore.org/sarif-2.1.0-rtm.4", - runs: [ - { - tool: { - driver: { - name: "CodeQL", - rules: [ - { - id: queryId, - }, - ], - }, - }, - results: [ - { - message: { - text: "msg", - }, - locations: [ - { - physicalLocation: { - contextRegion: { - startLine: 10, - endLine: 12, - snippet: { - text: "Foo", - }, - }, - region: { - startLine: 10, - startColumn: 1, - endColumn: 3, - }, - artifactLocation: { - uri: "foo.js", - }, - }, - }, - ], - }, - ], - }, - ], - }; - }; - - const result: AutoModelQueriesResult = { - candidates: createSarifLog( - "java/ml/extract-automodel-application-candidates", - ), - }; - - it("creates a matching request", async () => { - expect(await createAutoModelRequest(Mode.Application, result)).toEqual({ - mode: AutomodelMode.Application, - candidates: await encodeSarif(result.candidates), - }); - }); - - it("can decode the SARIF", async () => { - const request = await createAutoModelRequest(Mode.Application, result); - const decoded = Buffer.from(request.candidates, "base64"); - const decompressed = await gzipDecode(decoded); - const json = decompressed.toString("utf-8"); - const parsed = JSON.parse(json); - expect(parsed).toEqual(result.candidates); - }); -}); diff --git a/extensions/ql-vscode/test/unit-tests/model-editor/shared/auto-model-candidates.test.ts b/extensions/ql-vscode/test/unit-tests/model-editor/shared/auto-model-candidates.test.ts deleted file mode 100644 index c89e604c53f..00000000000 --- a/extensions/ql-vscode/test/unit-tests/model-editor/shared/auto-model-candidates.test.ts +++ /dev/null @@ -1,120 +0,0 @@ -import type { Method } from "../../../../src/model-editor/method"; -import { EndpointType } from "../../../../src/model-editor/method"; -import type { ModeledMethod } from "../../../../src/model-editor/modeled-method"; -import { getCandidates } from "../../../../src/model-editor/shared/auto-model-candidates"; -import { Mode } from "../../../../src/model-editor/shared/mode"; - -describe("getCandidates", () => { - it("doesn't return methods that are already modelled", () => { - const methods: Method[] = [ - { - library: "my.jar", - signature: "org.my.A#x()", - endpointType: EndpointType.Method, - packageName: "org.my", - typeName: "A", - methodName: "x", - methodParameters: "()", - supported: false, - supportedType: "none", - usages: [], - }, - ]; - const modeledMethods: Record = { - "org.my.A#x()": [ - { - type: "neutral", - kind: "sink", - provenance: "manual", - signature: "org.my.A#x()", - endpointType: EndpointType.Method, - packageName: "org.my", - typeName: "A", - methodName: "x", - methodParameters: "()", - }, - ], - }; - const candidates = getCandidates( - Mode.Application, - methods, - modeledMethods, - new Set(), - ); - expect(candidates.length).toEqual(0); - }); - - it("doesn't return methods that are supported from other sources", () => { - const methods: Method[] = [ - { - library: "my.jar", - signature: "org.my.A#x()", - endpointType: EndpointType.Method, - packageName: "org.my", - typeName: "A", - methodName: "x", - methodParameters: "()", - supported: true, - supportedType: "none", - usages: [], - }, - ]; - const modeledMethods = {}; - const candidates = getCandidates( - Mode.Application, - methods, - modeledMethods, - new Set(), - ); - expect(candidates.length).toEqual(0); - }); - - it("doesn't return methods that are already processed by auto model", () => { - const methods: Method[] = [ - { - library: "my.jar", - signature: "org.my.A#x()", - endpointType: EndpointType.Method, - packageName: "org.my", - typeName: "A", - methodName: "x", - methodParameters: "()", - supported: false, - supportedType: "none", - usages: [], - }, - ]; - const modeledMethods = {}; - const candidates = getCandidates( - Mode.Application, - methods, - modeledMethods, - new Set(["org.my.A#x()"]), - ); - expect(candidates.length).toEqual(0); - }); - - it("returns methods that are neither modeled nor supported from other sources", () => { - const methods: Method[] = []; - methods.push({ - library: "my.jar", - signature: "org.my.A#x()", - endpointType: EndpointType.Method, - packageName: "org.my", - typeName: "A", - methodName: "x", - methodParameters: "()", - supported: false, - supportedType: "none", - usages: [], - }); - const modeledMethods = {}; - const candidates = getCandidates( - Mode.Application, - methods, - modeledMethods, - new Set(), - ); - expect(candidates.length).toEqual(1); - }); -}); diff --git a/extensions/ql-vscode/test/unit-tests/model-editor/shared/sorting.test.ts b/extensions/ql-vscode/test/unit-tests/model-editor/shared/sorting.test.ts index 47320e13114..4d4f2624f11 100644 --- a/extensions/ql-vscode/test/unit-tests/model-editor/shared/sorting.test.ts +++ b/extensions/ql-vscode/test/unit-tests/model-editor/shared/sorting.test.ts @@ -10,16 +10,8 @@ import { shuffle } from "../../../vscode-tests/utils/list-helpers"; describe("sortMethods", () => { it("uses primary sort order", () => { - const unsavedPositiveAutoModelPrediction = createMethod({ - signature: "org.sql2o.Sql2o#unsavedPositiveAutoModelPrediction()", - supported: false, - }); - const negativeAutoModelPrediction = createMethod({ - signature: "org.sql2o.Sql2o#negativeAutoModelPrediction()", - supported: false, - }); - const unsavedManualModel = createMethod({ - signature: "org.sql2o.Sql2o#unsavedManualModel()", + const unsavedModel = createMethod({ + signature: "org.sql2o.Sql2o#unsavedModel()", supported: false, }); const unmodeledMethodWithEarlierSignature = createMethod({ @@ -30,12 +22,8 @@ describe("sortMethods", () => { signature: "org.sql2o.Sql2o#zzz_unmodeledMethodWithLaterSignature()", supported: false, }); - const savedAutoModelPrediction = createMethod({ - signature: "org.sql2o.Sql2o#savedAutoModelPrediction()", - supported: false, - }); - const savedManualModel = createMethod({ - signature: "org.sql2o.Sql2o#savedManualModel()", + const savedModel = createMethod({ + signature: "org.sql2o.Sql2o#savedModel()", supported: false, }); const supportedMethod = createMethod({ @@ -44,65 +32,31 @@ describe("sortMethods", () => { }); const methods: Method[] = shuffle([ - unsavedPositiveAutoModelPrediction, - negativeAutoModelPrediction, - unsavedManualModel, + unsavedModel, unmodeledMethodWithEarlierSignature, unmodeledMethodWithLaterSignature, - savedAutoModelPrediction, - savedManualModel, + savedModel, supportedMethod, ]); const modeledMethodsMap: Record = {}; - modeledMethodsMap[unsavedPositiveAutoModelPrediction.signature] = [ - createSinkModeledMethod(), - ]; - modeledMethodsMap[unsavedManualModel.signature] = [ - createSinkModeledMethod(), - ]; - modeledMethodsMap[savedAutoModelPrediction.signature] = [ - createSinkModeledMethod(), - ]; - modeledMethodsMap[savedManualModel.signature] = [createSinkModeledMethod()]; + modeledMethodsMap[unsavedModel.signature] = [createSinkModeledMethod()]; + modeledMethodsMap[savedModel.signature] = [createSinkModeledMethod()]; - const modifiedSignatures: Set = new Set([ - unsavedPositiveAutoModelPrediction.signature, - unsavedManualModel.signature, - ]); - - const processedByAutoModelMethods: Set = new Set([ - unsavedPositiveAutoModelPrediction.signature, - negativeAutoModelPrediction.signature, - savedAutoModelPrediction.signature, - ]); + const modifiedSignatures: Set = new Set([unsavedModel.signature]); - expect( - sortMethods( - methods, - modeledMethodsMap, - modifiedSignatures, - processedByAutoModelMethods, - ), - ).toEqual([ - unsavedPositiveAutoModelPrediction, - negativeAutoModelPrediction, - unmodeledMethodWithEarlierSignature, - unsavedManualModel, - unmodeledMethodWithLaterSignature, - savedAutoModelPrediction, - savedManualModel, - supportedMethod, - ]); + expect(sortMethods(methods, modeledMethodsMap, modifiedSignatures)).toEqual( + [ + unmodeledMethodWithEarlierSignature, + unsavedModel, + unmodeledMethodWithLaterSignature, + savedModel, + supportedMethod, + ], + ); }); it("uses secondary sort order based on usages and signature", () => { - const negativeAutoModelPrediction = createMethod({ - signature: "org.sql2o.Sql2o#negativeAutoModelPrediction()", - supported: false, - usages: [], - }); - const unmodeledMethodWithTwoUsages = createMethod({ signature: "org.sql2o.Sql2o#unmodeledMethodWithTwoUsages()", supported: false, @@ -126,7 +80,6 @@ describe("sortMethods", () => { }); const methods: Method[] = shuffle([ - negativeAutoModelPrediction, unmodeledMethodWithTwoUsages, unmodeledMethodWithOneUsage, unmodeledMethodWithEarlierSignature, @@ -137,23 +90,13 @@ describe("sortMethods", () => { const modifiedSignatures: Set = new Set([]); - const processedByAutoModelMethods: Set = new Set([ - negativeAutoModelPrediction.signature, - ]); - - expect( - sortMethods( - methods, - modeledMethodsMap, - modifiedSignatures, - processedByAutoModelMethods, - ), - ).toEqual([ - negativeAutoModelPrediction, - unmodeledMethodWithTwoUsages, - unmodeledMethodWithOneUsage, - unmodeledMethodWithEarlierSignature, - unmodeledMethodWithLaterSignature, - ]); + expect(sortMethods(methods, modeledMethodsMap, modifiedSignatures)).toEqual( + [ + unmodeledMethodWithTwoUsages, + unmodeledMethodWithOneUsage, + unmodeledMethodWithEarlierSignature, + unmodeledMethodWithLaterSignature, + ], + ); }); }); diff --git a/extensions/ql-vscode/test/unit-tests/packages/commands/CommandManager.test.ts b/extensions/ql-vscode/test/unit-tests/packages/commands/CommandManager.test.ts index 31dda880376..820855d7ad4 100644 --- a/extensions/ql-vscode/test/unit-tests/packages/commands/CommandManager.test.ts +++ b/extensions/ql-vscode/test/unit-tests/packages/commands/CommandManager.test.ts @@ -15,15 +15,11 @@ describe("CommandManager", () => { }); it("can register typed commands", async () => { - const commands = { - "codeQL.openVariantAnalysisLogs": async (variantAnalysisId: number) => { - return variantAnalysisId * 10; - }, - }; - const commandManager = new CommandManager( - jest.fn(), - jest.fn(), - ); + const commandManager = new CommandManager<{ + "codeQL.openVariantAnalysisLogs": ( + variantAnalysisId: number, + ) => Promise; + }>(jest.fn(), jest.fn()); // @ts-expect-error wrong command name should give a type error commandManager.register("abc", jest.fn()); @@ -81,15 +77,11 @@ describe("CommandManager", () => { }); it("can execute typed commands", async () => { - const commands = { - "codeQL.openVariantAnalysisLogs": async (variantAnalysisId: number) => { - return variantAnalysisId * 10; - }, - }; - const commandManager = new CommandManager( - jest.fn(), - jest.fn(), - ); + const commandManager = new CommandManager<{ + "codeQL.openVariantAnalysisLogs": ( + variantAnalysisId: number, + ) => Promise; + }>(jest.fn(), jest.fn()); // @ts-expect-error wrong command name should give a type error await commandManager.execute("abc", 4); diff --git a/extensions/ql-vscode/test/unit-tests/sarif-processing.test.ts b/extensions/ql-vscode/test/unit-tests/sarif-processing.test.ts index 987e21e03fa..39ebf8a2c83 100644 --- a/extensions/ql-vscode/test/unit-tests/sarif-processing.test.ts +++ b/extensions/ql-vscode/test/unit-tests/sarif-processing.test.ts @@ -89,7 +89,7 @@ describe("SARIF processing", () => { const rule = tryGetRule(sarifRun, result); expect(rule).toBeTruthy(); - expect(rule!.id).toBe(result!.rule!.id); + expect(rule!.id).toBe(result.rule!.id); }); }); @@ -455,7 +455,7 @@ describe("SARIF processing", () => { it("should return errors for results that have no message", () => { const sarif = buildValidSarifLog(); - sarif.runs![0]!.results![0]!.message.text = undefined; + sarif.runs[0].results![0].message.text = undefined; const result = extractAnalysisAlerts(sarif, fakefileLinkPrefix); @@ -466,7 +466,7 @@ describe("SARIF processing", () => { it("should not return errors for result locations with no snippet", () => { const sarif = buildValidSarifLog(); - sarif.runs![0]!.results![0]!.locations![0]!.physicalLocation!.contextRegion!.snippet = + sarif.runs[0].results![0].locations![0].physicalLocation!.contextRegion!.snippet = undefined; const result = extractAnalysisAlerts(sarif, fakefileLinkPrefix); @@ -486,7 +486,7 @@ describe("SARIF processing", () => { it("should use highlightedRegion for result locations with no contextRegion", () => { const sarif = buildValidSarifLog(); - sarif.runs![0]!.results![0]!.locations![0]!.physicalLocation!.contextRegion = + sarif.runs[0].results![0].locations![0].physicalLocation!.contextRegion = undefined; const result = extractAnalysisAlerts(sarif, fakefileLinkPrefix); @@ -506,7 +506,7 @@ describe("SARIF processing", () => { it("should not return errors for result locations with no region", () => { const sarif = buildValidSarifLog(); - sarif.runs![0]!.results![0]!.locations![0]!.physicalLocation!.region = + sarif.runs[0].results![0].locations![0].physicalLocation!.region = undefined; const result = extractAnalysisAlerts(sarif, fakefileLinkPrefix); @@ -518,7 +518,7 @@ describe("SARIF processing", () => { it("should return errors for result locations with no physical location", () => { const sarif = buildValidSarifLog(); - sarif.runs![0]!.results![0]!.locations![0]!.physicalLocation!.artifactLocation = + sarif.runs[0].results![0].locations![0].physicalLocation!.artifactLocation = undefined; const result = extractAnalysisAlerts(sarif, fakefileLinkPrefix); @@ -642,8 +642,8 @@ describe("SARIF processing", () => { const sarif = buildValidSarifLog(); const messageText = "This shell command depends on an uncontrolled [absolute path](1)."; - sarif.runs![0]!.results![0]!.message!.text = messageText; - sarif.runs![0]!.results![0].relatedLocations = [ + sarif.runs[0].results![0].message.text = messageText; + sarif.runs[0].results![0].relatedLocations = [ { id: 1, physicalLocation: { @@ -694,7 +694,7 @@ describe("SARIF processing", () => { const sarif = buildValidSarifLog(); // Build string of 10 kilobytes const snippet = new Array(10 * 1024).fill("a").join(""); - sarif.runs![0]!.results![0]!.locations![0]!.physicalLocation!.contextRegion!.snippet = + sarif.runs[0].results![0].locations![0].physicalLocation!.contextRegion!.snippet = { text: snippet, }; @@ -712,11 +712,11 @@ describe("SARIF processing", () => { const sarif = buildValidSarifLog(); // Build string of 10 kilobytes const snippet = new Array(10 * 1024).fill("a").join(""); - sarif.runs![0]!.results![0]!.locations![0]!.physicalLocation!.contextRegion!.snippet = + sarif.runs[0].results![0].locations![0].physicalLocation!.contextRegion!.snippet = { text: snippet, }; - sarif.runs![0]!.results![0]!.locations![0]!.physicalLocation!.region!.endColumn = 1000; + sarif.runs[0].results![0].locations![0].physicalLocation!.region!.endColumn = 1000; const result = extractAnalysisAlerts(sarif, fakefileLinkPrefix); @@ -729,8 +729,8 @@ describe("SARIF processing", () => { it("should be able to handle when a location has no uri", () => { const sarif = buildValidSarifLog(); - sarif.runs![0].results![0].message.text = "message [String](1)"; - sarif.runs![0].results![0].relatedLocations = [ + sarif.runs[0].results![0].message.text = "message [String](1)"; + sarif.runs[0].results![0].relatedLocations = [ { id: 1, physicalLocation: { diff --git a/extensions/ql-vscode/test/unit-tests/variant-analysis/custom-errors.test.ts b/extensions/ql-vscode/test/unit-tests/variant-analysis/custom-errors.test.ts index 91bb4331126..e35442480df 100644 --- a/extensions/ql-vscode/test/unit-tests/variant-analysis/custom-errors.test.ts +++ b/extensions/ql-vscode/test/unit-tests/variant-analysis/custom-errors.test.ts @@ -32,9 +32,6 @@ describe("handleRequestError", () => { it("returns false when handling an error without response", () => { const e = new RequestError("Timeout", 500, { - headers: { - "Content-Type": "application/json", - }, request: { method: "POST", url: faker.internet.url(), @@ -176,8 +173,9 @@ function toErrorMessage(data: any) { if (Array.isArray(data.errors)) { return `${data.message}: ${data.errors.map(JSON.stringify).join(", ")}`; } - - return data.message; + if (typeof data.message === "string") { + return data.message as string; + } } // istanbul ignore next - just in case diff --git a/extensions/ql-vscode/test/unit-tests/variant-analysis/gh-api/gh-api-client.test.ts b/extensions/ql-vscode/test/unit-tests/variant-analysis/gh-api/gh-api-client.test.ts index b03b107cb93..85a956a5e8c 100644 --- a/extensions/ql-vscode/test/unit-tests/variant-analysis/gh-api/gh-api-client.test.ts +++ b/extensions/ql-vscode/test/unit-tests/variant-analysis/gh-api/gh-api-client.test.ts @@ -13,7 +13,7 @@ import { response as variantAnalysisRepoJson_response } from "../../../../src/co import { testCredentialsWithRealOctokit } from "../../../factories/authentication"; const mockServer = new MockGitHubApiServer(); -beforeAll(() => mockServer.startServer()); +beforeAll(() => mockServer.startServer("error")); afterEach(() => mockServer.unloadScenario()); afterAll(() => mockServer.stopServer()); diff --git a/extensions/ql-vscode/test/vscode-tests/activated-extension/jest.setup.ts b/extensions/ql-vscode/test/vscode-tests/activated-extension/jest.setup.ts index 6ffa38a398b..ac7f5b361ec 100644 --- a/extensions/ql-vscode/test/vscode-tests/activated-extension/jest.setup.ts +++ b/extensions/ql-vscode/test/vscode-tests/activated-extension/jest.setup.ts @@ -6,7 +6,7 @@ import { beforeAll(async () => { await beforeAllAction(); -}); +}, 20_000); beforeEach(async () => { await beforeEachAction(); diff --git a/extensions/ql-vscode/test/vscode-tests/activated-extension/model-editor/model-evaluator.test.ts b/extensions/ql-vscode/test/vscode-tests/activated-extension/model-editor/model-evaluator.test.ts index 6853c25f600..51e0fb6286d 100644 --- a/extensions/ql-vscode/test/vscode-tests/activated-extension/model-editor/model-evaluator.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/activated-extension/model-editor/model-evaluator.test.ts @@ -14,6 +14,8 @@ import { createMockLogger } from "../../../__mocks__/loggerMock"; import { createMockModelingStore } from "../../../__mocks__/model-editor/modelingStoreMock"; import { mockedObject } from "../../../mocked-object"; +const SETUP_TIMEOUT = 20_000; + describe("Model Evaluator", () => { let modelEvaluator: ModelEvaluator; let logger: NotificationLogger; @@ -56,7 +58,7 @@ describe("Model Evaluator", () => { extensionPack, updateView, ); - }); + }, SETUP_TIMEOUT); describe("stopping evaluation", () => { it("should just log a message if it never started", async () => { diff --git a/extensions/ql-vscode/test/vscode-tests/activated-extension/variant-analysis/variant-analysis-manager.test.ts b/extensions/ql-vscode/test/vscode-tests/activated-extension/variant-analysis/variant-analysis-manager.test.ts index 1374787104e..850e221d84f 100644 --- a/extensions/ql-vscode/test/vscode-tests/activated-extension/variant-analysis/variant-analysis-manager.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/activated-extension/variant-analysis/variant-analysis-manager.test.ts @@ -12,9 +12,6 @@ import { remove, } from "fs-extra"; import { join } from "path"; -import { Readable } from "stream"; -import * as fetchModule from "node-fetch"; -import { Response } from "node-fetch"; import { VariantAnalysisManager } from "../../../../src/variant-analysis/variant-analysis-manager"; import type { CodeQLCliServer } from "../../../../src/codeql-cli/cli"; @@ -50,10 +47,36 @@ import { } from "../../../../src/variant-analysis/repo-states-store"; import { permissiveFilterSortState } from "../../../unit-tests/variant-analysis-filter-sort.test"; import { createMockVariantAnalysisConfig } from "../../../factories/config"; +import { setupServer } from "msw/node"; +import type { RequestHandler } from "msw"; +import { http } from "msw"; +import { getErrorMessage } from "../../../../src/common/helpers-pure"; // up to 3 minutes per test jest.setTimeout(3 * 60 * 1000); +const server = setupServer(); + +beforeAll(() => + server.listen({ + onUnhandledRequest: "error", + }), +); +afterEach(() => server.resetHandlers()); +afterAll(() => server.close()); + +let requests: Request[] = []; + +beforeAll(() => { + server.events.on("request:start", ({ request }) => { + requests.push(request); + }); +}); + +beforeEach(() => { + requests = []; +}); + describe("Variant Analysis Manager", () => { let app: App; let variantAnalysisManager: VariantAnalysisManager; @@ -176,9 +199,6 @@ describe("Variant Analysis Manager", () => { let getVariantAnalysisRepoStub: jest.SpiedFunction< typeof ghApiClient.getVariantAnalysisRepo >; - let getVariantAnalysisRepoResultStub: jest.SpiedFunction< - typeof fetchModule.default - >; let repoStatesPath: string; @@ -187,7 +207,6 @@ describe("Variant Analysis Manager", () => { ghApiClient, "getVariantAnalysisRepo", ); - getVariantAnalysisRepoResultStub = jest.spyOn(fetchModule, "default"); repoStatesPath = join( storagePath, @@ -198,7 +217,8 @@ describe("Variant Analysis Manager", () => { describe("when the artifact_url is missing", () => { beforeEach(async () => { - const dummyRepoTask = createMockVariantAnalysisRepoTask(); + const dummyRepoTask: VariantAnalysisRepoTask = + createMockVariantAnalysisRepoTask(); delete dummyRepoTask.artifact_url; getVariantAnalysisRepoStub.mockResolvedValue(dummyRepoTask); @@ -210,26 +230,30 @@ describe("Variant Analysis Manager", () => { variantAnalysis, ); - expect(getVariantAnalysisRepoResultStub).not.toHaveBeenCalled(); + expect(requests).toEqual([]); }); }); describe("when the artifact_url is present", () => { - let dummyRepoTask: VariantAnalysisRepoTask; + let dummyRepoTask: ReturnType; + let handlers: RequestHandler[]; beforeEach(async () => { dummyRepoTask = createMockVariantAnalysisRepoTask(); getVariantAnalysisRepoStub.mockResolvedValue(dummyRepoTask); - const sourceFilePath = join( - __dirname, - "data/variant-analysis-results.zip", - ); - const fileContents = await readFile(sourceFilePath); - const response = new Response(Readable.from(fileContents)); - response.size = fileContents.length; - getVariantAnalysisRepoResultStub.mockResolvedValue(response); + handlers = [ + http.get(dummyRepoTask.artifact_url, async () => { + const sourceFilePath = join( + __dirname, + "data/variant-analysis-results.zip", + ); + const fileContents = await readFile(sourceFilePath); + return new Response(fileContents); + }), + ]; + server.resetHandlers(...handlers); }); it("should fetch a repo task", async () => { @@ -247,7 +271,7 @@ describe("Variant Analysis Manager", () => { variantAnalysis, ); - expect(getVariantAnalysisRepoResultStub).toHaveBeenCalled(); + expect(requests).toHaveLength(1); }); it("should skip the download if the repository has already been downloaded", async () => { @@ -283,8 +307,10 @@ describe("Variant Analysis Manager", () => { }); it("should not write the repo state when the download fails", async () => { - getVariantAnalysisRepoResultStub.mockRejectedValue( - new Error("Failed to download"), + server.resetHandlers( + http.get(dummyRepoTask.artifact_url, async () => { + return new Response(JSON.stringify({}), { status: 500 }); + }), ); await expect( @@ -331,8 +357,10 @@ describe("Variant Analysis Manager", () => { }); it("should have a failed repo state when the download fails", async () => { - getVariantAnalysisRepoResultStub.mockRejectedValueOnce( - new Error("Failed to download"), + server.resetHandlers( + http.get(dummyRepoTask.artifact_url, async () => { + return new Response(JSON.stringify({}), { status: 500 }); + }), ); await expect( @@ -344,6 +372,8 @@ describe("Variant Analysis Manager", () => { await expect(pathExists(repoStatesPath)).resolves.toBe(false); + server.resetHandlers(...handlers); + await variantAnalysisManager.autoDownloadVariantAnalysisResult( scannedRepos[1], variantAnalysis, @@ -593,8 +623,8 @@ describe("Variant Analysis Manager", () => { await variantAnalysisManager.cancelVariantAnalysis( variantAnalysis.id + 100, ); - } catch (error: any) { - expect(error.message).toBe( + } catch (error) { + expect(getErrorMessage(error)).toBe( `No variant analysis with id: ${variantAnalysis.id + 100}`, ); } @@ -608,8 +638,8 @@ describe("Variant Analysis Manager", () => { try { await variantAnalysisManager.cancelVariantAnalysis(variantAnalysis.id); - } catch (error: any) { - expect(error.message).toBe( + } catch (error) { + expect(getErrorMessage(error)).toBe( `No workflow run id for variant analysis with id: ${variantAnalysis.id}`, ); } diff --git a/extensions/ql-vscode/test/vscode-tests/activated-extension/variant-analysis/variant-analysis-results-manager.test.ts b/extensions/ql-vscode/test/vscode-tests/activated-extension/variant-analysis/variant-analysis-results-manager.test.ts index 9fa66973e97..842dbaa29e0 100644 --- a/extensions/ql-vscode/test/vscode-tests/activated-extension/variant-analysis/variant-analysis-results-manager.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/activated-extension/variant-analysis/variant-analysis-results-manager.test.ts @@ -1,10 +1,6 @@ import { extLogger } from "../../../../src/common/logging/vscode"; -import { readFile, pathExists, remove, outputJson, readJson } from "fs-extra"; +import { outputJson, pathExists, readFile, readJson, remove } from "fs-extra"; import { join, resolve } from "path"; -import { Readable } from "stream"; -import * as fetchModule from "node-fetch"; -import type { RequestInfo, RequestInit } from "node-fetch"; -import { Response } from "node-fetch"; import { VariantAnalysisResultsManager } from "../../../../src/variant-analysis/variant-analysis-results-manager"; import type { CodeQLCliServer } from "../../../../src/codeql-cli/cli"; @@ -17,9 +13,21 @@ import type { } from "../../../../src/variant-analysis/shared/variant-analysis"; import { mockedObject } from "../../utils/mocking.helpers"; import { createMockVariantAnalysisConfig } from "../../../factories/config"; +import { setupServer } from "msw/node"; +import { http } from "msw"; jest.setTimeout(10_000); +const server = setupServer(); + +beforeAll(() => + server.listen({ + onUnhandledRequest: "error", + }), +); +afterEach(() => server.resetHandlers()); +afterAll(() => server.close()); + describe(VariantAnalysisResultsManager.name, () => { let variantAnalysisId: number; let variantAnalysisResultsManager: VariantAnalysisResultsManager; @@ -37,7 +45,9 @@ describe(VariantAnalysisResultsManager.name, () => { }); describe("download", () => { - let dummyRepoTask: VariantAnalysisRepositoryTask; + let dummyRepoTask: ReturnType< + typeof createMockVariantAnalysisRepositoryTask + >; let variantAnalysisStoragePath: string; let repoTaskStorageDirectory: string; @@ -76,7 +86,8 @@ describe(VariantAnalysisResultsManager.name, () => { describe("when the artifact_url is missing", () => { it("should not try to download the result", async () => { - const dummyRepoTask = createMockVariantAnalysisRepositoryTask(); + const dummyRepoTask: VariantAnalysisRepositoryTask = + createMockVariantAnalysisRepositoryTask(); delete dummyRepoTask.artifactUrl; await expect( @@ -91,10 +102,8 @@ describe(VariantAnalysisResultsManager.name, () => { }); describe("when the artifact_url is present", () => { - let getVariantAnalysisRepoResultStub: jest.SpiedFunction< - typeof fetchModule.default - >; let fileContents: Buffer; + let artifactRequest: Request | undefined; beforeEach(async () => { const sourceFilePath = join( @@ -103,14 +112,19 @@ describe(VariantAnalysisResultsManager.name, () => { ); fileContents = await readFile(sourceFilePath); - getVariantAnalysisRepoResultStub = jest - .spyOn(fetchModule, "default") - .mockImplementation((url: RequestInfo, _init?: RequestInit) => { - if (url === dummyRepoTask.artifactUrl) { - return Promise.resolve(new Response(Readable.from(fileContents))); + artifactRequest = undefined; + + server.resetHandlers( + http.get(dummyRepoTask.artifactUrl, ({ request }) => { + if (artifactRequest) { + throw new Error("Unexpected artifact request"); } - return Promise.reject(new Error("Unexpected artifact URL")); - }); + + artifactRequest = request; + + return new Response(fileContents); + }), + ); }); it("should call the API to download the results", async () => { @@ -121,7 +135,7 @@ describe(VariantAnalysisResultsManager.name, () => { () => Promise.resolve(), ); - expect(getVariantAnalysisRepoResultStub).toHaveBeenCalledTimes(1); + expect(artifactRequest).not.toBeUndefined(); }); it("should save the results zip file to disk", async () => { @@ -151,28 +165,29 @@ describe(VariantAnalysisResultsManager.name, () => { }); it("should report download progress", async () => { - // This generates a "fake" stream which "downloads" the file in 5 chunks, - // rather than in 1 chunk. This is used for testing that we actually get - // multiple progress reports. - async function* generateInParts() { - const partLength = fileContents.length / 5; - for (let i = 0; i < 5; i++) { - yield fileContents.subarray(i * partLength, (i + 1) * partLength); - } - } - - getVariantAnalysisRepoResultStub.mockImplementation( - (url: RequestInfo, _init?: RequestInit) => { - if (url === dummyRepoTask.artifactUrl) { - const response = new Response(Readable.from(generateInParts())); - response.headers.set( - "Content-Length", - fileContents.length.toString(), - ); - return Promise.resolve(response); - } - return Promise.reject(new Error("Unexpected artifact URL")); - }, + server.resetHandlers( + http.get(dummyRepoTask.artifactUrl, () => { + // This generates a "fake" stream which "downloads" the file in 5 chunks, + // rather than in 1 chunk. This is used for testing that we actually get + // multiple progress reports. + const stream = new ReadableStream({ + start(controller) { + const partLength = fileContents.length / 5; + for (let i = 0; i < 5; i++) { + controller.enqueue( + fileContents.subarray(i * partLength, (i + 1) * partLength), + ); + } + controller.close(); + }, + }); + + return new Response(stream, { + headers: { + "Content-Length": fileContents.length.toString(), + }, + }); + }), ); const downloadPercentageChanged = jest diff --git a/extensions/ql-vscode/test/vscode-tests/cli-integration/debugger/debug-controller.ts b/extensions/ql-vscode/test/vscode-tests/cli-integration/debugger/debug-controller.ts index 35435b1a797..86da827d88d 100644 --- a/extensions/ql-vscode/test/vscode-tests/cli-integration/debugger/debug-controller.ts +++ b/extensions/ql-vscode/test/vscode-tests/cli-integration/debugger/debug-controller.ts @@ -83,14 +83,17 @@ class Tracker implements DebugAdapterTracker { kind: "evaluationCompleted", started: this.started!, results: { - ...this.started!, - ...this.completed!, + id: this.started!.id, + results: new Map([[this.queryPath!, this.completed]]), outputDir: new QueryOutputDir(this.started!.outputDir), - queryTarget: { - queryPath: this.queryPath!, - quickEvalPosition: - this.started!.quickEvalContext?.quickEvalPosition, - }, + queryTargets: [ + { + queryPath: this.queryPath!, + outputBaseName: "results", + quickEvalPosition: + this.started!.quickEvalContext?.quickEvalPosition, + }, + ], dbPath: this.database!, }, }); @@ -350,15 +353,19 @@ class DebugController public async expectSucceeded(): Promise { const event = await this.expectCompleted(); - if (event.results.resultType !== QueryResultType.SUCCESS) { - expect(event.results.message).toBe("success"); + const results = Array.from(event.results.results.values()); + expect(results.length).toBe(1); + if (results[0].resultType !== QueryResultType.SUCCESS) { + expect(results[0].message).toBe("success"); } return event; } public async expectFailed(): Promise { const event = await this.expectCompleted(); - expect(event.results.resultType).not.toEqual(QueryResultType.SUCCESS); + const results = Array.from(event.results.results.values()); + expect(results.length).toBe(1); + expect(results[0].resultType).not.toEqual(QueryResultType.SUCCESS); return event; } diff --git a/extensions/ql-vscode/test/vscode-tests/cli-integration/debugger/debugger.test.ts b/extensions/ql-vscode/test/vscode-tests/cli-integration/debugger/debugger.test.ts index 3ced5bead5a..0230bf996f0 100644 --- a/extensions/ql-vscode/test/vscode-tests/cli-integration/debugger/debugger.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/cli-integration/debugger/debugger.test.ts @@ -10,10 +10,10 @@ import { import { describeWithCodeQL } from "../../cli"; import { withDebugController } from "./debug-controller"; import type { CodeQLCliServer } from "../../../../src/codeql-cli/cli"; -import type { QueryOutputDir } from "../../../../src/local-queries/query-output-dir"; import { createVSCodeCommandManager } from "../../../../src/common/vscode/commands"; import type { AllCommands } from "../../../../src/common/commands"; import { getDataFolderFilePath } from "../utils"; +import type { CoreCompletedQuery } from "../../../../src/query-server"; async function selectForQuickEval( path: string, @@ -30,10 +30,15 @@ async function selectForQuickEval( } async function getResultCount( - outputDir: QueryOutputDir, + completedQuery: CoreCompletedQuery, cli: CodeQLCliServer, ): Promise { - const info = await cli.bqrsInfo(outputDir.bqrsPath, 100); + const results = Array.from(completedQuery.results.values()); + expect(results.length).toBe(1); + const info = await cli.bqrsInfo( + completedQuery.outputDir.getBqrsPath(results[0].outputBaseName), + 100, + ); const resultSet = info["result-sets"][0]; return resultSet.rows; } @@ -49,6 +54,9 @@ describeWithCodeQL()("Debugger", () => { const quickEvalQueryPath = getDataFolderFilePath( "debugger/QuickEvalQuery.ql", ); + const quickEvalBigIntQueryPath = getDataFolderFilePath( + "debugger/QuickEvalBigIntQuery.ql", + ); const quickEvalLibPath = getDataFolderFilePath("debugger/QuickEvalLib.qll"); beforeEach(async () => { @@ -101,8 +109,9 @@ describeWithCodeQL()("Debugger", () => { expect(result.started.quickEvalContext!.quickEvalText).toBe( "InterestingNumber", ); - expect(result.results.queryTarget.quickEvalPosition).toBeDefined(); - expect(await getResultCount(result.results.outputDir, cli)).toBe(8); + expect(result.results.queryTargets.length).toBe(1); + expect(result.results.queryTargets[0].quickEvalPosition).toBeDefined(); + expect(await getResultCount(result.results, cli)).toBe(8); await controller.expectStopped(); }); }); @@ -119,8 +128,9 @@ describeWithCodeQL()("Debugger", () => { expect(result.started.quickEvalContext!.quickEvalText).toBe( "InterestingNumber", ); - expect(result.results.queryTarget.quickEvalPosition).toBeDefined(); - expect(await getResultCount(result.results.outputDir, cli)).toBe(0); + expect(result.results.queryTargets.length).toBe(1); + expect(result.results.queryTargets[0].quickEvalPosition).toBeDefined(); + expect(await getResultCount(result.results, cli)).toBe(0); await controller.expectStopped(); }); }); @@ -138,8 +148,28 @@ describeWithCodeQL()("Debugger", () => { expect(result.started.quickEvalContext!.quickEvalText).toBe( "InterestingNumber", ); - expect(result.results.queryTarget.quickEvalPosition).toBeDefined(); - expect(await getResultCount(result.results.outputDir, cli)).toBe(8); + expect(result.results.queryTargets.length).toBe(1); + expect(result.results.queryTargets[0].quickEvalPosition).toBeDefined(); + expect(await getResultCount(result.results, cli)).toBe(8); + await controller.expectStopped(); + }); + }); + + it("should run a quick evaluation with a bigint-valued result column", async () => { + await withDebugController(appCommands, async (controller) => { + await selectForQuickEval(quickEvalBigIntQueryPath, 4, 23, 4, 37); + + // Don't specify a query path, so we'll default to the active document ("QuickEvalBigIntQuery.ql") + await controller.startDebuggingSelection({}); + await controller.expectLaunched(); + const result = await controller.expectSucceeded(); + expect(result.started.quickEvalContext).toBeDefined(); + expect(result.started.quickEvalContext!.quickEvalText).toBe( + "getBigIntValue", + ); + expect(result.results.queryTargets.length).toBe(1); + expect(result.results.queryTargets[0].quickEvalPosition).toBeDefined(); + expect(await getResultCount(result.results, cli)).toBe(8); await controller.expectStopped(); }); }); @@ -191,7 +221,7 @@ describeWithCodeQL()("Debugger", () => { await controller.expectSessionClosed(); // Expect the number of results to be the same as if we had run the simple query, not the quick eval query. - expect(await getResultCount(result.results.outputDir, cli)).toBe(2); + expect(await getResultCount(result.results, cli)).toBe(2); }); }); }); diff --git a/extensions/ql-vscode/test/vscode-tests/cli-integration/jest.setup.ts b/extensions/ql-vscode/test/vscode-tests/cli-integration/jest.setup.ts index c3990282a7a..af6b5a99573 100644 --- a/extensions/ql-vscode/test/vscode-tests/cli-integration/jest.setup.ts +++ b/extensions/ql-vscode/test/vscode-tests/cli-integration/jest.setup.ts @@ -8,7 +8,6 @@ import { import { createWriteStream, existsSync, mkdirpSync } from "fs-extra"; import { dirname, join } from "path"; import { DB_URL, dbLoc, testprojLoc } from "../global.helper"; -import fetch from "node-fetch"; import { renameSync } from "fs"; import { unzipToDirectoryConcurrently } from "../../../src/common/unzip-concurrently"; import { platform } from "os"; @@ -21,18 +20,42 @@ beforeAll(async () => { if (!existsSync(dbLoc)) { console.log(`Downloading test database to ${dbLoc}`); - await new Promise((resolve, reject) => { - return fetch(DB_URL).then((response) => { - const dest = createWriteStream(dbLoc); - response.body.pipe(dest); + const response = await fetch(DB_URL); + if (!response.body) { + throw new Error("No response body found"); + } + if (!response.ok) { + throw new Error(`Failed to download test database: ${response.status}`); + } + + const dest = createWriteStream(dbLoc); + + const reader = response.body.getReader(); + for (;;) { + const { done, value } = await reader.read(); - response.body.on("error", reject); - dest.on("error", reject); - dest.on("close", () => { - resolve(dbLoc); + if (done) { + break; + } + + await new Promise((resolve, reject) => { + dest.write(value, (err) => { + if (err) { + reject(err); + } + resolve(undefined); }); }); - }); + } + + await new Promise((resolve, reject) => + dest.close((err) => { + if (err) { + reject(err); + } + resolve(undefined); + }), + ); } // unzip the database from dbLoc to testprojLoc diff --git a/extensions/ql-vscode/test/vscode-tests/cli-integration/local-queries/skeleton-query-wizard.test.ts b/extensions/ql-vscode/test/vscode-tests/cli-integration/local-queries/skeleton-query-wizard.test.ts index 9076ec9bed4..4e5c9489869 100644 --- a/extensions/ql-vscode/test/vscode-tests/cli-integration/local-queries/skeleton-query-wizard.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/cli-integration/local-queries/skeleton-query-wizard.test.ts @@ -78,7 +78,9 @@ describe("SkeletonQueryWizard", () => { getSupportedLanguages: jest .fn() .mockResolvedValue([ + "actions", "ruby", + "rust", "javascript", "go", "java", diff --git a/extensions/ql-vscode/test/vscode-tests/cli-integration/queries.test.ts b/extensions/ql-vscode/test/vscode-tests/cli-integration/queries.test.ts index b3bd56a2371..239b1ca0435 100644 --- a/extensions/ql-vscode/test/vscode-tests/cli-integration/queries.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/cli-integration/queries.test.ts @@ -162,7 +162,7 @@ describeWithCodeQL()("Queries", () => { async function runQueryWithExtensions() { console.log("Calling compileAndRunQuery"); - const result = await compileAndRunQuery( + const completedQuery = await compileAndRunQuery( mode, appCommandManager, localQueries, @@ -176,12 +176,14 @@ describeWithCodeQL()("Queries", () => { console.log("Completed compileAndRunQuery"); // Check that query was successful - expect(result.resultType).toBe(QueryResultType.SUCCESS); + const results = Array.from(completedQuery.results.values()); + expect(results.length).toBe(1); + expect(results[0].resultType).toBe(QueryResultType.SUCCESS); console.log("Loading query results"); // Load query results const chunk = await qs.cliServer.bqrsDecode( - result.outputDir.bqrsPath, + completedQuery.outputDir.getBqrsPath(results[0].outputBaseName), SELECT_QUERY_NAME, { // there should only be one result @@ -198,7 +200,7 @@ describeWithCodeQL()("Queries", () => { describe.each(MODES)("running queries (%s)", (mode) => { it("should run a query", async () => { - const result = await compileAndRunQuery( + const completedQuery = await compileAndRunQuery( mode, appCommandManager, localQueries, @@ -211,13 +213,15 @@ describeWithCodeQL()("Queries", () => { ); // just check that the query was successful - expect(result.resultType).toBe(QueryResultType.SUCCESS); + const results = Array.from(completedQuery.results.values()); + expect(results.length).toBe(1); + expect(results[0].resultType).toBe(QueryResultType.SUCCESS); }); // Asserts a fix for bug https://github.com/github/vscode-codeql/issues/733 it("should restart the database and run a query", async () => { await appCommandManager.execute("codeQL.restartQueryServer"); - const result = await compileAndRunQuery( + const completedQuery = await compileAndRunQuery( mode, appCommandManager, localQueries, @@ -229,7 +233,9 @@ describeWithCodeQL()("Queries", () => { undefined, ); - expect(result.resultType).toBe(QueryResultType.SUCCESS); + const results = Array.from(completedQuery.results.values()); + expect(results.length).toBe(1); + expect(results[0].resultType).toBe(QueryResultType.SUCCESS); }); }); @@ -278,7 +284,7 @@ describeWithCodeQL()("Queries", () => { function safeDel(file: string) { try { unlinkSync(file); - } catch (e) { + } catch { // ignore } } diff --git a/extensions/ql-vscode/test/vscode-tests/cli-integration/query-server/query-server-client.test.ts b/extensions/ql-vscode/test/vscode-tests/cli-integration/query-server/query-server-client.test.ts index c986e69ae62..3fe7c6fadfb 100644 --- a/extensions/ql-vscode/test/vscode-tests/cli-integration/query-server/query-server-client.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/cli-integration/query-server/query-server-client.test.ts @@ -3,9 +3,12 @@ import { dirSync } from "tmp"; import { CancellationTokenSource } from "vscode-jsonrpc"; import type { RunQueryParams } from "../../../../src/query-server/messages"; import { + clearCache, QueryResultType, registerDatabases, runQuery, + trimCache, + trimCacheWithMode, } from "../../../../src/query-server/messages"; import type { CodeQLCliServer } from "../../../../src/codeql-cli/cli"; import type { BqrsCellValue } from "../../../../src/common/bqrs-cli-types"; @@ -189,14 +192,67 @@ describeWithCodeQL()("using the query server", () => { it(`should have correct results for query ${queryName}`, async () => { await parsedResults.done(); expect(actualResultSets).not.toEqual({}); - expect(Object.keys(actualResultSets!).sort()).toEqual( + expect(Object.keys(actualResultSets).sort()).toEqual( Object.keys(queryTestCase.expectedResultSets).sort(), ); for (const name in queryTestCase.expectedResultSets) { - expect(actualResultSets![name]).toEqual( + expect(actualResultSets[name]).toEqual( queryTestCase.expectedResultSets[name], ); } }); + + it("should invoke codeQL.trimOverlayBaseCache command when queryServerTrimCacheWithMode is enabled", async () => { + const features = (await cliServer.getFeatures()) as { + [feature: string]: boolean | undefined; + }; + + // Register the database first (if not already done) + await qs.sendRequest(registerDatabases, { databases: [db] }); + + try { + // Send the trimCacheWithMode request + const params = { + db, + mode: "overlay", + }; + const result = await qs.sendRequest( + trimCacheWithMode, + params, + token, + () => {}, + ); + + // The result should contain a deletionMessage string + expect(result).toHaveProperty("deletionMessage"); + expect(typeof result.deletionMessage).toBe("string"); + expect(features.queryServerTrimCacheWithMode).toBeTruthy(); + } catch (e) { + expect(features.queryServerTrimCacheWithMode).toBeFalsy(); + expect((e as Error).message).toContain( + "Unsupported request method: evaluation/trimCacheWithMode", + ); + } + }); + + it("should invoke trimCache command and receive a deletionMessage", async () => { + // Register the database first (if not already done) + await qs.sendRequest(registerDatabases, { databases: [db] }); + + const params = { db }; + const result = await qs.sendRequest(trimCache, params, token, () => {}); + expect(result).toHaveProperty("deletionMessage"); + expect(typeof result.deletionMessage).toBe("string"); + }); + + it("should invoke clearCache command and receive a deletionMessage", async () => { + // Register the database first (if not already done) + await qs.sendRequest(registerDatabases, { databases: [db] }); + + const params = { db, dryRun: false }; + const result = await qs.sendRequest(clearCache, params, token, () => {}); + expect(result).toHaveProperty("deletionMessage"); + expect(typeof result.deletionMessage).toBe("string"); + }); } }); diff --git a/extensions/ql-vscode/test/vscode-tests/cli-integration/run-cli.test.ts b/extensions/ql-vscode/test/vscode-tests/cli-integration/run-cli.test.ts index ef92ee39e06..326cfdf4892 100644 --- a/extensions/ql-vscode/test/vscode-tests/cli-integration/run-cli.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/cli-integration/run-cli.test.ts @@ -16,7 +16,7 @@ import { faker } from "@faker-js/faker"; import { getActivatedExtension } from "../global.helper"; import type { BaseLogger } from "../../../src/common/logging"; import { getQlPackForDbscheme } from "../../../src/databases/qlpack"; -import { dbSchemeToLanguage } from "../../../src/common/query-language"; +import { languageToDbScheme } from "../../../src/common/query-language"; /** * Perform proper integration tests by running the CLI @@ -27,14 +27,6 @@ describe("Use cli", () => { let logSpy: jest.SpiedFunction; - const languageToDbScheme = Object.entries(dbSchemeToLanguage).reduce( - (acc, [k, v]) => { - acc[v] = k; - return acc; - }, - {} as { [k: string]: string }, - ); - beforeEach(async () => { const extension = await getActivatedExtension(); cli = extension.cliServer; @@ -107,12 +99,17 @@ describe("Use cli", () => { itWithCodeQL()( "should resolve printAST queries for supported languages", async () => { - for (const lang of supportedLanguages) { + for (let lang of supportedLanguages) { if (lang === "go") { // The codeql-go submodule is not available in the integration tests. return; } + if (lang === "actions") { + // The actions queries use the javascript dbscheme. + lang = "javascript"; + } + console.log(`resolving printAST queries for ${lang}`); const pack = await getQlPackForDbscheme(cli, languageToDbScheme[lang]); expect(pack.dbschemePack).toContain(lang); diff --git a/extensions/ql-vscode/test/vscode-tests/cli-integration/variant-analysis/variant-analysis-manager.test.ts b/extensions/ql-vscode/test/vscode-tests/cli-integration/variant-analysis/variant-analysis-manager.test.ts index 1f770162533..62a8af2b61f 100644 --- a/extensions/ql-vscode/test/vscode-tests/cli-integration/variant-analysis/variant-analysis-manager.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/cli-integration/variant-analysis/variant-analysis-manager.test.ts @@ -15,7 +15,6 @@ import { isAbsolute, join } from "path"; import { VariantAnalysisManager } from "../../../../src/variant-analysis/variant-analysis-manager"; import type { CodeQLCliServer } from "../../../../src/codeql-cli/cli"; -import { CliVersionConstraint } from "../../../../src/codeql-cli/cli"; import { getActivatedExtension, storagePath } from "../../global.helper"; import { VariantAnalysisResultsManager } from "../../../../src/variant-analysis/variant-analysis-results-manager"; import type { VariantAnalysisSubmission } from "../../../../src/variant-analysis/shared/variant-analysis"; @@ -347,13 +346,6 @@ describe("Variant Analysis Manager", () => { const queryToRun = "Security/CWE/CWE-020/ExternalAPIsUsedWithUntrustedData.ql"; - // Recent versions of the CLI don't preserve queries with extensible predicates in MRVA packs, - // because all the necessary info is in the `.packinfo` file. - const extraQueries = - (await cli.cliConstraints.preservesExtensiblePredicatesInMrvaPack()) - ? ["Telemetry/ExtractorInformation.ql"] - : []; - const qlPackRootPath = join(process.env.TEST_CODEQL_PATH, "java/ql/src"); const queryPath = join(qlPackRootPath, queryToRun); const qlPackFilePath = join(qlPackRootPath, "qlpack.yml"); @@ -362,7 +354,7 @@ describe("Variant Analysis Manager", () => { qlPackRootPath, qlPackFilePath, expectedPackName: "codeql/java-queries", - filesThatExist: [queryToRun, ...extraQueries], + filesThatExist: [queryToRun], filesThatDoNotExist: [], qlxFilesThatExist: [], dependenciesToCheck: ["codeql/java-all"], @@ -372,13 +364,6 @@ describe("Variant Analysis Manager", () => { }); it("should run multiple queries that are part of the same pack", async () => { - if (!(await cli.cliConstraints.supportsPackCreateWithMultipleQueries())) { - console.log( - `Skipping test because MRVA with multiple queries is only suppported in CLI version ${CliVersionConstraint.CLI_VERSION_WITH_MULTI_QUERY_PACK_CREATE} or later.`, - ); - return; - } - await doVariantAnalysisTest({ queryPaths: [ "data-qlpack-multiple-queries/query1.ql", diff --git a/extensions/ql-vscode/test/vscode-tests/cli-integration/variant-analysis/variant-analysis-submission-integration.test.ts b/extensions/ql-vscode/test/vscode-tests/cli-integration/variant-analysis/variant-analysis-submission-integration.test.ts index 04e555fd1e9..928371856a8 100644 --- a/extensions/ql-vscode/test/vscode-tests/cli-integration/variant-analysis/variant-analysis-submission-integration.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/cli-integration/variant-analysis/variant-analysis-submission-integration.test.ts @@ -3,26 +3,21 @@ import { resolve } from "path"; import type { TextDocument } from "vscode"; import { authentication, commands, window, workspace } from "vscode"; -import { MockGitHubApiServer } from "../../../../src/common/mock-gh-api/mock-gh-api-server"; import { mockedQuickPickItem } from "../../utils/mocking.helpers"; import { setRemoteControllerRepo } from "../../../../src/config"; import { getActivatedExtension } from "../../global.helper"; import { createVSCodeCommandManager } from "../../../../src/common/vscode/commands"; import type { AllCommands } from "../../../../src/common/commands"; -const mockServer = new MockGitHubApiServer(); -beforeAll(() => mockServer.startServer()); -afterEach(() => mockServer.unloadScenario()); -afterAll(() => mockServer.stopServer()); - async function showQlDocument(name: string): Promise { const folderPath = workspace.workspaceFolders![0].uri.fsPath; const documentPath = resolve(folderPath, name); const document = await workspace.openTextDocument(documentPath); - await window.showTextDocument(document!); + await window.showTextDocument(document); return document; } +// MSW can't intercept fetch requests made in VS Code, so we are skipping these tests for now describe("Variant Analysis Submission Integration", () => { const commandManager = createVSCodeCommandManager(); let quickPickSpy: jest.SpiedFunction; @@ -53,9 +48,16 @@ describe("Variant Analysis Submission Integration", () => { await getActivatedExtension(); }); + afterAll(async () => { + await commandManager.execute("codeQL.mockGitHubApiServer.unloadScenario"); + }); + describe("Successful scenario", () => { beforeEach(async () => { - await mockServer.loadScenario("mrva-problem-query-success"); + await commandManager.execute( + "codeQL.mockGitHubApiServer.loadScenario", + "mrva-problem-query-success", + ); }); it("opens the variant analysis view", async () => { @@ -80,7 +82,10 @@ describe("Variant Analysis Submission Integration", () => { describe("Missing controller repo", () => { beforeEach(async () => { - await mockServer.loadScenario("mrva-missing-controller-repo"); + await commandManager.execute( + "codeQL.mockGitHubApiServer.loadScenario", + "mrva-missing-controller-repo", + ); }); it("shows the error message", async () => { @@ -107,7 +112,10 @@ describe("Variant Analysis Submission Integration", () => { describe("Submission failure", () => { beforeEach(async () => { - await mockServer.loadScenario("mrva-submission-failure"); + await commandManager.execute( + "codeQL.mockGitHubApiServer.loadScenario", + "mrva-submission-failure", + ); }); it("shows the error message", async () => { diff --git a/extensions/ql-vscode/test/vscode-tests/ensureCli.ts b/extensions/ql-vscode/test/vscode-tests/ensureCli.ts index 15e88c284ce..4c090a10910 100644 --- a/extensions/ql-vscode/test/vscode-tests/ensureCli.ts +++ b/extensions/ql-vscode/test/vscode-tests/ensureCli.ts @@ -5,7 +5,6 @@ import { codeQlLauncherName, } from "../../src/common/distribution"; import { unzipToDirectorySequentially } from "../../src/common/unzip"; -import fetch from "node-fetch"; import supportedCliVersions from "../../supported_cli_versions.json"; /** @@ -112,26 +111,32 @@ async function downloadWithProgress(url: string, filePath: string) { const contentLength = Number(assetStream.headers.get("content-length") || 0); console.log("Total content size", Math.round(contentLength / _1MB), "MB"); const archiveFile = createWriteStream(filePath); - const body = assetStream.body; - await new Promise((resolve, reject) => { - let numBytesDownloaded = 0; - let lastMessage = 0; - body.on("data", (data) => { - numBytesDownloaded += data.length; - if (numBytesDownloaded - lastMessage > _10MB) { - console.log("Downloaded", Math.round(numBytesDownloaded / _1MB), "MB"); - lastMessage = numBytesDownloaded; - } - archiveFile.write(data); - }); - body.on("finish", () => { - archiveFile.end(() => { - console.log("Finished download into", filePath); - resolve(); + const body = assetStream.body?.getReader(); + if (!body) { + throw new Error("No response body found"); + } + + let numBytesDownloaded = 0; + let lastMessage = 0; + + while (true) { + const { done, value } = await body.read(); + if (done) { + return new Promise((resolve) => { + archiveFile.end(() => { + console.log("Finished download into", filePath); + resolve(undefined); + }); }); - }); - body.on("error", reject); - }); + } + + numBytesDownloaded += value.length; + if (numBytesDownloaded - lastMessage > _10MB) { + console.log("Downloaded", Math.round(numBytesDownloaded / _1MB), "MB"); + lastMessage = numBytesDownloaded; + } + archiveFile.write(value); + } } async function unzipWithProgress( diff --git a/extensions/ql-vscode/test/vscode-tests/jest.activated-extension.setup.ts b/extensions/ql-vscode/test/vscode-tests/jest.activated-extension.setup.ts index 5085fc19460..dc47c409111 100644 --- a/extensions/ql-vscode/test/vscode-tests/jest.activated-extension.setup.ts +++ b/extensions/ql-vscode/test/vscode-tests/jest.activated-extension.setup.ts @@ -8,6 +8,7 @@ import { setStoragePath, storagePath, } from "./global.helper"; +import { getErrorMessage } from "../../src/common/helpers-pure"; if (process.env.CI) { jest.retryTimes(3, { @@ -50,6 +51,8 @@ export async function afterAllAction() { } catch (e) { // we are exiting anyway so don't worry about it. // most likely the directory this is a test on Windows and some files are locked. - console.warn(`Failed to remove storage directory '${storagePath}': ${e}`); + console.warn( + `Failed to remove storage directory '${storagePath}': ${getErrorMessage(e)}`, + ); } } diff --git a/extensions/ql-vscode/test/vscode-tests/jest.config.base.ts b/extensions/ql-vscode/test/vscode-tests/jest.config.base.ts index 1af4f866146..4b2d69a28d1 100644 --- a/extensions/ql-vscode/test/vscode-tests/jest.config.base.ts +++ b/extensions/ql-vscode/test/vscode-tests/jest.config.base.ts @@ -1,5 +1,6 @@ import type { Config } from "jest"; import { resolve } from "path"; +import { transformIgnorePatterns } from "../jest-config"; /* * For a detailed explanation regarding each configuration property and type check, visit: @@ -181,10 +182,7 @@ const config: Config = { }, // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - transformIgnorePatterns: [ - // These use ES modules, so need to be transformed - "node_modules/(?!(?:@vscode/webview-ui-toolkit|@microsoft/.+|exenv-es6|nanoid|p-queue|p-timeout)/.*)", - ], + transformIgnorePatterns, // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them // unmockedModulePathPatterns: undefined, diff --git a/extensions/ql-vscode/test/vscode-tests/minimal-workspace/local-queries/determining-selected-query-test.ts b/extensions/ql-vscode/test/vscode-tests/minimal-workspace/local-queries/determining-selected-query-test.ts index f05786680b6..c6c07c161da 100644 --- a/extensions/ql-vscode/test/vscode-tests/minimal-workspace/local-queries/determining-selected-query-test.ts +++ b/extensions/ql-vscode/test/vscode-tests/minimal-workspace/local-queries/determining-selected-query-test.ts @@ -10,7 +10,7 @@ async function showQlDocument(name: string): Promise { const folderPath = workspace.workspaceFolders![0].uri.fsPath; const documentPath = resolve(folderPath, name); const document = await workspace.openTextDocument(documentPath); - await window.showTextDocument(document!); + await window.showTextDocument(document); return document; } diff --git a/extensions/ql-vscode/test/vscode-tests/minimal-workspace/query-testing/qltest-discovery.test.ts b/extensions/ql-vscode/test/vscode-tests/minimal-workspace/query-testing/qltest-discovery.test.ts index 7e538bb1111..e2329031ed0 100644 --- a/extensions/ql-vscode/test/vscode-tests/minimal-workspace/query-testing/qltest-discovery.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/minimal-workspace/query-testing/qltest-discovery.test.ts @@ -3,6 +3,7 @@ import { Uri } from "vscode"; import { remove } from "fs-extra"; import { join } from "path"; +import { isIOError } from "../../../../src/common/files"; import { QLTestDiscovery } from "../../../../src/query-testing/qltest-discovery"; import type { DirectoryResult } from "tmp-promise"; import { dir } from "tmp-promise"; @@ -49,7 +50,15 @@ describe("qltest-discovery", () => { }); afterEach(async () => { - await directory.cleanup(); + try { + await directory.cleanup(); + } catch (e) { + if (isIOError(e) && e.code === "ENOENT") { + // This is fine, the directory was already removed + } else { + throw e; + } + } }); it("should run discovery", async () => { diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/codeql-cli/distribution.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/codeql-cli/distribution.test.ts index 189e1b12b0c..965aebb1d21 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/codeql-cli/distribution.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/codeql-cli/distribution.test.ts @@ -1,21 +1,44 @@ import * as log from "../../../../src/common/logging/notifications"; import { extLogger } from "../../../../src/common/logging/vscode"; -import { writeFile } from "fs-extra"; +import { + outputFile, + outputJson, + readFile, + readJson, + writeFile, +} from "fs-extra"; import { join } from "path"; import * as os from "os"; import type { DirectoryResult } from "tmp-promise"; import { dir } from "tmp-promise"; +import type { DistributionState } from "../../../../src/codeql-cli/distribution"; import { + DEFAULT_DISTRIBUTION_VERSION_RANGE, DistributionManager, + DistributionUpdateCheckResultKind, getExecutableFromDirectory, } from "../../../../src/codeql-cli/distribution"; import type { showAndLogErrorMessage, showAndLogWarningMessage, } from "../../../../src/common/logging"; +import { createMockLogger } from "../../../__mocks__/loggerMock"; +import { mockedObject } from "../../../mocked-object"; +import type { DistributionConfig } from "../../../../src/config"; +import type { ExtensionContext } from "vscode"; +import { Uri } from "vscode"; +import { setupServer } from "msw/node"; +import { http, HttpResponse } from "msw"; +import { + codeQlLauncherName, + getRequiredAssetName, +} from "../../../../src/common/distribution"; +import type { GithubRelease } from "../../../../src/codeql-cli/distribution/releases-api-consumer"; +import type { Release } from "../../../../src/codeql-cli/distribution/release"; +import { zip } from "zip-a-folder"; jest.mock("os", () => { - const original = jest.requireActual("os"); + const original: typeof os = jest.requireActual("os"); return { ...original, platform: jest.fn(), @@ -108,6 +131,7 @@ describe("Launcher path", () => { { customCodeQlPath: pathToCmd } as any, {} as any, {} as any, + createMockLogger(), ); const result = await manager.getCodeQlPathWithoutVersionCheck(); @@ -126,6 +150,7 @@ describe("Launcher path", () => { { customCodeQlPath: pathToCmd } as any, {} as any, {} as any, + createMockLogger(), ); const result = await manager.getCodeQlPathWithoutVersionCheck(); @@ -141,6 +166,7 @@ describe("Launcher path", () => { { customCodeQlPath: pathToCmd } as any, {} as any, {} as any, + createMockLogger(), ); const result = await manager.getCodeQlPathWithoutVersionCheck(); @@ -151,3 +177,344 @@ describe("Launcher path", () => { expect(errorSpy).toHaveBeenCalledTimes(1); }); }); + +describe("Distribution updates", () => { + const server = setupServer(); + beforeAll(() => + server.listen({ + onUnhandledRequest: "error", + }), + ); + afterEach(() => server.resetHandlers()); + afterAll(() => server.close()); + + let manager: DistributionManager; + + let globalStorageDirectory: DirectoryResult; + + beforeEach(async () => { + globalStorageDirectory = await dir({ + unsafeCleanup: true, + }); + + manager = new DistributionManager( + mockedObject({ + customCodeQlPath: undefined, + channel: "stable", + includePrerelease: false, + personalAccessToken: undefined, + downloadTimeout: 100, + onDidChangeConfiguration: () => {}, + }), + DEFAULT_DISTRIBUTION_VERSION_RANGE, + mockedObject({ + globalState: { + get: () => {}, + update: () => {}, + }, + globalStorageUri: Uri.file(globalStorageDirectory.path), + }), + createMockLogger(), + ); + + await manager.initialize(); + }); + + afterEach(async () => { + await globalStorageDirectory.cleanup(); + }); + + it("should have an empty distribution.json file after initialization", async () => { + expect( + await readJson(join(globalStorageDirectory.path, "distribution.json")), + ).toEqual({ + folderIndex: 0, + release: null, + } satisfies DistributionState); + }); + + describe("checkForUpdatesToDistribution", () => { + beforeEach(() => { + server.resetHandlers( + http.get( + "https://api.github.com/repos/github/codeql-cli-binaries/releases", + async () => { + return HttpResponse.json([ + { + id: 1335, + name: "v2.2.0", + tag_name: "v2.2.0", + created_at: "2024-02-02T02:02:02Z", + prerelease: false, + assets: [ + { + id: 783, + name: getRequiredAssetName(), + size: 2378, + }, + ], + }, + { + id: 1, + name: "v2.1.0", + tag_name: "v2.1.0", + created_at: "2022-02-02T02:02:02Z", + prerelease: false, + assets: [ + { + id: 1, + name: getRequiredAssetName(), + size: 100, + }, + ], + }, + ] satisfies GithubRelease[]); + }, + ), + ); + }); + + it("should have an update when no distribution is installed", async () => { + expect( + await manager.checkForUpdatesToExtensionManagedDistribution(0), + ).toEqual({ + kind: DistributionUpdateCheckResultKind.UpdateAvailable, + updatedRelease: { + id: 1335, + name: "v2.2.0", + createdAt: "2024-02-02T02:02:02Z", + assets: [ + { + id: 783, + name: getRequiredAssetName(), + size: 2378, + }, + ], + }, + } satisfies Awaited< + ReturnType + >); + }); + + it("should not have an update when the latest distribution is installed", async () => { + await outputJson(join(globalStorageDirectory.path, "distribution.json"), { + folderIndex: 1, + release: { + id: 1335, + name: "v2.2.0", + createdAt: "2024-02-02T02:02:02Z", + assets: [ + { + id: 783, + name: getRequiredAssetName(), + size: 2378, + }, + ], + }, + } satisfies DistributionState); + await outputFile( + join( + globalStorageDirectory.path, + "distribution1", + "codeql", + codeQlLauncherName(), + ), + "", + ); + + // Re-initialize manager to read the state from the file + await manager.initialize(); + + expect( + await manager.checkForUpdatesToExtensionManagedDistribution(0), + ).toEqual({ + kind: DistributionUpdateCheckResultKind.AlreadyUpToDate, + } satisfies Awaited< + ReturnType + >); + }); + + it("should have an update when an older distribution is installed", async () => { + await outputJson(join(globalStorageDirectory.path, "distribution.json"), { + folderIndex: 1, + release: { + id: 1, + name: "v2.1.0", + createdAt: "2022-02-02T02:02:02Z", + assets: [ + { + id: 1, + name: getRequiredAssetName(), + size: 100, + }, + ], + }, + } satisfies DistributionState); + await outputFile( + join( + globalStorageDirectory.path, + "distribution1", + "codeql", + codeQlLauncherName(), + ), + "", + ); + + // Re-initialize manager to read the state from the file + await manager.initialize(); + + expect( + await manager.checkForUpdatesToExtensionManagedDistribution(0), + ).toEqual({ + kind: DistributionUpdateCheckResultKind.UpdateAvailable, + updatedRelease: { + id: 1335, + name: "v2.2.0", + createdAt: "2024-02-02T02:02:02Z", + assets: [ + { + id: 783, + name: getRequiredAssetName(), + size: 2378, + }, + ], + }, + } satisfies Awaited< + ReturnType + >); + }); + }); + + describe("installExtensionManagedDistributionRelease", () => { + const release: Release = { + id: 1335, + name: "v2.2.0", + createdAt: "2024-02-02T02:02:02Z", + assets: [ + { + id: 783, + name: getRequiredAssetName(), + size: 2378, + }, + ], + }; + + let codeqlReleaseZipTempDir: DirectoryResult; + let codeqlReleaseZipPath: string; + + beforeAll(async () => { + codeqlReleaseZipTempDir = await dir({ + unsafeCleanup: true, + }); + + await outputFile( + join( + codeqlReleaseZipTempDir.path, + "distribution", + "codeql", + codeQlLauncherName(), + ), + "launcher!", + ); + codeqlReleaseZipPath = join(codeqlReleaseZipTempDir.path, "codeql.zip"); + + await zip( + join(codeqlReleaseZipTempDir.path, "distribution"), + codeqlReleaseZipPath, + ); + + server.resetHandlers( + http.get( + "https://api.github.com/repos/github/codeql-cli-binaries/releases/assets/783", + async () => { + const file = await readFile(codeqlReleaseZipPath); + + return HttpResponse.arrayBuffer(file.buffer, { + headers: { + "Content-Type": "application/octet-stream", + }, + }); + }, + ), + ); + }); + + afterAll(async () => { + await codeqlReleaseZipTempDir?.cleanup(); + }); + + it("installs a distribution when no distribution exists", async () => { + await manager.installExtensionManagedDistributionRelease(release); + + expect( + await readJson(join(globalStorageDirectory.path, "distribution.json")), + ).toEqual({ + folderIndex: 1, + release, + } satisfies DistributionState); + + expect( + await readFile( + join( + globalStorageDirectory.path, + "distribution1", + "codeql", + codeQlLauncherName(), + ), + "utf-8", + ), + ).toEqual("launcher!"); + }); + + it("installs a distribution when a distribution already exists", async () => { + await outputJson(join(globalStorageDirectory.path, "distribution.json"), { + folderIndex: 78, + release: { + id: 1, + name: "v2.1.0", + createdAt: "2022-02-02T02:02:02Z", + assets: [ + { + id: 1, + name: getRequiredAssetName(), + size: 100, + }, + ], + }, + } satisfies DistributionState); + await outputFile( + join( + globalStorageDirectory.path, + "distribution78", + "codeql", + codeQlLauncherName(), + ), + "", + ); + + // Re-initialize manager to read the state from the file + await manager.initialize(); + + await manager.installExtensionManagedDistributionRelease(release); + + expect( + await readJson(join(globalStorageDirectory.path, "distribution.json")), + ).toEqual({ + folderIndex: 79, + release, + } satisfies DistributionState); + + expect( + await readFile( + join( + globalStorageDirectory.path, + "distribution79", + "codeql", + codeQlLauncherName(), + ), + "utf-8", + ), + ).toEqual("launcher!"); + }); + }); +}); diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/codeql-cli/distribution/cleaner.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/codeql-cli/distribution/cleaner.test.ts new file mode 100644 index 00000000000..20a7a71c318 --- /dev/null +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/codeql-cli/distribution/cleaner.test.ts @@ -0,0 +1,146 @@ +import { ExtensionManagedDistributionCleaner } from "../../../../../src/codeql-cli/distribution/cleaner"; +import { mockedObject } from "../../../../mocked-object"; +import type { ExtensionContext } from "vscode"; +import { Uri } from "vscode"; +import { createMockLogger } from "../../../../__mocks__/loggerMock"; +import type { DirectoryResult } from "tmp-promise"; +import { dir } from "tmp-promise"; +import { outputFile, pathExists } from "fs-extra"; +import { join } from "path"; +import { codeQlLauncherName } from "../../../../../src/common/distribution"; +import { getDirectoryNamesInsidePath } from "../../../../../src/common/files"; + +describe("ExtensionManagedDistributionCleaner", () => { + let globalStorageDirectory: DirectoryResult; + + let manager: ExtensionManagedDistributionCleaner; + + beforeEach(async () => { + globalStorageDirectory = await dir({ + unsafeCleanup: true, + }); + + manager = new ExtensionManagedDistributionCleaner( + mockedObject({ + globalStorageUri: Uri.file(globalStorageDirectory.path), + }), + createMockLogger(), + { + folderIndex: 768, + distributionFolderPrefix: "distribution", + }, + ); + + // Mock setTimeout to call the callback immediately + jest.spyOn(global, "setTimeout").mockImplementation((callback) => { + callback(); + return 0 as unknown as ReturnType; + }); + }); + + afterEach(async () => { + await globalStorageDirectory.cleanup(); + }); + + it("does nothing when no distributions exist", async () => { + await manager.cleanup(); + }); + + it("does nothing when only the current distribution exists", async () => { + await outputFile( + join( + globalStorageDirectory.path, + "distribution768", + "codeql", + "bin", + codeQlLauncherName(), + ), + "launcher!", + ); + + await manager.cleanup(); + + expect( + await pathExists( + join( + globalStorageDirectory.path, + "distribution768", + "codeql", + "bin", + codeQlLauncherName(), + ), + ), + ).toBe(true); + }); + + it("removes old distributions", async () => { + await outputFile( + join( + globalStorageDirectory.path, + "distribution", + "codeql", + "bin", + codeQlLauncherName(), + ), + "launcher!", + ); + await outputFile( + join( + globalStorageDirectory.path, + "distribution12", + "codeql", + "bin", + codeQlLauncherName(), + ), + "launcher!", + ); + await outputFile( + join( + globalStorageDirectory.path, + "distribution244", + "codeql", + "bin", + codeQlLauncherName(), + ), + "launcher!", + ); + await outputFile( + join( + globalStorageDirectory.path, + "distribution637", + "codeql", + "bin", + codeQlLauncherName(), + ), + "launcher!", + ); + await outputFile( + join( + globalStorageDirectory.path, + "distribution768", + "codeql", + "bin", + codeQlLauncherName(), + ), + "launcher!", + ); + await outputFile( + join( + globalStorageDirectory.path, + "distribution890", + "codeql", + "bin", + codeQlLauncherName(), + ), + "launcher!", + ); + + const promise = manager.cleanup(); + + await promise; + + expect( + (await getDirectoryNamesInsidePath(globalStorageDirectory.path)).sort(), + ).toEqual(["distribution768", "distribution890"]); + }); +}); diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/common/vscode/dialog.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/common/vscode/dialog.test.ts index 895928b6368..c843787dda8 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/common/vscode/dialog.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/common/vscode/dialog.test.ts @@ -1,7 +1,6 @@ import { window } from "vscode"; import { showBinaryChoiceDialog, - showBinaryChoiceWithUrlDialog, showInformationMessageWithAction, showNeverAskAgainDialog, } from "../../../../../src/common/vscode/dialog"; @@ -68,57 +67,6 @@ describe("showInformationMessageWithAction", () => { }); }); -describe("showBinaryChoiceWithUrlDialog", () => { - let showInformationMessageSpy: jest.SpiedFunction< - typeof window.showInformationMessage - >; - - beforeEach(() => { - showInformationMessageSpy = jest - .spyOn(window, "showInformationMessage") - .mockResolvedValue(undefined); - }); - - const resolveArg = - (index: number) => - (...args: any[]) => - Promise.resolve(args[index]); - - it("should show a binary choice dialog with a url and return `yes`", async () => { - // pretend user clicks on the url twice and then clicks 'yes' - showInformationMessageSpy - .mockImplementation(resolveArg(2)) - .mockImplementation(resolveArg(2)) - .mockImplementation(resolveArg(3)); - const val = await showBinaryChoiceWithUrlDialog("xxx", "invalid:url"); - expect(val).toBe(true); - }); - - it("should show a binary choice dialog with a url and return `no`", async () => { - // pretend user clicks on the url twice and then clicks 'no' - showInformationMessageSpy - .mockImplementation(resolveArg(2)) - .mockImplementation(resolveArg(2)) - .mockImplementation(resolveArg(4)); - const val = await showBinaryChoiceWithUrlDialog("xxx", "invalid:url"); - expect(val).toBe(false); - }); - - it("should show a binary choice dialog and exit after clcking `more info` 5 times", async () => { - // pretend user clicks on the url twice and then clicks 'no' - showInformationMessageSpy - .mockImplementation(resolveArg(2)) - .mockImplementation(resolveArg(2)) - .mockImplementation(resolveArg(2)) - .mockImplementation(resolveArg(2)) - .mockImplementation(resolveArg(2)); - const val = await showBinaryChoiceWithUrlDialog("xxx", "invalid:url"); - // No choice was made - expect(val).toBeUndefined(); - expect(showInformationMessageSpy).toHaveBeenCalledTimes(5); - }); -}); - describe("showNeverAskAgainDialog", () => { let showInformationMessageSpy: jest.SpiedFunction< typeof window.showInformationMessage diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/common/vscode/progress.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/common/vscode/progress.test.ts index 3dad02cfb4b..c6f49ac144a 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/common/vscode/progress.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/common/vscode/progress.test.ts @@ -3,19 +3,15 @@ import { reportStreamProgress } from "../../../../../src/common/vscode/progress" describe("helpers", () => { it("should report stream progress", () => { const progressSpy = jest.fn(); - const mockReadable = { - on: jest.fn(), - }; const max = 1024 * 1024 * 4; const firstStep = 1024 * 1024 + 1024 * 600; const secondStep = 1024 * 1024 * 2; - (reportStreamProgress as any)(mockReadable, "My prefix", max, progressSpy); + const reportProgress = reportStreamProgress("My prefix", max, progressSpy); // now pretend that we have received some messages - const listener = mockReadable.on.mock.calls[0][1] as (data: any) => void; - listener({ length: firstStep }); - listener({ length: secondStep }); + reportProgress(firstStep); + reportProgress(secondStep); expect(progressSpy).toHaveBeenCalledTimes(3); expect(progressSpy).toHaveBeenCalledWith({ @@ -37,18 +33,14 @@ describe("helpers", () => { it("should report stream progress when total bytes unknown", () => { const progressSpy = jest.fn(); - const mockReadable = { - on: jest.fn(), - }; - (reportStreamProgress as any)( - mockReadable, + const reportProgress = reportStreamProgress( "My prefix", undefined, progressSpy, ); - // There are no listeners registered to this readable - expect(mockReadable.on).not.toHaveBeenCalled(); + // It should not report progress when calling the callback + reportProgress(100); expect(progressSpy).toHaveBeenCalledTimes(1); expect(progressSpy).toHaveBeenCalledWith({ diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/index.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/index.ts index 50f2deeccea..8e0e4764a4a 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/index.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/index.ts @@ -3,15 +3,13 @@ import type { ExtensionContext } from "vscode"; export function createMockExtensionContext(): ExtensionContext { return { globalState: { - _state: { - "telemetry-request-viewed": true, - } as Record, - get(key: string) { - return this._state[key]; + _state: {} as Record, + get(key: string): T | undefined { + return this._state[key] as T | undefined; }, update(key: string, val: any) { this._state[key] = val; }, }, - } as any; + } as unknown as ExtensionContext; } diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/language-support/ast-viewer/ast-builder.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/language-support/ast-viewer/ast-builder.test.ts index fd033de5f06..df108005c21 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/language-support/ast-viewer/ast-builder.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/language-support/ast-viewer/ast-builder.test.ts @@ -2,10 +2,10 @@ import { readFileSync } from "fs-extra"; import type { CodeQLCliServer } from "../../../../../src/codeql-cli/cli"; import { Uri } from "vscode"; -import { QueryOutputDir } from "../../../../../src/local-queries/query-output-dir"; import { mockDatabaseItem, mockedObject } from "../../../utils/mocking.helpers"; import path from "path"; import { AstBuilder } from "../../../../../src/language-support"; +import type { DecodedBqrsChunk } from "../../../../../src/common/bqrs-cli-types"; /** * @@ -30,7 +30,7 @@ int disable_interrupts(void) describe("AstBuilder", () => { let mockCli: CodeQLCliServer; - let overrides: Record | undefined>; + let overrides: Record; beforeEach(() => { mockCli = mockedObject({ @@ -133,6 +133,7 @@ describe("AstBuilder", () => { it("should fail when graphProperties are not correct", async () => { overrides.graphProperties = { tuples: [["semmle.graphKind", "hucairz"]], + columns: [], }; const astBuilder = createAstBuilder(); @@ -141,7 +142,7 @@ describe("AstBuilder", () => { function createAstBuilder() { return new AstBuilder( - new QueryOutputDir("/a/b/c"), + path.normalize("/a/b/c/results.bqrs"), mockCli, mockDatabaseItem({ resolveSourceFile: undefined, @@ -150,7 +151,9 @@ describe("AstBuilder", () => { ); } - function mockDecode(resultSet: "nodes" | "edges" | "graphProperties") { + async function mockDecode( + resultSet: "nodes" | "edges" | "graphProperties", + ): Promise { if (overrides[resultSet]) { return overrides[resultSet]; } @@ -160,14 +163,14 @@ describe("AstBuilder", () => { edges: 1, graphProperties: 2, }; - const index = mapper[resultSet] as number; + const index = mapper[resultSet]; if (index >= 0 && index <= 2) { return JSON.parse( readFileSync( `${__dirname}/../../data/language-support/ast-viewer/ast-builder.json`, "utf8", ), - )[index]; + )[index] as DecodedBqrsChunk; } else { throw new Error(`Invalid resultSet: ${resultSet}`); } diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/auto-model-codeml-queries.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/auto-model-codeml-queries.test.ts deleted file mode 100644 index ed310b15b01..00000000000 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/auto-model-codeml-queries.test.ts +++ /dev/null @@ -1,207 +0,0 @@ -import { createMockLogger } from "../../../__mocks__/loggerMock"; -import type { DatabaseItem } from "../../../../src/databases/local-databases"; -import { DatabaseKind } from "../../../../src/databases/local-databases"; -import { file } from "tmp-promise"; -import { QueryResultType } from "../../../../src/query-server/messages"; -import { - generateCandidateFilterPack, - runAutoModelQueries, -} from "../../../../src/model-editor/auto-model-codeml-queries"; -import { Mode } from "../../../../src/model-editor/shared/mode"; -import { mockedObject, mockedUri } from "../../utils/mocking.helpers"; -import type { CodeQLCliServer } from "../../../../src/codeql-cli/cli"; -import type { QueryRunner } from "../../../../src/query-server"; -import * as queryResolver from "../../../../src/local-queries/query-resolver"; -import type { MethodSignature } from "../../../../src/model-editor/method"; -import { EndpointType } from "../../../../src/model-editor/method"; -import { join } from "path"; -import { pathExists, readFile } from "fs-extra"; -import { load as loadYaml } from "js-yaml"; -import { CancellationTokenSource } from "vscode-jsonrpc"; -import { QueryOutputDir } from "../../../../src/local-queries/query-output-dir"; -import type { ModelExtensionFile } from "../../../../src/model-editor/model-extension-file"; - -describe("runAutoModelQueries", () => { - let resolveQueriesSpy: jest.SpiedFunction< - typeof queryResolver.resolveQueries - >; - beforeEach(() => { - resolveQueriesSpy = jest - .spyOn(queryResolver, "resolveQueries") - .mockImplementation( - async (_cliServer, _packsToSearch, _name, constraints) => { - if (constraints["tags contain all"]?.includes("candidates")) { - return ["/a/b/c/ql/candidates.ql"]; - } - if (constraints["tags contain all"]?.includes("positive")) { - return ["/a/b/c/ql/positive-examples.ql"]; - } - if (constraints["tags contain all"]?.includes("negative")) { - return ["/a/b/c/ql/negative-examples.ql"]; - } - - return []; - }, - ); - }); - - it("should run the query and return the results", async () => { - const queryStorageDir = (await file()).path; - const outputDir = new QueryOutputDir(join(queryStorageDir, "1")); - - const options = { - mode: Mode.Application, - candidateMethods: [], - cliServer: mockedObject({ - resolveQlpacks: jest.fn().mockResolvedValue({ - "/a/b/c/my-extension-pack": {}, - }), - resolveMetadata: jest.fn().mockResolvedValue({ - kind: "problem", - }), - interpretBqrsSarif: jest.fn().mockResolvedValue({ - version: "2.1.0", - $schema: "http://json.schemastore.org/sarif-2.1.0-rtm.4", - runs: [ - { - tool: { - driver: { - name: "CodeQL", - }, - }, - results: [ - { - message: { - text: "msg", - }, - locations: [ - { - physicalLocation: { - contextRegion: { - startLine: 10, - endLine: 12, - snippet: { - text: "Foo", - }, - }, - region: { - startLine: 10, - startColumn: 1, - endColumn: 3, - }, - artifactLocation: { - uri: "foo.js", - }, - }, - }, - ], - }, - ], - }, - ], - }), - }), - queryRunner: mockedObject({ - createQueryRun: jest.fn().mockReturnValue({ - evaluate: jest.fn().mockResolvedValue({ - resultType: QueryResultType.SUCCESS, - outputDir, - }), - outputDir, - }), - logger: createMockLogger(), - }), - databaseItem: mockedObject({ - databaseUri: mockedUri("/a/b/c/src.zip"), - contents: { - kind: DatabaseKind.Database, - name: "foo", - datasetUri: mockedUri(), - }, - language: "java", - getSourceLocationPrefix: jest - .fn() - .mockResolvedValue("/home/runner/work/my-repo/my-repo"), - sourceArchive: mockedUri("/a/b/c/src.zip"), - }), - queryStorageDir: "/tmp/queries", - progress: jest.fn(), - cancellationTokenSource: new CancellationTokenSource(), - }; - - const result = await runAutoModelQueries(options); - expect(result).not.toBeUndefined(); - - expect(options.cliServer.resolveQlpacks).toHaveBeenCalledTimes(1); - expect(options.cliServer.resolveQlpacks).toHaveBeenCalledWith( - expect.arrayContaining([expect.stringContaining("tmp")]), - true, - ); - expect(resolveQueriesSpy).toHaveBeenCalledTimes(1); - expect(resolveQueriesSpy).toHaveBeenCalledWith( - options.cliServer, - ["codeql/java-automodel-queries"], - "Extract automodel candidates", - { - kind: "problem", - "tags contain all": ["automodel", "application-mode", "candidates"], - }, - ); - expect(options.queryRunner.createQueryRun).toHaveBeenCalledTimes(1); - expect(options.queryRunner.createQueryRun).toHaveBeenCalledWith( - "/a/b/c/src.zip", - { - queryPath: "/a/b/c/ql/candidates.ql", - quickEvalPosition: undefined, - quickEvalCountOnly: false, - }, - false, - expect.arrayContaining([expect.stringContaining("tmp")]), - ["/a/b/c/my-extension-pack"], - {}, - "/tmp/queries", - undefined, - undefined, - ); - }); -}); - -describe("generateCandidateFilterPack", () => { - it("should create a temp pack containing the candidate filters", async () => { - const candidateMethods: MethodSignature[] = [ - { - signature: "org.my.A#x()", - endpointType: EndpointType.Method, - packageName: "org.my", - typeName: "A", - methodName: "x", - methodParameters: "()", - }, - ]; - const { packDir, cleanup } = await generateCandidateFilterPack( - "java", - candidateMethods, - ); - expect(packDir).not.toBeUndefined(); - const qlpackFile = join(packDir, "codeql-pack.yml"); - expect(await pathExists(qlpackFile)).toBe(true); - const filterFile = join(packDir, "filter.yml"); - expect(await pathExists(filterFile)).toBe(true); - // Read the contents of filterFile and parse as yaml - const yaml = (await loadYaml( - await readFile(filterFile, "utf8"), - )) as ModelExtensionFile; - const extensions = yaml.extensions; - expect(extensions).toBeInstanceOf(Array); - expect(extensions).toHaveLength(1); - const extension = extensions[0]; - expect(extension.addsTo.pack).toEqual("codeql/java-automodel-queries"); - expect(extension.addsTo.extensible).toEqual("automodelCandidateFilter"); - expect(extension.data).toBeInstanceOf(Array); - expect(extension.data).toHaveLength(1); - expect(extension.data[0]).toEqual(["org.my", "A", "x", "()"]); - - await cleanup(); - expect(await pathExists(packDir)).toBe(false); - }); -}); diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/external-api-usage-query.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/external-api-usage-query.test.ts index 8bbda315a42..bdc407502cb 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/external-api-usage-query.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/external-api-usage-query.test.ts @@ -30,15 +30,13 @@ describe("runModelEditorQueries", () => { > = jest.spyOn(log, "showAndLogExceptionWithTelemetry"); const outputDir = new QueryOutputDir(join((await file()).path, "1")); - + const queryPath = "/a/b/c/ApplicationModeEndpoints.ql"; const options = { cliServer: mockedObject({ resolveQlpacks: jest.fn().mockResolvedValue({ "my/extensions": "/a/b/c/", }), - resolveQueriesInSuite: jest - .fn() - .mockResolvedValue(["/a/b/c/ApplicationModeEndpoints.ql"]), + resolveQueriesInSuite: jest.fn().mockResolvedValue([queryPath]), packPacklist: jest .fn() .mockResolvedValue([ @@ -50,7 +48,9 @@ describe("runModelEditorQueries", () => { queryRunner: mockedObject({ createQueryRun: jest.fn().mockReturnValue({ evaluate: jest.fn().mockResolvedValue({ - resultType: QueryResultType.CANCELLATION, + results: new Map([ + [queryPath, { resultType: QueryResultType.CANCELLATION }], + ]), }), outputDir, }), @@ -88,15 +88,13 @@ describe("runModelEditorQueries", () => { it("should run query for random language", async () => { const outputDir = new QueryOutputDir(join((await file()).path, "1")); - + const queryPath = "/a/b/c/ApplicationModeEndpoints.ql"; const options = { cliServer: mockedObject({ resolveQlpacks: jest.fn().mockResolvedValue({ "my/extensions": "/a/b/c/", }), - resolveQueriesInSuite: jest - .fn() - .mockResolvedValue(["/a/b/c/ApplicationModeEndpoints.ql"]), + resolveQueriesInSuite: jest.fn().mockResolvedValue([queryPath]), packPacklist: jest .fn() .mockResolvedValue([ @@ -105,13 +103,26 @@ describe("runModelEditorQueries", () => { "/a/b/c/qlpack2.yml", ]), bqrsInfo: jest.fn().mockResolvedValue({ - "result-sets": [], + "result-sets": [ + { + name: "results", + rows: 45, + columns: [], + }, + ], + }), + bqrsDecode: jest.fn().mockResolvedValue({ + tuples: [], + columns: [], }), }), queryRunner: mockedObject({ createQueryRun: jest.fn().mockReturnValue({ evaluate: jest.fn().mockResolvedValue({ resultType: QueryResultType.SUCCESS, + results: new Map([ + [queryPath, { resultType: QueryResultType.SUCCESS }], + ]), outputDir, }), outputDir, @@ -140,23 +151,26 @@ describe("runModelEditorQueries", () => { const result = await runModelEditorQueries(Mode.Framework, options); - expect(result).not.toBeUndefined; + expect(result).not.toBeUndefined(); expect(options.cliServer.resolveQlpacks).toHaveBeenCalledTimes(1); expect(options.cliServer.resolveQlpacks).toHaveBeenCalledWith([], true); expect(options.queryRunner.createQueryRun).toHaveBeenCalledWith( "/a/b/c/src.zip", - { - queryPath: expect.stringMatching(/\S*ModeEndpoints\.ql/), - quickEvalPosition: undefined, - quickEvalCountOnly: false, - }, + [ + { + outputBaseName: "results", + queryPath: expect.stringMatching(/\S*ModeEndpoints\.ql/), + quickEvalPosition: undefined, + quickEvalCountOnly: false, + }, + ], false, [], ["my/extensions"], {}, "/tmp/queries", - undefined, + "ApplicationModeEndpoints.ql", undefined, ); }); diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/generate.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/generate.test.ts index 173f901a7ee..7686e66d912 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/generate.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/generate.test.ts @@ -28,12 +28,10 @@ describe("runGenerateQueries", () => { const outputDir = new QueryOutputDir(join(queryStorageDir, "1")); const onResults = jest.fn(); - + const queryPath = "/a/b/c/GenerateModel.ql"; const options = { cliServer: mockedObject({ - resolveQueriesInSuite: jest - .fn() - .mockResolvedValue(["/a/b/c/GenerateModel.ql"]), + resolveQueriesInSuite: jest.fn().mockResolvedValue([queryPath]), bqrsDecodeAll: jest.fn().mockResolvedValue({ sourceModel: { columns: [ @@ -101,7 +99,9 @@ describe("runGenerateQueries", () => { queryRunner: mockedObject({ createQueryRun: jest.fn().mockReturnValue({ evaluate: jest.fn().mockResolvedValue({ - resultType: QueryResultType.SUCCESS, + results: new Map([ + [queryPath, { resultType: QueryResultType.SUCCESS }], + ]), outputDir, }), outputDir, @@ -221,17 +221,20 @@ describe("runGenerateQueries", () => { expect(options.queryRunner.createQueryRun).toHaveBeenCalledTimes(1); expect(options.queryRunner.createQueryRun).toHaveBeenCalledWith( "/a/b/c/src.zip", - { - queryPath: "/a/b/c/GenerateModel.ql", - quickEvalPosition: undefined, - quickEvalCountOnly: false, - }, + [ + { + outputBaseName: "results", + queryPath: "/a/b/c/GenerateModel.ql", + quickEvalPosition: undefined, + quickEvalCountOnly: false, + }, + ], false, [], undefined, {}, "/tmp/queries", - undefined, + "GenerateModel.ql", undefined, ); }); diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/method-modeling/method-modeling-view-provider.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/method-modeling/method-modeling-view-provider.test.ts index e1113911727..1604b992b7e 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/method-modeling/method-modeling-view-provider.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/method-modeling/method-modeling-view-provider.test.ts @@ -153,8 +153,6 @@ describe("method modeling view provider", () => { usage: createUsage(), modeledMethods: [], isModified: false, - isInProgress: false, - processedByAutoModel: false, }; getSelectedMethodDetails.mockReturnValue(selectedMethodDetails); @@ -191,8 +189,6 @@ describe("method modeling view provider", () => { method: selectedMethodDetails.method, modeledMethods: selectedMethodDetails.modeledMethods, isModified: selectedMethodDetails.isModified, - isInProgress: selectedMethodDetails.isInProgress, - processedByAutoModel: selectedMethodDetails.processedByAutoModel, }); }); }); diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/methods-usage/methods-usage-data-provider.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/methods-usage/methods-usage-data-provider.test.ts index b049aa672fa..c5936e3ec1c 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/methods-usage/methods-usage-data-provider.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/methods-usage/methods-usage-data-provider.test.ts @@ -402,11 +402,7 @@ describe("MethodsUsageDataProvider", () => { modifiedMethodSignatures, ); expect( - dataProvider - .getChildren() - .map( - (item) => (item as MethodsUsageTreeViewItem).method.signature, - ), + dataProvider.getChildren().map((item) => item.method.signature), ).toEqual(["b.a.C.a()", "b.a.C.b()", "b.a.C.d()", "a.b.C.d()"]); }); }); diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/methods-usage/methods-usage-panel.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/methods-usage/methods-usage-panel.test.ts index a09600e0432..3dbb8ca4a7d 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/methods-usage/methods-usage-panel.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/methods-usage/methods-usage-panel.test.ts @@ -104,8 +104,6 @@ describe("MethodsUsagePanel", () => { usage, modeledMethods[method.signature], modifiedMethodSignatures.has(method.signature), - false, - false, ); expect(mockTreeView.reveal).toHaveBeenCalledWith( @@ -139,8 +137,6 @@ describe("MethodsUsagePanel", () => { usage, modeledMethods[method.signature], modifiedMethodSignatures.has(method.signature), - false, - false, ); expect(mockTreeView.reveal).not.toHaveBeenCalled(); diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/model-editor-queries.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/model-editor-queries.test.ts index 733d6e61c8b..a66d49899f0 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/model-editor-queries.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/model-editor-queries.test.ts @@ -8,7 +8,6 @@ import type { QueryLanguage } from "../../../../src/common/query-language"; import { Mode } from "../../../../src/model-editor/shared/mode"; import { mockedObject } from "../../utils/mocking.helpers"; import type { CodeQLCliServer } from "../../../../src/codeql-cli/cli"; -import type { ModelConfig } from "../../../../src/config"; import { createMockLogger } from "../../../__mocks__/loggerMock"; describe("setUpPack", () => { @@ -44,18 +43,8 @@ describe("setUpPack", () => { resolveQueriesInSuite: jest.fn().mockResolvedValue([]), }); const logger = createMockLogger(); - const modelConfig = mockedObject({ - llmGeneration: false, - }); - await setUpPack( - cliServer, - logger, - queryDir, - language, - modelConfig, - Mode.Application, - ); + await setUpPack(cliServer, logger, queryDir, language, Mode.Application); const queryFiles = await readdir(queryDir); expect(queryFiles).toEqual( @@ -109,18 +98,8 @@ describe("setUpPack", () => { .mockResolvedValue(["/a/b/c/ApplicationModeEndpoints.ql"]), }); const logger = createMockLogger(); - const modelConfig = mockedObject({ - llmGeneration: false, - }); - await setUpPack( - cliServer, - logger, - queryDir, - language, - modelConfig, - Mode.Application, - ); + await setUpPack(cliServer, logger, queryDir, language, Mode.Application); const queryFiles = await readdir(queryDir); expect(queryFiles.sort()).toEqual(["codeql-pack.yml"].sort()); diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/suggestion-queries.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/suggestion-queries.test.ts index f3ebc013b1f..eeb41f869e1 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/suggestion-queries.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/model-editor/suggestion-queries.test.ts @@ -146,9 +146,8 @@ describe("runSuggestionsQuery", () => { .mockResolvedValueOnce(mockInputSuggestions) .mockResolvedValueOnce(mockOutputSuggestions); - const resolveQueriesInSuite = jest - .fn() - .mockResolvedValue(["/a/b/c/FrameworkModeAccessPathSuggestions.ql"]); + const queryPath = "/a/b/c/FrameworkModeAccessPathSuggestions.ql"; + const resolveQueriesInSuite = jest.fn().mockResolvedValue([queryPath]); const options = { parseResults, @@ -173,7 +172,9 @@ describe("runSuggestionsQuery", () => { queryRunner: mockedObject({ createQueryRun: jest.fn().mockReturnValue({ evaluate: jest.fn().mockResolvedValue({ - resultType: QueryResultType.SUCCESS, + results: new Map([ + [queryPath, { resultType: QueryResultType.SUCCESS }], + ]), outputDir, }), outputDir, @@ -200,23 +201,26 @@ describe("runSuggestionsQuery", () => { const result = await runSuggestionsQuery(Mode.Framework, options); - expect(result).not.toBeUndefined; + expect(result).not.toBeUndefined(); expect(options.cliServer.resolveQlpacks).toHaveBeenCalledTimes(1); expect(options.cliServer.resolveQlpacks).toHaveBeenCalledWith([], true); expect(options.queryRunner.createQueryRun).toHaveBeenCalledWith( "/a/b/c/src.zip", - { - queryPath: expect.stringMatching(/\S*AccessPathSuggestions\.ql/), - quickEvalPosition: undefined, - quickEvalCountOnly: false, - }, + [ + { + queryPath: expect.stringMatching(/\S*AccessPathSuggestions\.ql/), + outputBaseName: "results", + quickEvalPosition: undefined, + quickEvalCountOnly: false, + }, + ], false, [], ["my/extensions"], {}, "/tmp/queries", - undefined, + "FrameworkModeAccessPathSuggestions.ql", undefined, ); expect(options.cliServer.resolveQueriesInSuite).toHaveBeenCalledTimes(1); diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/history-item-label-provider.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/history-item-label-provider.test.ts index 0cd2b346313..3ed0a7ee621 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/history-item-label-provider.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/history-item-label-provider.test.ts @@ -21,241 +21,489 @@ describe("HistoryItemLabelProvider", () => { beforeEach(() => { config = { - format: "xxx %q xxx", + format: "xxx ${queryName} xxx", ttlInMillis: 0, onDidChangeConfiguration: jest.fn(), }; labelProvider = new HistoryItemLabelProvider(config); }); - describe("local queries", () => { - it("should interpolate query when user specified", () => { - const fqi = createMockLocalQueryInfo({ - startTime: date, - userSpecifiedLabel, - resultCount: 456, - hasMetadata: true, - }); - - expect(labelProvider.getLabel(fqi)).toBe("user-specified-name"); + describe("modern format", () => { + describe("local queries", () => { + it("should interpolate query when user specified", () => { + const fqi = createMockLocalQueryInfo({ + startTime: date, + userSpecifiedLabel, + resultCount: 456, + hasMetadata: true, + }); - fqi.userSpecifiedLabel = "%t %q %d %s %f %r %%"; - expect(labelProvider.getLabel(fqi)).toBe( - `${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %`, - ); + expect(labelProvider.getLabel(fqi)).toBe("user-specified-name"); - fqi.userSpecifiedLabel = "%t %q %d %s %f %r %%::%t %q %d %s %f %r %%"; - expect(labelProvider.getLabel(fqi)).toBe( - `${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %::${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %`, - ); - }); + fqi.userSpecifiedLabel = + "${startTime} ${queryName} ${databaseName} ${status} ${queryFileBasename} ${resultCount} %"; + expect(labelProvider.getLabel(fqi)).toBe( + `${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %`, + ); - it("should interpolate query when not user specified", () => { - const fqi = createMockLocalQueryInfo({ - startTime: date, - resultCount: 456, - hasMetadata: true, + fqi.userSpecifiedLabel = "%t %q %d %s %f %r %%::%t %q %d %s %f %r %%"; + expect(labelProvider.getLabel(fqi)).toBe( + `${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %::${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %`, + ); }); - expect(labelProvider.getLabel(fqi)).toBe("xxx query-name xxx"); + it("should interpolate query when not user specified", () => { + const fqi = createMockLocalQueryInfo({ + startTime: date, + resultCount: 456, + hasMetadata: true, + }); - config.format = "%t %q %d %s %f %r %%"; - expect(labelProvider.getLabel(fqi)).toBe( - `${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %`, - ); + expect(labelProvider.getLabel(fqi)).toBe("xxx query-name xxx"); - config.format = "%t %q %d %s %f %r %%::%t %q %d %s %f %r %%"; - expect(labelProvider.getLabel(fqi)).toBe( - `${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %::${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %`, - ); - }); + config.format = + "${startTime} ${queryName} ${databaseName} ${status} ${queryFileBasename} ${resultCount} %"; + expect(labelProvider.getLabel(fqi)).toBe( + `${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %`, + ); - it("should get query short label", () => { - const fqi = createMockLocalQueryInfo({ - startTime: date, - userSpecifiedLabel, - hasMetadata: true, - resultCount: 456, + config.format = + "${startTime} ${queryName} ${databaseName} ${status} ${queryFileBasename} ${resultCount} %::${startTime} ${queryName} ${databaseName} ${status} ${queryFileBasename} ${resultCount} %"; + expect(labelProvider.getLabel(fqi)).toBe( + `${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %::${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %`, + ); }); - // fall back on user specified if one exists. - expect(labelProvider.getShortLabel(fqi)).toBe("user-specified-name"); + it("should get query short label", () => { + const fqi = createMockLocalQueryInfo({ + startTime: date, + userSpecifiedLabel, + hasMetadata: true, + resultCount: 456, + }); - // use query name if no user-specified label exists - fqi.userSpecifiedLabel = undefined; - expect(labelProvider.getShortLabel(fqi)).toBe("query-name"); + // fall back on user specified if one exists. + expect(labelProvider.getShortLabel(fqi)).toBe("user-specified-name"); - // use file name if no user-specified label exists and the query is not yet completed (meaning it has no results) - const fqi2 = createMockLocalQueryInfo({ - startTime: date, - hasMetadata: true, + // use query name if no user-specified label exists + fqi.userSpecifiedLabel = undefined; + expect(labelProvider.getShortLabel(fqi)).toBe("query-name"); + + // use file name if no user-specified label exists and the query is not yet completed (meaning it has no results) + const fqi2 = createMockLocalQueryInfo({ + startTime: date, + hasMetadata: true, + }); + expect(labelProvider.getShortLabel(fqi2)).toBe("query-file.ql"); }); - expect(labelProvider.getShortLabel(fqi2)).toBe("query-file.ql"); }); - }); - describe("variant analyses", () => { - it("should interpolate query when user specified", () => { - const fqi = createMockVariantAnalysisHistoryItem({ - userSpecifiedLabel, - executionStartTime, + describe("variant analyses", () => { + it("should interpolate query when user specified", () => { + const fqi = createMockVariantAnalysisHistoryItem({ + userSpecifiedLabel, + executionStartTime, + }); + + expect(labelProvider.getLabel(fqi)).toBe(userSpecifiedLabel); + + fqi.userSpecifiedLabel = + "${startTime} ${queryName} ${databaseName} ${status} %"; + expect(labelProvider.getLabel(fqi)).toBe( + `${dateStr} a-query-name (javascript) 1/3 repositories in progress %`, + ); + + fqi.userSpecifiedLabel = + "${startTime} ${queryName} ${databaseName} ${status} %::${startTime} ${queryName} ${databaseName} ${status} %"; + expect(labelProvider.getLabel(fqi)).toBe( + `${dateStr} a-query-name (javascript) 1/3 repositories in progress %::${dateStr} a-query-name (javascript) 1/3 repositories in progress %`, + ); }); - expect(labelProvider.getLabel(fqi)).toBe(userSpecifiedLabel); + it("should interpolate query when not user-specified", () => { + const fqi = createMockVariantAnalysisHistoryItem({ + historyItemStatus: QueryStatus.Completed, + variantAnalysisStatus: VariantAnalysisStatus.Succeeded, + executionStartTime, + resultCount: 16, + }); - fqi.userSpecifiedLabel = "%t %q %d %s %%"; - expect(labelProvider.getLabel(fqi)).toBe( - `${dateStr} a-query-name (javascript) 1/3 repositories in progress %`, - ); + expect(labelProvider.getLabel(fqi)).toBe( + "xxx a-query-name (javascript) xxx", + ); - fqi.userSpecifiedLabel = "%t %q %d %s %%::%t %q %d %s %%"; - expect(labelProvider.getLabel(fqi)).toBe( - `${dateStr} a-query-name (javascript) 1/3 repositories in progress %::${dateStr} a-query-name (javascript) 1/3 repositories in progress %`, - ); - }); + config.format = + "${startTime} ${queryName} ${databaseName} ${status} ${queryFileBasename} ${resultCount} %"; + expect(labelProvider.getLabel(fqi)).toBe( + `${dateStr} a-query-name (javascript) 1/3 repositories completed a-query-file-path (16 results) %`, + ); - it("should interpolate query when not user-specified", () => { - const fqi = createMockVariantAnalysisHistoryItem({ - historyItemStatus: QueryStatus.Completed, - variantAnalysisStatus: VariantAnalysisStatus.Succeeded, - executionStartTime, - resultCount: 16, + config.format = + "${startTime} ${queryName} ${databaseName} ${status} ${queryFileBasename} ${resultCount} %::${startTime} ${queryName} ${databaseName} ${status} ${queryFileBasename} ${resultCount} %"; + expect(labelProvider.getLabel(fqi)).toBe( + `${dateStr} a-query-name (javascript) 1/3 repositories completed a-query-file-path (16 results) %::${dateStr} a-query-name (javascript) 1/3 repositories completed a-query-file-path (16 results) %`, + ); }); - expect(labelProvider.getLabel(fqi)).toBe( - "xxx a-query-name (javascript) xxx", - ); + it("should get query short label", () => { + const fqi = createMockVariantAnalysisHistoryItem({ + historyItemStatus: QueryStatus.Completed, + variantAnalysisStatus: VariantAnalysisStatus.Succeeded, + executionStartTime, + userSpecifiedLabel, + }); - config.format = "%t %q %d %s %f %r %%"; - expect(labelProvider.getLabel(fqi)).toBe( - `${dateStr} a-query-name (javascript) 1/3 repositories completed a-query-file-path (16 results) %`, - ); + // fall back on user specified if one exists. + expect(labelProvider.getShortLabel(fqi)).toBe("user-specified-name"); - config.format = "%t %q %d %s %f %r %%::%t %q %d %s %f %r %%"; - expect(labelProvider.getLabel(fqi)).toBe( - `${dateStr} a-query-name (javascript) 1/3 repositories completed a-query-file-path (16 results) %::${dateStr} a-query-name (javascript) 1/3 repositories completed a-query-file-path (16 results) %`, - ); - }); + // use query name if no user-specified label exists + const fqi2 = createMockVariantAnalysisHistoryItem({}); - it("should get query short label", () => { - const fqi = createMockVariantAnalysisHistoryItem({ - historyItemStatus: QueryStatus.Completed, - variantAnalysisStatus: VariantAnalysisStatus.Succeeded, - executionStartTime, - userSpecifiedLabel, + expect(labelProvider.getShortLabel(fqi2)).toBe("a-query-name"); }); - // fall back on user specified if one exists. - expect(labelProvider.getShortLabel(fqi)).toBe("user-specified-name"); + describe("when results are present", () => { + it("should display results if there are any", () => { + const fqi = createMockVariantAnalysisHistoryItem({ + historyItemStatus: QueryStatus.Completed, + resultCount: 16, + variantAnalysis: createMockVariantAnalysis({ + status: VariantAnalysisStatus.Succeeded, + executionStartTime, + scannedRepos: createMockScannedRepos([ + VariantAnalysisRepoStatus.Succeeded, + VariantAnalysisRepoStatus.Succeeded, + ]), + }), + }); + config.format = + "${startTime} ${queryName} ${databaseName} ${status} ${queryFileBasename} ${resultCount} %"; + expect(labelProvider.getLabel(fqi)).toBe( + `${dateStr} a-query-name (javascript) 2/2 repositories completed a-query-file-path (16 results) %`, + ); + }); + }); - // use query name if no user-specified label exists - const fqi2 = createMockVariantAnalysisHistoryItem({}); + describe("when results are not present", () => { + it("should skip displaying them", () => { + const fqi = createMockVariantAnalysisHistoryItem({ + historyItemStatus: QueryStatus.Completed, + resultCount: 0, + variantAnalysis: createMockVariantAnalysis({ + status: VariantAnalysisStatus.Succeeded, + executionStartTime, + scannedRepos: createMockScannedRepos([ + VariantAnalysisRepoStatus.Succeeded, + VariantAnalysisRepoStatus.Succeeded, + ]), + }), + }); + config.format = + "${startTime} ${queryName} ${databaseName} ${status} ${queryFileBasename} ${resultCount} %"; + expect(labelProvider.getLabel(fqi)).toBe( + `${dateStr} a-query-name (javascript) 2/2 repositories completed a-query-file-path %`, + ); + }); + }); + + describe("when extra whitespace is present in the middle of the label", () => { + it("should squash it down to a single whitespace", () => { + const fqi = createMockVariantAnalysisHistoryItem({ + historyItemStatus: QueryStatus.Completed, + resultCount: 0, + variantAnalysis: createMockVariantAnalysis({ + status: VariantAnalysisStatus.Succeeded, + executionStartTime, + scannedRepos: createMockScannedRepos([ + VariantAnalysisRepoStatus.Succeeded, + VariantAnalysisRepoStatus.Succeeded, + ]), + }), + }); + config.format = + "${startTime} ${queryName} ${databaseName} ${status} ${queryFileBasename} ${resultCount} %"; + expect(labelProvider.getLabel(fqi)).toBe( + `${dateStr} a-query-name (javascript) 2/2 repositories completed a-query-file-path %`, + ); + }); + }); + + describe("when extra whitespace is present at the start of the label", () => { + it("should squash it down to a single whitespace", () => { + const fqi = createMockVariantAnalysisHistoryItem({ + historyItemStatus: QueryStatus.Completed, + resultCount: 0, + variantAnalysis: createMockVariantAnalysis({ + status: VariantAnalysisStatus.Succeeded, + executionStartTime, + scannedRepos: createMockScannedRepos([ + VariantAnalysisRepoStatus.Succeeded, + VariantAnalysisRepoStatus.Succeeded, + ]), + }), + }); + config.format = + " ${startTime} ${queryName} ${databaseName} ${status} ${queryFileBasename} ${resultCount} %"; + expect(labelProvider.getLabel(fqi)).toBe( + ` ${dateStr} a-query-name (javascript) 2/2 repositories completed a-query-file-path %`, + ); + }); + }); - expect(labelProvider.getShortLabel(fqi2)).toBe("a-query-name"); + describe("when extra whitespace is present at the end of the label", () => { + it("should squash it down to a single whitespace", () => { + const fqi = createMockVariantAnalysisHistoryItem({ + historyItemStatus: QueryStatus.Completed, + resultCount: 0, + variantAnalysis: createMockVariantAnalysis({ + status: VariantAnalysisStatus.Succeeded, + executionStartTime, + scannedRepos: createMockScannedRepos([ + VariantAnalysisRepoStatus.Succeeded, + VariantAnalysisRepoStatus.Succeeded, + ]), + }), + }); + config.format = + "${startTime} ${queryName} ${databaseName} ${status} ${queryFileBasename} ${resultCount} % "; + expect(labelProvider.getLabel(fqi)).toBe( + `${dateStr} a-query-name (javascript) 2/2 repositories completed a-query-file-path % `, + ); + }); + }); }); + }); - describe("when results are present", () => { - it("should display results if there are any", () => { - const fqi = createMockVariantAnalysisHistoryItem({ - historyItemStatus: QueryStatus.Completed, - resultCount: 16, - variantAnalysis: createMockVariantAnalysis({ - status: VariantAnalysisStatus.Succeeded, - executionStartTime, - scannedRepos: createMockScannedRepos([ - VariantAnalysisRepoStatus.Succeeded, - VariantAnalysisRepoStatus.Succeeded, - ]), - }), + describe("legacy format", () => { + describe("local queries", () => { + it("should interpolate query when user specified", () => { + const fqi = createMockLocalQueryInfo({ + startTime: date, + userSpecifiedLabel, + resultCount: 456, + hasMetadata: true, }); - config.format = "%t %q %d %s %f %r %%"; + + expect(labelProvider.getLabel(fqi)).toBe("user-specified-name"); + + fqi.userSpecifiedLabel = "%t %q %d %s %f %r %%"; + expect(labelProvider.getLabel(fqi)).toBe( + `${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %`, + ); + + fqi.userSpecifiedLabel = "%t %q %d %s %f %r %%::%t %q %d %s %f %r %%"; expect(labelProvider.getLabel(fqi)).toBe( - `${dateStr} a-query-name (javascript) 2/2 repositories completed a-query-file-path (16 results) %`, + `${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %::${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %`, ); }); - }); - describe("when results are not present", () => { - it("should skip displaying them", () => { - const fqi = createMockVariantAnalysisHistoryItem({ - historyItemStatus: QueryStatus.Completed, - resultCount: 0, - variantAnalysis: createMockVariantAnalysis({ - status: VariantAnalysisStatus.Succeeded, - executionStartTime, - scannedRepos: createMockScannedRepos([ - VariantAnalysisRepoStatus.Succeeded, - VariantAnalysisRepoStatus.Succeeded, - ]), - }), + it("should interpolate query when not user specified", () => { + const fqi = createMockLocalQueryInfo({ + startTime: date, + resultCount: 456, + hasMetadata: true, }); + + expect(labelProvider.getLabel(fqi)).toBe("xxx query-name xxx"); + config.format = "%t %q %d %s %f %r %%"; expect(labelProvider.getLabel(fqi)).toBe( - `${dateStr} a-query-name (javascript) 2/2 repositories completed a-query-file-path %`, + `${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %`, + ); + + config.format = "%t %q %d %s %f %r %%::%t %q %d %s %f %r %%"; + expect(labelProvider.getLabel(fqi)).toBe( + `${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %::${dateStr} query-name db-name finished in 0 seconds query-file.ql (456 results) %`, ); }); + + it("should get query short label", () => { + const fqi = createMockLocalQueryInfo({ + startTime: date, + userSpecifiedLabel, + hasMetadata: true, + resultCount: 456, + }); + + // fall back on user specified if one exists. + expect(labelProvider.getShortLabel(fqi)).toBe("user-specified-name"); + + // use query name if no user-specified label exists + fqi.userSpecifiedLabel = undefined; + expect(labelProvider.getShortLabel(fqi)).toBe("query-name"); + + // use file name if no user-specified label exists and the query is not yet completed (meaning it has no results) + const fqi2 = createMockLocalQueryInfo({ + startTime: date, + hasMetadata: true, + }); + expect(labelProvider.getShortLabel(fqi2)).toBe("query-file.ql"); + }); }); - describe("when extra whitespace is present in the middle of the label", () => { - it("should squash it down to a single whitespace", () => { + describe("variant analyses", () => { + it("should interpolate query when user specified", () => { const fqi = createMockVariantAnalysisHistoryItem({ - historyItemStatus: QueryStatus.Completed, - resultCount: 0, - variantAnalysis: createMockVariantAnalysis({ - status: VariantAnalysisStatus.Succeeded, - executionStartTime, - scannedRepos: createMockScannedRepos([ - VariantAnalysisRepoStatus.Succeeded, - VariantAnalysisRepoStatus.Succeeded, - ]), - }), + userSpecifiedLabel, + executionStartTime, }); - config.format = "%t %q %d %s %f %r %%"; + + expect(labelProvider.getLabel(fqi)).toBe(userSpecifiedLabel); + + fqi.userSpecifiedLabel = "%t %q %d %s %%"; expect(labelProvider.getLabel(fqi)).toBe( - `${dateStr} a-query-name (javascript) 2/2 repositories completed a-query-file-path %`, + `${dateStr} a-query-name (javascript) 1/3 repositories in progress %`, + ); + + fqi.userSpecifiedLabel = "%t %q %d %s %%::%t %q %d %s %%"; + expect(labelProvider.getLabel(fqi)).toBe( + `${dateStr} a-query-name (javascript) 1/3 repositories in progress %::${dateStr} a-query-name (javascript) 1/3 repositories in progress %`, ); }); - }); - describe("when extra whitespace is present at the start of the label", () => { - it("should squash it down to a single whitespace", () => { + it("should interpolate query when not user-specified", () => { const fqi = createMockVariantAnalysisHistoryItem({ historyItemStatus: QueryStatus.Completed, - resultCount: 0, - variantAnalysis: createMockVariantAnalysis({ - status: VariantAnalysisStatus.Succeeded, - executionStartTime, - scannedRepos: createMockScannedRepos([ - VariantAnalysisRepoStatus.Succeeded, - VariantAnalysisRepoStatus.Succeeded, - ]), - }), + variantAnalysisStatus: VariantAnalysisStatus.Succeeded, + executionStartTime, + resultCount: 16, }); - config.format = " %t %q %d %s %f %r %%"; + + expect(labelProvider.getLabel(fqi)).toBe( + "xxx a-query-name (javascript) xxx", + ); + + config.format = "%t %q %d %s %f %r %%"; + expect(labelProvider.getLabel(fqi)).toBe( + `${dateStr} a-query-name (javascript) 1/3 repositories completed a-query-file-path (16 results) %`, + ); + + config.format = "%t %q %d %s %f %r %%::%t %q %d %s %f %r %%"; expect(labelProvider.getLabel(fqi)).toBe( - ` ${dateStr} a-query-name (javascript) 2/2 repositories completed a-query-file-path %`, + `${dateStr} a-query-name (javascript) 1/3 repositories completed a-query-file-path (16 results) %::${dateStr} a-query-name (javascript) 1/3 repositories completed a-query-file-path (16 results) %`, ); }); - }); - describe("when extra whitespace is present at the end of the label", () => { - it("should squash it down to a single whitespace", () => { + it("should get query short label", () => { const fqi = createMockVariantAnalysisHistoryItem({ historyItemStatus: QueryStatus.Completed, - resultCount: 0, - variantAnalysis: createMockVariantAnalysis({ - status: VariantAnalysisStatus.Succeeded, - executionStartTime, - scannedRepos: createMockScannedRepos([ - VariantAnalysisRepoStatus.Succeeded, - VariantAnalysisRepoStatus.Succeeded, - ]), - }), + variantAnalysisStatus: VariantAnalysisStatus.Succeeded, + executionStartTime, + userSpecifiedLabel, + }); + + // fall back on user specified if one exists. + expect(labelProvider.getShortLabel(fqi)).toBe("user-specified-name"); + + // use query name if no user-specified label exists + const fqi2 = createMockVariantAnalysisHistoryItem({}); + + expect(labelProvider.getShortLabel(fqi2)).toBe("a-query-name"); + }); + + describe("when results are present", () => { + it("should display results if there are any", () => { + const fqi = createMockVariantAnalysisHistoryItem({ + historyItemStatus: QueryStatus.Completed, + resultCount: 16, + variantAnalysis: createMockVariantAnalysis({ + status: VariantAnalysisStatus.Succeeded, + executionStartTime, + scannedRepos: createMockScannedRepos([ + VariantAnalysisRepoStatus.Succeeded, + VariantAnalysisRepoStatus.Succeeded, + ]), + }), + }); + config.format = "%t %q %d %s %f %r %%"; + expect(labelProvider.getLabel(fqi)).toBe( + `${dateStr} a-query-name (javascript) 2/2 repositories completed a-query-file-path (16 results) %`, + ); + }); + }); + + describe("when results are not present", () => { + it("should skip displaying them", () => { + const fqi = createMockVariantAnalysisHistoryItem({ + historyItemStatus: QueryStatus.Completed, + resultCount: 0, + variantAnalysis: createMockVariantAnalysis({ + status: VariantAnalysisStatus.Succeeded, + executionStartTime, + scannedRepos: createMockScannedRepos([ + VariantAnalysisRepoStatus.Succeeded, + VariantAnalysisRepoStatus.Succeeded, + ]), + }), + }); + config.format = "%t %q %d %s %f %r %%"; + expect(labelProvider.getLabel(fqi)).toBe( + `${dateStr} a-query-name (javascript) 2/2 repositories completed a-query-file-path %`, + ); + }); + }); + + describe("when extra whitespace is present in the middle of the label", () => { + it("should squash it down to a single whitespace", () => { + const fqi = createMockVariantAnalysisHistoryItem({ + historyItemStatus: QueryStatus.Completed, + resultCount: 0, + variantAnalysis: createMockVariantAnalysis({ + status: VariantAnalysisStatus.Succeeded, + executionStartTime, + scannedRepos: createMockScannedRepos([ + VariantAnalysisRepoStatus.Succeeded, + VariantAnalysisRepoStatus.Succeeded, + ]), + }), + }); + config.format = "%t %q %d %s %f %r %%"; + expect(labelProvider.getLabel(fqi)).toBe( + `${dateStr} a-query-name (javascript) 2/2 repositories completed a-query-file-path %`, + ); + }); + }); + + describe("when extra whitespace is present at the start of the label", () => { + it("should squash it down to a single whitespace", () => { + const fqi = createMockVariantAnalysisHistoryItem({ + historyItemStatus: QueryStatus.Completed, + resultCount: 0, + variantAnalysis: createMockVariantAnalysis({ + status: VariantAnalysisStatus.Succeeded, + executionStartTime, + scannedRepos: createMockScannedRepos([ + VariantAnalysisRepoStatus.Succeeded, + VariantAnalysisRepoStatus.Succeeded, + ]), + }), + }); + config.format = " %t %q %d %s %f %r %%"; + expect(labelProvider.getLabel(fqi)).toBe( + ` ${dateStr} a-query-name (javascript) 2/2 repositories completed a-query-file-path %`, + ); + }); + }); + + describe("when extra whitespace is present at the end of the label", () => { + it("should squash it down to a single whitespace", () => { + const fqi = createMockVariantAnalysisHistoryItem({ + historyItemStatus: QueryStatus.Completed, + resultCount: 0, + variantAnalysis: createMockVariantAnalysis({ + status: VariantAnalysisStatus.Succeeded, + executionStartTime, + scannedRepos: createMockScannedRepos([ + VariantAnalysisRepoStatus.Succeeded, + VariantAnalysisRepoStatus.Succeeded, + ]), + }), + }); + config.format = "%t %q %d %s %f %r %% "; + expect(labelProvider.getLabel(fqi)).toBe( + `${dateStr} a-query-name (javascript) 2/2 repositories completed a-query-file-path % `, + ); }); - config.format = "%t %q %d %s %f %r %% "; - expect(labelProvider.getLabel(fqi)).toBe( - `${dateStr} a-query-name (javascript) 2/2 repositories completed a-query-file-path % `, - ); }); }); }); diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/history-tree-data-provider.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/history-tree-data-provider.test.ts index 7026e6c6684..a0305761e91 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/history-tree-data-provider.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/history-tree-data-provider.test.ts @@ -38,6 +38,7 @@ describe("HistoryTreeDataProvider", () => { let app: App; let configListener: QueryHistoryConfigListener; const doCompareCallback = jest.fn(); + const doComparePerformanceCallback = jest.fn(); let queryHistoryManager: QueryHistoryManager; @@ -506,6 +507,7 @@ describe("HistoryTreeDataProvider", () => { }), languageContext, doCompareCallback, + doComparePerformanceCallback, ); (qhm.treeDataProvider as any).history = [...allHistory]; await workspace.saveAll(); diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/query-history-manager.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/query-history-manager.test.ts index b5176590822..38eb471c918 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/query-history-manager.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/query-history-manager.test.ts @@ -40,6 +40,7 @@ describe("QueryHistoryManager", () => { typeof variantAnalysisManagerStub.cancelVariantAnalysis >; const doCompareCallback = jest.fn(); + const doComparePerformanceCallback = jest.fn(); let executeCommand: jest.MockedFn< (commandName: string, ...args: any[]) => Promise @@ -939,6 +940,7 @@ describe("QueryHistoryManager", () => { }), new LanguageContextStore(mockApp), doCompareCallback, + doComparePerformanceCallback, ); (qhm.treeDataProvider as any).history = [...allHistory]; await workspace.saveAll(); diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/store/query-history-store.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/store/query-history-store.test.ts index 34c092987cc..e8ae5a82975 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/store/query-history-store.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/store/query-history-store.test.ts @@ -237,12 +237,12 @@ describe("write and read", () => { dbPath = "/a/b/c", ): QueryWithResults { // pretend that the results path exists - const resultsPath = join(queryPath, "results.bqrs"); mkdirpSync(queryPath); - writeFileSync(resultsPath, "", "utf8"); + writeFileSync(join(queryPath, "results.bqrs"), "", "utf8"); const queryEvalInfo = new QueryEvaluationInfo( queryPath, + "results", Uri.file(dbPath).fsPath, true, undefined, diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/variant-analysis-history.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/variant-analysis-history.test.ts index 1719ee00971..5442d5e2c38 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/variant-analysis-history.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-history/variant-analysis-history.test.ts @@ -105,6 +105,7 @@ describe("Variant Analyses and QueryHistoryManager", () => { }), new LanguageContextStore(app), asyncNoop, + asyncNoop, ); disposables.push(qhm); diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-results.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-results.test.ts index b4e27f60fdf..fc31fc909e3 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-results.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-results.test.ts @@ -127,7 +127,7 @@ describe("query-results", () => { const expectedResultsPath = join(queryPath, "results.bqrs"); const expectedSortedResultsPath = join( queryPath, - "sortedResults-cc8589f226adc134f87f2438e10075e0667571c72342068e2281e0b3b65e1092.bqrs", + "results-sorted-cc8589f226adc134f87f2438e10075e0667571c72342068e2281e0b3b65e1092.bqrs", ); expect(spy).toHaveBeenCalledWith( expectedResultsPath, @@ -291,7 +291,7 @@ describe("query-results", () => { }); const finished = new Promise((res, rej) => { - validSarifStream.addListener("close", res); + validSarifStream.addListener("close", () => res(undefined)); validSarifStream.addListener("error", rej); }); @@ -357,7 +357,7 @@ describe("query-results", () => { }); const finished = new Promise((res, rej) => { - invalidSarifStream.addListener("close", res); + invalidSarifStream.addListener("close", () => res(undefined)); invalidSarifStream.addListener("error", rej); }); @@ -408,7 +408,7 @@ describe("query-results", () => { function safeDel(file: string) { try { unlinkSync(file); - } catch (e) { + } catch { // ignore } } @@ -419,12 +419,12 @@ describe("query-results", () => { dbPath = "/a/b/c", ): QueryWithResults { // pretend that the results path exists - const resultsPath = join(queryPath, "results.bqrs"); mkdirpSync(queryPath); - writeFileSync(resultsPath, "", "utf8"); + writeFileSync(join(queryPath, "results.bqrs"), "", "utf8"); const queryEvalInfo = new QueryEvaluationInfo( queryPath, + "results", Uri.file(dbPath).fsPath, true, undefined, diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-testing/test-runner.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-testing/test-runner.test.ts index ea33088f87a..62d5a98dc64 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/query-testing/test-runner.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/query-testing/test-runner.test.ts @@ -1,4 +1,5 @@ import { CancellationTokenSource, Uri } from "vscode"; +import type * as fsExtra from "fs-extra"; import type { CodeQLCliServer } from "../../../../src/codeql-cli/cli"; import type { DatabaseItem, @@ -15,7 +16,7 @@ import { } from "./test-runner-helpers"; jest.mock("fs-extra", () => { - const original = jest.requireActual("fs-extra"); + const original: typeof fsExtra = jest.requireActual("fs-extra"); return { ...original, access: jest.fn(), diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/run-queries.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/run-queries.test.ts index 45e0063b1bb..8437249e815 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/run-queries.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/run-queries.test.ts @@ -28,12 +28,10 @@ describe("run-queries", () => { const saveDir = "query-save-dir"; const queryEvalInfo = createMockQueryEvaluationInfo(true, saveDir); - expect(queryEvalInfo.dilPath).toBe(join(saveDir, "results.dil")); - expect(queryEvalInfo.resultsPaths.resultsPath).toBe( - join(saveDir, "results.bqrs"), - ); - expect(queryEvalInfo.resultsPaths.interpretedResultsPath).toBe( - join(saveDir, "interpretedResults.sarif"), + expect(queryEvalInfo.dilPath).toBe(join(saveDir, "foo.dil")); + expect(queryEvalInfo.resultsPath).toBe(join(saveDir, "foo.bqrs")); + expect(queryEvalInfo.interpretedResultsPath).toBe( + join(saveDir, "foo-interpreted.sarif"), ); expect(queryEvalInfo.dbItemPath).toBe(Uri.file("/abc").fsPath); }); @@ -215,6 +213,7 @@ describe("run-queries", () => { ) { return new QueryEvaluationInfo( saveDir, + "foo", Uri.parse("file:///abc").fsPath, databaseHasMetadataFile, undefined, diff --git a/extensions/ql-vscode/test/vscode-tests/no-workspace/telemetry.test.ts b/extensions/ql-vscode/test/vscode-tests/no-workspace/telemetry.test.ts index 5d797b78918..d1f6f525019 100644 --- a/extensions/ql-vscode/test/vscode-tests/no-workspace/telemetry.test.ts +++ b/extensions/ql-vscode/test/vscode-tests/no-workspace/telemetry.test.ts @@ -1,14 +1,10 @@ import TelemetryReporter from "vscode-extension-telemetry"; -import type { ExtensionContext } from "vscode"; -import { workspace, ConfigurationTarget, window, env } from "vscode"; +import { workspace, env } from "vscode"; import { ExtensionTelemetryListener, telemetryListener as globalTelemetryListener, } from "../../../src/common/vscode/telemetry"; import { UserCancellationException } from "../../../src/common/vscode/progress"; -import { ENABLE_TELEMETRY } from "../../../src/config"; -import { createMockExtensionContext } from "./index"; -import { vscodeGetConfigurationMock } from "../test-config"; import { redactableError } from "../../../src/common/errors"; import { SemVer } from "semver"; @@ -17,10 +13,7 @@ import { SemVer } from "semver"; jest.setTimeout(10000); describe("telemetry reporting", () => { - let originalTelemetryExtension: boolean | undefined; - let originalTelemetryGlobal: string | undefined; let isCanary: string; - let ctx: ExtensionContext; let telemetryListener: ExtensionTelemetryListener; let sendTelemetryEventSpy: jest.SpiedFunction< @@ -29,22 +22,8 @@ describe("telemetry reporting", () => { let sendTelemetryErrorEventSpy: jest.SpiedFunction< typeof TelemetryReporter.prototype.sendTelemetryErrorEvent >; - let disposeSpy: jest.SpiedFunction< - typeof TelemetryReporter.prototype.dispose - >; - - let isTelemetryEnabledSpy: jest.SpyInstance< - typeof env.isTelemetryEnabled, - [] - >; - - let showInformationMessageSpy: jest.SpiedFunction< - typeof window.showInformationMessage - >; beforeEach(async () => { - vscodeGetConfigurationMock.mockRestore(); - try { // in case a previous test has accidentally activated this extension, // need to disable it first. @@ -52,44 +31,24 @@ describe("telemetry reporting", () => { // specified in the package.json. globalTelemetryListener?.dispose(); - ctx = createMockExtensionContext(); - sendTelemetryEventSpy = jest .spyOn(TelemetryReporter.prototype, "sendTelemetryEvent") .mockReturnValue(undefined); sendTelemetryErrorEventSpy = jest .spyOn(TelemetryReporter.prototype, "sendTelemetryErrorEvent") .mockReturnValue(undefined); - disposeSpy = jest - .spyOn(TelemetryReporter.prototype, "dispose") - .mockResolvedValue(undefined); - showInformationMessageSpy = jest - .spyOn(window, "showInformationMessage") - .mockResolvedValue(undefined); - - originalTelemetryExtension = workspace - .getConfiguration() - .get("codeQL.telemetry.enableTelemetry"); - originalTelemetryGlobal = workspace - .getConfiguration() - .get("telemetry.telemetryLevel"); isCanary = (!!workspace .getConfiguration() .get("codeQL.canary")).toString(); // each test will default to telemetry being enabled - isTelemetryEnabledSpy = jest - .spyOn(env, "isTelemetryEnabled", "get") - .mockReturnValue(true); - await setTelemetryLevel("telemetry", "all"); - await enableTelemetry("codeQL.telemetry", true); + jest.spyOn(env, "isTelemetryEnabled", "get").mockReturnValue(true); telemetryListener = new ExtensionTelemetryListener( "my-id", "1.2.3", "fake-key", - ctx, ); await wait(100); } catch (e) { @@ -99,18 +58,9 @@ describe("telemetry reporting", () => { afterEach(async () => { telemetryListener?.dispose(); - // await wait(100); - try { - await setTelemetryLevel("telemetry", originalTelemetryGlobal); - await enableTelemetry("codeQL.telemetry", originalTelemetryExtension); - } catch (e) { - console.error(e); - } }); - it("should initialize telemetry when 'codeQL.telemetry.enableTelemetry' is enabled and global 'telemetry.telemetryLevel' is 'all'", async () => { - await telemetryListener.initialize(); - + it("should initialize telemetry", async () => { expect(telemetryListener._reporter).toBeDefined(); const reporter: any = telemetryListener._reporter; expect(reporter.extensionId).toBe("my-id"); @@ -118,80 +68,7 @@ describe("telemetry reporting", () => { expect(reporter.userOptIn).toBe(true); // enabled }); - it("should initialize telemetry when global 'telemetry.telemetryLevel' is 'off'", async () => { - isTelemetryEnabledSpy.mockReturnValue(false); - await setTelemetryLevel("telemetry", "off"); - await telemetryListener.initialize(); - expect(telemetryListener._reporter).toBeDefined(); - - const reporter: any = telemetryListener._reporter; - expect(reporter.userOptIn).toBe(false); // disabled - }); - - it("should not initialize telemetry when extension option disabled", async () => { - await enableTelemetry("codeQL.telemetry", false); - await telemetryListener.initialize(); - - expect(telemetryListener._reporter).toBeUndefined(); - }); - - it("should not initialize telemetry when both options disabled", async () => { - await enableTelemetry("codeQL.telemetry", false); - isTelemetryEnabledSpy.mockReturnValue(false); - await setTelemetryLevel("telemetry", "off"); - await telemetryListener.initialize(); - expect(telemetryListener._reporter).toBeUndefined(); - }); - - it("should dispose telemetry object when re-initializing and should not add multiple", async () => { - await telemetryListener.initialize(); - expect(telemetryListener._reporter).toBeDefined(); - const firstReporter = telemetryListener._reporter; - await telemetryListener.initialize(); - expect(telemetryListener._reporter).toBeDefined(); - expect(telemetryListener._reporter).not.toBe(firstReporter); - - expect(disposeSpy).toHaveBeenCalledTimes(1); - - // initializing a third time continues to dispose - await telemetryListener.initialize(); - expect(disposeSpy).toHaveBeenCalledTimes(2); - }); - - it("should reinitialize reporter when extension setting changes", async () => { - await telemetryListener.initialize(); - - expect(disposeSpy).not.toHaveBeenCalled(); - expect(telemetryListener._reporter).toBeDefined(); - - // this disables the reporter - await enableTelemetry("codeQL.telemetry", false); - - expect(telemetryListener._reporter).toBeUndefined(); - - expect(disposeSpy).toHaveBeenCalledTimes(1); - - // creates a new reporter, but does not dispose again - await enableTelemetry("codeQL.telemetry", true); - - expect(telemetryListener._reporter).toBeDefined(); - expect(disposeSpy).toHaveBeenCalledTimes(1); - }); - - it("should set userOptIn to false when global setting changes", async () => { - await telemetryListener.initialize(); - - const reporter: any = telemetryListener._reporter; - expect(reporter.userOptIn).toBe(true); // enabled - - isTelemetryEnabledSpy.mockReturnValue(false); - await setTelemetryLevel("telemetry", "off"); - expect(reporter.userOptIn).toBe(false); // disabled - }); - it("should send an event", async () => { - await telemetryListener.initialize(); - telemetryListener.sendCommandUsage("command-id", 1234, undefined); expect(sendTelemetryEventSpy).toHaveBeenCalledWith( @@ -208,8 +85,6 @@ describe("telemetry reporting", () => { }); it("should send a command usage event with an error", async () => { - await telemetryListener.initialize(); - telemetryListener.sendCommandUsage( "command-id", 1234, @@ -230,7 +105,6 @@ describe("telemetry reporting", () => { }); it("should send a command usage event with a cli version", async () => { - await telemetryListener.initialize(); telemetryListener.cliVersion = new SemVer("1.2.3"); telemetryListener.sendCommandUsage( @@ -274,39 +148,7 @@ describe("telemetry reporting", () => { expect(sendTelemetryErrorEventSpy).not.toHaveBeenCalled(); }); - it("should avoid sending an event when telemetry is disabled", async () => { - await telemetryListener.initialize(); - await enableTelemetry("codeQL.telemetry", false); - - telemetryListener.sendCommandUsage("command-id", 1234, undefined); - telemetryListener.sendCommandUsage("command-id", 1234, new Error()); - - expect(sendTelemetryEventSpy).not.toHaveBeenCalled(); - expect(sendTelemetryErrorEventSpy).not.toHaveBeenCalled(); - }); - - it("should send an event when telemetry is re-enabled", async () => { - await telemetryListener.initialize(); - await enableTelemetry("codeQL.telemetry", false); - await enableTelemetry("codeQL.telemetry", true); - - telemetryListener.sendCommandUsage("command-id", 1234, undefined); - - expect(sendTelemetryEventSpy).toHaveBeenCalledWith( - "command-usage", - { - name: "command-id", - status: "Success", - isCanary, - cliVersion: "not-set", - }, - { executionTime: 1234 }, - ); - expect(sendTelemetryErrorEventSpy).not.toHaveBeenCalled(); - }); - it("should filter undesired properties from telemetry payload", async () => { - await telemetryListener.initialize(); // Reach into the internal appInsights client to grab our telemetry processor. const telemetryProcessor: Function = (telemetryListener._reporter as any) .appInsightsClient._telemetryProcessors[0]; @@ -340,118 +182,7 @@ describe("telemetry reporting", () => { }); }); - const resolveArg = - (index: number) => - (...args: any[]) => - Promise.resolve(args[index]); - - it("should request permission if popup has never been seen before", async () => { - showInformationMessageSpy.mockImplementation( - resolveArg(3 /* "yes" item */), - ); - await ctx.globalState.update("telemetry-request-viewed", false); - expect(env.isTelemetryEnabled).toBe(true); - - await enableTelemetry("codeQL.telemetry", false); - - await telemetryListener.initialize(); - - // Wait for user's selection to propagate in settings. - await wait(500); - - // Dialog opened, user clicks "yes" and telemetry enabled - expect(showInformationMessageSpy).toHaveBeenCalledTimes(1); - expect(ENABLE_TELEMETRY.getValue()).toBe(true); - expect(ctx.globalState.get("telemetry-request-viewed")).toBe(true); - }); - - it("should prevent telemetry if permission is denied", async () => { - showInformationMessageSpy.mockImplementation(resolveArg(4 /* "no" item */)); - await ctx.globalState.update("telemetry-request-viewed", false); - await enableTelemetry("codeQL.telemetry", true); - - await telemetryListener.initialize(); - - // Dialog opened, user clicks "no" and telemetry disabled - expect(showInformationMessageSpy).toHaveBeenCalledTimes(1); - expect(ENABLE_TELEMETRY.getValue()).toBe(false); - expect(ctx.globalState.get("telemetry-request-viewed")).toBe(true); - }); - - it("should unchange telemetry if permission dialog is dismissed", async () => { - showInformationMessageSpy.mockResolvedValue(undefined /* cancelled */); - await ctx.globalState.update("telemetry-request-viewed", false); - - // this causes requestTelemetryPermission to be called - await enableTelemetry("codeQL.telemetry", false); - - // Dialog opened, and user closes without interacting with it - expect(showInformationMessageSpy).toHaveBeenCalledTimes(1); - expect(ENABLE_TELEMETRY.getValue()).toBe(false); - // dialog was canceled, so should not have marked as viewed - expect(ctx.globalState.get("telemetry-request-viewed")).toBe(false); - }); - - it("should unchange telemetry if permission dialog is cancelled if starting as true", async () => { - await enableTelemetry("codeQL.telemetry", false); - - // as before, except start with telemetry enabled. It should _stay_ enabled if the - // dialog is canceled. - showInformationMessageSpy.mockResolvedValue(undefined /* cancelled */); - await ctx.globalState.update("telemetry-request-viewed", false); - - // this causes requestTelemetryPermission to be called - await enableTelemetry("codeQL.telemetry", true); - - // Dialog opened, and user closes without interacting with it - // Telemetry state should not have changed - expect(showInformationMessageSpy).toHaveBeenCalledTimes(1); - expect(ENABLE_TELEMETRY.getValue()).toBe(true); - // dialog was canceled, so should not have marked as viewed - expect(ctx.globalState.get("telemetry-request-viewed")).toBe(false); - }); - - it("should avoid showing dialog if global telemetry is disabled", async () => { - // when telemetry is disabled globally, we never want to show the - // opt in/out dialog. We just assume that codeql telemetry should - // remain disabled as well. - // If the user ever turns global telemetry back on, then we can - // show the dialog. - - isTelemetryEnabledSpy.mockReturnValue(false); - await setTelemetryLevel("telemetry", "off"); - await ctx.globalState.update("telemetry-request-viewed", false); - - await telemetryListener.initialize(); - - // popup should not be shown even though we have initialized telemetry - expect(showInformationMessageSpy).not.toHaveBeenCalled(); - }); - - // This test is failing because codeQL.canary is not a registered configuration. - // We do not want to have it registered because we don't want this item - // appearing in the settings page. It needs to only be set by users we tell - // about it to. - // At this point, I see no other way of testing re-requesting permission. - xit("should request permission again when user changes canary setting", async () => { - // initially, both canary and telemetry are false - await workspace.getConfiguration().update("codeQL.canary", false); - await enableTelemetry("codeQL.telemetry", false); - await ctx.globalState.update("telemetry-request-viewed", true); - await telemetryListener.initialize(); - showInformationMessageSpy.mockResolvedValue(undefined /* cancelled */); - - // set canary to true - await workspace.getConfiguration().update("codeQL.canary", true); - - // now, we should have to click through the telemetry requestor again - expect(ctx.globalState.get("telemetry-request-viewed")).toBe(false); - expect(showInformationMessageSpy).toHaveBeenCalledTimes(1); - }); - it("should send a ui-interaction telemetry event", async () => { - await telemetryListener.initialize(); - telemetryListener.sendUIInteraction("test"); expect(sendTelemetryEventSpy).toHaveBeenCalledWith( @@ -467,8 +198,6 @@ describe("telemetry reporting", () => { }); it("should send a ui-interaction telemetry event with a cli version", async () => { - await telemetryListener.initialize(); - telemetryListener.cliVersion = new SemVer("1.2.3"); telemetryListener.sendUIInteraction("test"); @@ -485,8 +214,6 @@ describe("telemetry reporting", () => { }); it("should send an error telemetry event", async () => { - await telemetryListener.initialize(); - telemetryListener.sendError(redactableError`test`); expect(sendTelemetryEventSpy).not.toHaveBeenCalled(); @@ -503,7 +230,6 @@ describe("telemetry reporting", () => { }); it("should send an error telemetry event with a cli version", async () => { - await telemetryListener.initialize(); telemetryListener.cliVersion = new SemVer("1.2.3"); telemetryListener.sendError(redactableError`test`); @@ -522,8 +248,6 @@ describe("telemetry reporting", () => { }); it("should redact error message contents", async () => { - await telemetryListener.initialize(); - telemetryListener.sendError( redactableError`test message with secret information: ${42} and more ${"secret"} parts`, ); @@ -543,8 +267,6 @@ describe("telemetry reporting", () => { }); it("should send config telemetry event", async () => { - await telemetryListener.initialize(); - telemetryListener.sendConfigInformation({ testKey: "testValue", testKey2: "42", @@ -563,26 +285,6 @@ describe("telemetry reporting", () => { expect(sendTelemetryErrorEventSpy).not.toHaveBeenCalled(); }); - async function enableTelemetry(section: string, value: boolean | undefined) { - await workspace - .getConfiguration(section) - .update("enableTelemetry", value, ConfigurationTarget.Global); - - // Need to wait some time since the onDidChangeConfiguration listeners fire - // asynchronously. Must ensure they to complete in order to have a successful test. - await wait(100); - } - - async function setTelemetryLevel(section: string, value: string | undefined) { - await workspace - .getConfiguration(section) - .update("telemetryLevel", value, ConfigurationTarget.Global); - - // Need to wait some time since the onDidChangeConfiguration listeners fire - // asynchronously. Must ensure they to complete in order to have a successful test. - await wait(100); - } - async function wait(ms = 0) { return new Promise((resolve) => setTimeout(resolve, ms)); } diff --git a/extensions/ql-vscode/test/vscode-tests/test-dispose-handler.ts b/extensions/ql-vscode/test/vscode-tests/test-dispose-handler.ts index 94f490dafe1..1ecc6c7aa83 100644 --- a/extensions/ql-vscode/test/vscode-tests/test-dispose-handler.ts +++ b/extensions/ql-vscode/test/vscode-tests/test-dispose-handler.ts @@ -1,13 +1,19 @@ -import type { Disposable } from "vscode"; +import type { Disposable, TreeView } from "vscode"; import { DisposableObject } from "../../src/common/disposable-object"; -export function testDisposeHandler(disposable: any & Disposable) { - if ( - disposable.onDidExpandElement && - disposable.onDidCollapseElement && - disposable.reveal - ) { - // This looks like a treeViewer. Don't dispose +function isTreeView(obj: unknown): obj is TreeView { + return ( + typeof obj === "object" && + obj !== null && + "onDidExpandElement" in obj && + "onDidCollapseElement" in obj && + "reveal" in obj + ); +} + +export function testDisposeHandler(disposable: Disposable) { + if (isTreeView(disposable)) { + // This looks like a TreeView. Don't dispose return; } if (disposable instanceof DisposableObject) { diff --git a/scripts/replace-cli-version.sh b/scripts/replace-cli-version.sh deleted file mode 100755 index 03db7fec03c..00000000000 --- a/scripts/replace-cli-version.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -VERSIONS=$(gh api -H "Accept: application/vnd.github+json" /repos/github/codeql-cli-binaries/releases | jq -r '.[].tag_name' | head -2) - -# we are exporting these variables so that we can access these variables in the workflow -LATEST_VERSION=$(echo $VERSIONS | awk '{ print $1 }') -PREVIOUS_VERSION=$(echo $VERSIONS | awk '{ print $2 }') - -echo "LATEST_VERSION=$LATEST_VERSION" >> $GITHUB_ENV -echo "PREVIOUS_VERSION=$PREVIOUS_VERSION" >> $GITHUB_ENV - -sed -i "s/$PREVIOUS_VERSION/$LATEST_VERSION/g" extensions/ql-vscode/supported_cli_versions.json diff --git a/syntaxes/ql.tmLanguage.json b/syntaxes/ql.tmLanguage.json index a8b5c3909a2..1269433c127 100644 --- a/syntaxes/ql.tmLanguage.json +++ b/syntaxes/ql.tmLanguage.json @@ -675,9 +675,6 @@ "begin": "(?x)(?<=/\\*\\*)([^*]|\\*(?!/))*$", "while": "(?x)(^|\\G)\\s*([^*]|\\*(?!/))(?=([^*]|[*](?!/))*$)", "patterns": [ - - - { "match": "(?x)\\G\\s* (@\\S+)", "name": "keyword.tag.ql" @@ -1469,7 +1466,7 @@ } }, "select-as-clause": { - "end": "(?x)(?<=(?:[0-9A-Za-z_])(?:(?!(?:[0-9A-Za-z_]))))", + "end": "(?x)(?<=(?:[0-9A-Za-z_]))(?:(?!(?:[0-9A-Za-z_])))", "match": "(?x)meta.block.select-as-clause.ql", "patterns": [ { @@ -1540,4 +1537,4 @@ "name": "constant.character.escape.ql" } } -} +} \ No newline at end of file