diff --git a/.aspect/rules/external_repository_action_cache/npm_translate_lock_MzA5NzUwNzMx b/.aspect/rules/external_repository_action_cache/npm_translate_lock_MzA5NzUwNzMx deleted file mode 100755 index f281d209239c..000000000000 --- a/.aspect/rules/external_repository_action_cache/npm_translate_lock_MzA5NzUwNzMx +++ /dev/null @@ -1,8 +0,0 @@ -# @generated -# Input hashes for repository rule npm_translate_lock(name = "npm2", pnpm_lock = "@//:pnpm-lock.yaml"). -# This file should be checked into version control along with the pnpm-lock.yaml file. -.npmrc=-2023857461 -package.json=-1326094533 -pnpm-lock.yaml=-117820973 -pnpm-workspace.yaml=1711114604 -yarn.lock=1901884029 diff --git a/.bazelignore b/.bazelignore index ded5d15573b2..2725b37f80e6 100644 --- a/.bazelignore +++ b/.bazelignore @@ -4,6 +4,7 @@ node_modules packages/angular/cli/node_modules packages/angular/create/node_modules packages/angular/pwa/node_modules +packages/angular/build/node_modules packages/angular/ssr/node_modules packages/angular_devkit/architect/node_modules packages/angular_devkit/architect_cli/node_modules @@ -14,3 +15,5 @@ packages/angular_devkit/schematics/node_modules packages/angular_devkit/schematics_cli/node_modules packages/ngtools/webpack/node_modules packages/schematics/angular/node_modules +modules/testing/builder/node_modules +tools/legacy-rnjs/node_modules diff --git a/.bazelrc b/.bazelrc index 6944b4807a3d..d736ebd75612 100644 --- a/.bazelrc +++ b/.bazelrc @@ -33,10 +33,6 @@ test:no-sharding --flaky_test_attempts=1 --test_sharding_strategy=disabled # See https://github.com/bazelbuild/bazel/issues/4603 build --symlink_prefix=dist/ -# Disable watchfs as it causes tests to be flaky on Windows -# https://github.com/angular/angular/issues/29541 -build --nowatchfs - # Turn off legacy external runfiles build --nolegacy_external_runfiles @@ -44,7 +40,7 @@ build --nolegacy_external_runfiles # in Bazel 0.21.0 but turned off again in 0.22.0. Follow # https://github.com/bazelbuild/bazel/issues/7026 for more details. # This flag is needed to so that the bazel cache is not invalidated -# when running bazel via `yarn bazel`. +# when running bazel via `pnpm bazel`. # See https://github.com/angular/angular/issues/27514. build --incompatible_strict_action_env run --incompatible_strict_action_env @@ -87,14 +83,14 @@ test:saucelabs --define=KARMA_WEB_TEST_MODE=SL_REQUIRED # Releases should always be stamped with version control info # This command assumes node on the path and is a workaround for # https://github.com/bazelbuild/bazel/issues/4802 -build:release --workspace_status_command="yarn ng-dev release build-env-stamp --mode=release" +build:release --workspace_status_command="pnpm -s ng-dev release build-env-stamp --mode=release" build:release --stamp -build:snapshot --workspace_status_command="yarn ng-dev release build-env-stamp --mode=snapshot" +build:snapshot --workspace_status_command="pnpm -s ng-dev release build-env-stamp --mode=snapshot" build:snapshot --stamp build:snapshot --//:enable_snapshot_repo_deps -build:e2e --workspace_status_command="yarn ng-dev release build-env-stamp --mode=release" +build:e2e --workspace_status_command="pnpm -s ng-dev release build-env-stamp --mode=release" build:e2e --stamp test:e2e --test_timeout=3600 --experimental_ui_max_stdouterr_bytes=2097152 @@ -133,9 +129,9 @@ build:remote --jobs=150 # Setup the toolchain and platform for the remote build execution. The platform # is provided by the shared dev-infra package and targets k8 remote containers. -build:remote --extra_execution_platforms=@npm//@angular/build-tooling/bazel/remote-execution:platform_with_network -build:remote --host_platform=@npm//@angular/build-tooling/bazel/remote-execution:platform_with_network -build:remote --platforms=@npm//@angular/build-tooling/bazel/remote-execution:platform_with_network +build:remote --extra_execution_platforms=@devinfra//bazel/remote-execution:platform_with_network +build:remote --host_platform=@devinfra//bazel/remote-execution:platform_with_network +build:remote --platforms=@devinfra//bazel/remote-execution:platform_with_network # Set remote caching settings build:remote --remote_accept_cached=true @@ -162,10 +158,6 @@ build:remote-cache --google_default_credentials # Fixes use of npm paths with spaces such as some within the puppeteer module build --experimental_inprocess_symlink_creation -# Enable runfiles even on Windows. -# Architect resolves output files from data files, and this isn't possible without runfile support. -build --enable_runfiles - #################################################### # rules_js specific flags #################################################### diff --git a/.github/codeql/config.yml b/.github/codeql/config.yml new file mode 100644 index 000000000000..ad81a268eda4 --- /dev/null +++ b/.github/codeql/config.yml @@ -0,0 +1,8 @@ +name: 'Angular CLI CodeQL config' + +query-filters: + # TODO(josephperrott): reevaluate if these can be reenabled. + - exclude: + id: js/bad-code-sanitization + - exclude: + id: js/regex-injection diff --git a/.github/shared-actions/windows-bazel-test/action.yml b/.github/shared-actions/windows-bazel-test/action.yml new file mode 100644 index 000000000000..7bdf488fc62c --- /dev/null +++ b/.github/shared-actions/windows-bazel-test/action.yml @@ -0,0 +1,83 @@ +name: 'Native Windows Bazel e2e test' +description: 'Runs an Angular CLI e2e Bazel test on native Windows (dispatched from inside WSL)' +author: 'Angular' + +inputs: + test_target_name: + description: E2E test target name + required: true + test_args: + description: | + Text representing the command line arguments that + should be passed to the e2e test runner. + required: false + default: '' + +runs: + using: composite + steps: + - name: Setup Bazel RBE + uses: angular/dev-infra/github-actions/bazel/configure-remote@2667d139a421977a40c3ea7ec768609fb19a8b9d + with: + allow_windows_rbe: true + + - name: Initialize WSL + id: init_wsl + uses: angular/dev-infra/github-actions/setup-wsl@9a3e28a515bf51cd2ecfd5f4d5b17613845e6f44 + with: + wsl_firewall_interface: 'vEthernet (WSL (Hyper-V firewall))' + + - name: Installing pnpm (in WSL) + run: npm install -g pnpm@9 + shell: wsl-bash {0} + + - name: Install node modules in WSL (re-using from previous install/cache restore) + run: | + cd ${{steps.init_wsl.outputs.repo_path}} + pnpm install --frozen-lockfile + shell: wsl-bash {0} + + - name: Build test binary for Windows (inside WSL) + shell: wsl-bash {0} + run: | + cd ${{steps.init_wsl.outputs.repo_path}} + pnpm bazel \ + build --config=e2e //tests/legacy-cli:${{inputs.test_target_name}} --platforms=tools:windows_x64 + env: + # See: https://devblogs.microsoft.com/commandline/share-environment-vars-between-wsl-and-windows + WSLENV: 'GOOGLE_APPLICATION_CREDENTIALS/p' + + - name: Copying binary artifact to host + shell: wsl-bash {0} + run: | + cd ${{steps.init_wsl.outputs.repo_path}} + tar -cf /tmp/test.tar.gz dist/bin/tests/legacy-cli/${{inputs.test_target_name}}_ + mkdir /mnt/c/test + mv /tmp/test.tar.gz /mnt/c/test + (cd /mnt/c/test && tar -xf /mnt/c/test/test.tar.gz) + + - name: Convert symlinks for Windows host + shell: wsl-bash {0} + run: | + cd ${{steps.init_wsl.outputs.repo_path}} + + runfiles_dir="/mnt/c/test/dist/bin/tests/legacy-cli/${{inputs.test_target_name}}_/${{inputs.test_target_name}}.bat.runfiles" + + # Make WSL symlinks compatible on Windows native file system. + node scripts/windows-testing/convert-symlinks.mjs $runfiles_dir "${{steps.init_wsl.outputs.cmd_path}}" + + # Needed for resolution because Aspect/Bazel looks for repositories at `/external`. + # TODO(devversion): consult with Aspect on why this is needed. + (cd $runfiles_dir/angular_cli && ${{steps.init_wsl.outputs.cmd_path}} /C "mklink /D external ..") + + - name: Run tests + # Note: This is Git Bash. + shell: bash + env: + BAZEL_BINDIR: '.' + working-directory: "C:\\test" + run: | + node "${{github.workspace}}\\scripts\\windows-testing\\parallel-executor.mjs" \ + $PWD/dist/bin/tests/legacy-cli/${{inputs.test_target_name}}_/${{inputs.test_target_name}}.bat.runfiles \ + ${{inputs.test_target_name}} \ + "${{inputs.test_args}}" \ diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml index 0b4c1c6f9df3..10d95b5c3ee9 100644 --- a/.github/workflows/assistant-to-the-branch-manager.yml +++ b/.github/workflows/assistant-to-the-branch-manager.yml @@ -16,6 +16,6 @@ jobs: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - - uses: angular/dev-infra/github-actions/branch-manager@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + - uses: angular/dev-infra/github-actions/branch-manager@0ad6a370f70638e785d6ef1f90dc6ede34684a47 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 517af28ca3ec..9d44aba112e1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,51 +21,51 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@b79ac7f5d6689becb7f2d559affbab5afb361389 - name: Install node modules - run: yarn install --immutable + run: pnpm install --frozen-lockfile - name: Generate JSON schema types # Schema types are required to correctly lint the TypeScript code - run: yarn admin build-schema + run: pnpm admin build-schema - name: Run ESLint - run: yarn lint --cache-strategy content + run: pnpm lint --cache-strategy content - name: Validate NgBot Configuration - run: yarn ng-dev ngbot verify + run: pnpm ng-dev ngbot verify - name: Validate Circular Dependencies - run: yarn ts-circular-deps check + run: pnpm ts-circular-deps check - name: Run Validation - run: yarn admin validate + run: pnpm admin validate - name: Check tooling setup - run: yarn check-tooling-setup + run: pnpm check-tooling-setup build: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@b79ac7f5d6689becb7f2d559affbab5afb361389 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/setup@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Install node modules - run: yarn install --immutable + run: pnpm install --frozen-lockfile - name: Build release targets - run: yarn ng-dev release build + run: pnpm ng-dev release build test: needs: build runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@b79ac7f5d6689becb7f2d559affbab5afb361389 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/setup@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Install node modules - run: yarn install --immutable + run: pnpm install --frozen-lockfile - name: Run module and package tests - run: yarn bazel test //modules/... //packages/... + run: pnpm bazel test //modules/... //packages/... env: ASPECT_RULES_JS_FROZEN_PNPM_LOCK: '1' @@ -74,33 +74,42 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, windows-latest] + os: [ubuntu-latest] node: [18, 20, 22] subset: [npm, esbuild] shard: [0, 1, 2, 3, 4, 5] - exclude: - # Skip Node.js v18 tests on Windows - - os: windows-latest - node: 18 - # Skip Node.js v20 tests on Windows - - os: windows-latest - node: 20 runs-on: ${{ matrix.os }} steps: - # Workaround for: https://github.com/bazel-contrib/bazel-lib/issues/968. - # TODO(devversion): Remove when Aspect lib issue is fixed. - - run: choco install gzip - if: ${{matrix.os == 'windows-latest'}} - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@b79ac7f5d6689becb7f2d559affbab5afb361389 - name: Install node modules - run: yarn install --immutable + run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/setup@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0ad6a370f70638e785d6ef1f90dc6ede34684a47 + - name: Run CLI E2E tests + run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} + + e2e_windows: + strategy: + fail-fast: false + matrix: + os: [windows-2025] + node: [22] + subset: [npm, esbuild] + shard: [0, 1, 2, 3, 4, 5] + runs-on: ${{ matrix.os }} + steps: + - name: Initialize environment + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@b79ac7f5d6689becb7f2d559affbab5afb361389 - name: Run CLI E2E tests - run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} + uses: ./.github/shared-actions/windows-bazel-test + with: + test_target_name: e2e.${{ matrix.subset }}_node${{ matrix.node }} + env: + E2E_SHARD_TOTAL: 6 + E2E_SHARD_INDEX: ${{ matrix.shard }} e2e-package-managers: needs: test @@ -114,15 +123,15 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@b79ac7f5d6689becb7f2d559affbab5afb361389 - name: Install node modules - run: yarn install --immutable + run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/setup@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Run CLI E2E tests - run: yarn bazel test --define=E2E_SHARD_TOTAL=3 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} + run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=3 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} e2e-snapshots: needs: test @@ -136,15 +145,15 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@b79ac7f5d6689becb7f2d559affbab5afb361389 - name: Install node modules - run: yarn install --immutable + run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/setup@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Run CLI E2E tests - run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} + run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} browsers: needs: build @@ -154,13 +163,13 @@ jobs: SAUCE_TUNNEL_IDENTIFIER: angular-cli-${{ github.workflow }}-${{ github.run_number }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@b79ac7f5d6689becb7f2d559affbab5afb361389 - name: Install node modules - run: yarn install --immutable + run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/setup@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Run E2E Browser tests env: SAUCE_USERNAME: ${{ vars.SAUCE_USERNAME }} @@ -173,9 +182,9 @@ jobs: run: | ./scripts/saucelabs/start-tunnel.sh & ./scripts/saucelabs/wait-for-tunnel.sh - yarn bazel test --config=saucelabs //tests/legacy-cli:e2e.saucelabs + pnpm bazel test --config=saucelabs //tests/legacy-cli:e2e.saucelabs ./scripts/saucelabs/stop-tunnel.sh - - uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0 + - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 if: ${{ failure() }} with: name: sauce-connect-log @@ -188,11 +197,11 @@ jobs: CIRCLE_BRANCH: ${{ github.ref_name }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@b79ac7f5d6689becb7f2d559affbab5afb361389 - name: Install node modules - run: yarn install --immutable + run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 - - run: yarn admin snapshots --verbose + uses: angular/dev-infra/github-actions/bazel/setup@f2a610b26cd7a451eddd50eb071dc495e3346a80 + - run: pnpm admin snapshots --verbose env: SNAPSHOT_BUILDS_GITHUB_TOKEN: ${{ secrets.SNAPSHOT_BUILDS_GITHUB_TOKEN }} diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 000000000000..3f4b2e80128f --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,34 @@ +name: 'CodeQL' + +on: + push: + branches: ['main', '*.*.x'] + schedule: + - cron: '39 9 * * 1' + +permissions: {} + +jobs: + analyze: + name: Analyze + runs-on: 'ubuntu-latest' + permissions: + security-events: write + packages: read + strategy: + fail-fast: false + steps: + - name: Checkout repository + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + persist-credentials: false + - name: Initialize CodeQL + uses: github/codeql-action/init@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 # v3.28.9 + with: + languages: javascript-typescript + build-mode: none + config-file: .github/codeql/config.yml + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 # v3.28.9 + with: + category: '/language:javascript-typescript' diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml index 3f1170b5af9f..8f9b97fba440 100644 --- a/.github/workflows/dev-infra.yml +++ b/.github/workflows/dev-infra.yml @@ -13,13 +13,13 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - uses: angular/dev-infra/github-actions/commit-message-based-labels@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + - uses: angular/dev-infra/github-actions/commit-message-based-labels@0ad6a370f70638e785d6ef1f90dc6ede34684a47 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} post_approval_changes: runs-on: ubuntu-latest steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - - uses: angular/dev-infra/github-actions/post-approval-changes@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + - uses: angular/dev-infra/github-actions/post-approval-changes@0ad6a370f70638e785d6ef1f90dc6ede34684a47 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/feature-requests.yml b/.github/workflows/feature-requests.yml index ee9b3a5a2363..73dfa1576f27 100644 --- a/.github/workflows/feature-requests.yml +++ b/.github/workflows/feature-requests.yml @@ -16,6 +16,6 @@ jobs: if: github.repository == 'angular/angular-cli' runs-on: ubuntu-latest steps: - - uses: angular/dev-infra/github-actions/feature-request@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + - uses: angular/dev-infra/github-actions/feature-request@0ad6a370f70638e785d6ef1f90dc6ede34684a47 with: angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }} diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml index 72741933e1cf..445240811d10 100644 --- a/.github/workflows/perf.yml +++ b/.github/workflows/perf.yml @@ -23,11 +23,11 @@ jobs: workflows: ${{ steps.workflows.outputs.workflows }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@b79ac7f5d6689becb7f2d559affbab5afb361389 - name: Install node modules - run: yarn install --immutable + run: pnpm install --frozen-lockfile - id: workflows - run: echo "workflows=$(yarn ng-dev perf workflows --list)" >> "$GITHUB_OUTPUT" + run: echo "workflows=$(pnpm -s ng-dev perf workflows --list)" >> "$GITHUB_OUTPUT" workflow: timeout-minutes: 30 @@ -38,18 +38,18 @@ jobs: workflow: ${{ fromJSON(needs.list.outputs.workflows) }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@b79ac7f5d6689becb7f2d559affbab5afb361389 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/setup@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Install node modules - run: yarn install --immutable + run: pnpm install --frozen-lockfile # We utilize the google-github-actions/auth action to allow us to get an active credential using workflow # identity federation. This allows us to request short lived credentials on demand, rather than storing # credentials in secrets long term. More information can be found at: # https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-google-cloud-platform - - uses: google-github-actions/auth@6fc4af4b145ae7821d527454aa9bd537d1f2dc5f # v2.1.7 + - uses: google-github-actions/auth@71f986410dfbc7added4569d411d040a91dc6935 # v2.1.8 with: project_id: 'internal-200822' workload_identity_provider: 'projects/823469418460/locations/global/workloadIdentityPools/measurables-tracking/providers/angular' service_account: 'measures-uploader@internal-200822.iam.gserviceaccount.com' - - run: yarn ng-dev perf workflows --name ${{ matrix.workflow }} --commit-sha ${{github.sha}} + - run: pnpm ng-dev perf workflows --name ${{ matrix.workflow }} --commit-sha ${{github.sha}} diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 197f84a44179..636f2e8d448f 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -34,53 +34,53 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@b79ac7f5d6689becb7f2d559affbab5afb361389 - name: Setup ESLint Caching uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: .eslintcache key: ${{ runner.os }}-${{ hashFiles('.eslintrc.json') }} - name: Install node modules - run: yarn install --immutable + run: pnpm install --frozen-lockfile - name: Generate JSON schema types # Schema types are required to correctly lint the TypeScript code - run: yarn admin build-schema + run: pnpm admin build-schema - name: Run ESLint - run: yarn lint --cache-strategy content + run: pnpm lint --cache-strategy content - name: Validate NgBot Configuration - run: yarn ng-dev ngbot verify + run: pnpm ng-dev ngbot verify - name: Validate Circular Dependencies - run: yarn ts-circular-deps check + run: pnpm ts-circular-deps check - name: Run Validation - run: yarn admin validate + run: pnpm admin validate - name: Check Package Licenses - uses: angular/dev-infra/github-actions/linting/licenses@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/linting/licenses@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Check tooling setup - run: yarn check-tooling-setup + run: pnpm check-tooling-setup - name: Check commit message # Commit message validation is only done on pull requests as its too late to validate once # it has been merged. - run: yarn ng-dev commit-message validate-range ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} + run: pnpm ng-dev commit-message validate-range ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} - name: Check code format # Code formatting checks are only done on pull requests as its too late to validate once # it has been merged. - run: yarn ng-dev format changed --check ${{ github.event.pull_request.base.sha }} + run: pnpm ng-dev format changed --check ${{ github.event.pull_request.base.sha }} build: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@b79ac7f5d6689becb7f2d559affbab5afb361389 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/setup@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Install node modules - run: yarn install --immutable + run: pnpm install --frozen-lockfile - name: Build release targets - run: yarn ng-dev release build + run: pnpm ng-dev release build - name: Store PR release packages - uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: packages path: dist/releases/*.tgz @@ -91,15 +91,15 @@ jobs: runs-on: ubuntu-latest steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@b79ac7f5d6689becb7f2d559affbab5afb361389 - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/setup@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Install node modules - run: yarn install --immutable + run: pnpm install --frozen-lockfile - name: Run module and package tests - run: yarn bazel test //modules/... //packages/... + run: pnpm bazel test //modules/... //packages/... env: ASPECT_RULES_JS_FROZEN_PNPM_LOCK: '1' @@ -115,33 +115,27 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@b79ac7f5d6689becb7f2d559affbab5afb361389 - name: Install node modules - run: yarn install --immutable + run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/setup@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Run CLI E2E tests - run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} + run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} e2e-windows-subset: needs: build - runs-on: windows-latest + runs-on: windows-2025 steps: - # Workaround for: https://github.com/bazel-contrib/bazel-lib/issues/968. - # TODO(devversion): Remove when Aspect lib issue is fixed. - - run: choco install gzip - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 - - name: Install node modules - run: yarn install --immutable - - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 - - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@b79ac7f5d6689becb7f2d559affbab5afb361389 - name: Run CLI E2E tests - run: yarn bazel test --config=e2e //tests/legacy-cli:e2e_node22 --test_filter="tests/basic/{build,rebuild}.ts" --test_arg="--esbuild" + uses: ./.github/shared-actions/windows-bazel-test + with: + test_target_name: e2e_node22 + test_args: --esbuild --glob "tests/basic/{build,rebuild}.ts" e2e-package-managers: needs: build @@ -155,15 +149,15 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@b79ac7f5d6689becb7f2d559affbab5afb361389 - name: Install node modules - run: yarn install --immutable + run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/setup@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Run CLI E2E tests - run: yarn bazel test --define=E2E_SHARD_TOTAL=3 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} + run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=3 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.${{ matrix.subset }}_node${{ matrix.node }} e2e-snapshots: needs: [analyze, build] @@ -178,12 +172,12 @@ jobs: runs-on: ${{ matrix.os }} steps: - name: Initialize environment - uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@b79ac7f5d6689becb7f2d559affbab5afb361389 - name: Install node modules - run: yarn install --immutable + run: pnpm install --frozen-lockfile - name: Setup Bazel - uses: angular/dev-infra/github-actions/bazel/setup@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/setup@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Setup Bazel RBE - uses: angular/dev-infra/github-actions/bazel/configure-remote@33ed0671560a851374f6f61ba4f7f5dcc1b284f8 + uses: angular/dev-infra/github-actions/bazel/configure-remote@0ad6a370f70638e785d6ef1f90dc6ede34684a47 - name: Run CLI E2E tests - run: yarn bazel test --define=E2E_SHARD_TOTAL=6 --define=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} + run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=6 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests/legacy-cli:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }} diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 4f7c0d713afc..c11ec4252dcb 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -38,7 +38,7 @@ jobs: # Upload the results as artifacts. - name: 'Upload artifact' - uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # v4.5.0 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: SARIF file path: results.sarif @@ -46,6 +46,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 # v3.28.0 + uses: github/codeql-action/upload-sarif@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 # v3.28.9 with: sarif_file: results.sarif diff --git a/.husky/commit-msg b/.husky/commit-msg index b5875311bb33..0c6213fc6bb7 100755 --- a/.husky/commit-msg +++ b/.husky/commit-msg @@ -1 +1 @@ -yarn ng-dev commit-message pre-commit-validate --file $1; +pnpm -s ng-dev commit-message pre-commit-validate --file $1; diff --git a/.husky/pre-commit b/.husky/pre-commit index 975be1d51585..bbcdc40e0112 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1 +1 @@ -yarn ng-dev format staged; \ No newline at end of file +pnpm -s ng-dev format staged; diff --git a/.husky/prepare-commit-msg b/.husky/prepare-commit-msg index 09f489cdad08..2333b7b798c0 100755 --- a/.husky/prepare-commit-msg +++ b/.husky/prepare-commit-msg @@ -1 +1 @@ -yarn ng-dev commit-message restore-commit-message-draft $1 $2; +pnpm -s ng-dev commit-message restore-commit-message-draft $1 $2; diff --git a/.mailmap b/.mailmap index d10bc39a19a7..f651b93dd40b 100644 --- a/.mailmap +++ b/.mailmap @@ -16,8 +16,10 @@ Charles Lyding Charles Lyding <19598772+clydin@users.noreply.github.com> Filipe Silva Mike Brocchi -Alan Agius - Alan Agius +Alan Agius <17563226+alan-agius4@users.noreply.github.com> + Alan Agius <17563226+alan-agius4@users.noreply.github.com> + Alan Agius <17563226+alan-agius4@users.noreply.github.com> + Alan Agius <17563226+alan-agius4@users.noreply.github.com> ################################################################################ diff --git a/.ng-dev/commit-message.mjs b/.ng-dev/commit-message.mjs index 4a3b270ce0a7..94fe91d8f727 100644 --- a/.ng-dev/commit-message.mjs +++ b/.ng-dev/commit-message.mjs @@ -9,6 +9,7 @@ export const commitMessage = { maxLineLength: Infinity, minBodyLength: 0, minBodyLengthTypeExcludes: ['docs'], + disallowFixup: true, // Note: When changing this logic, also change the `contributing.ejs` file. scopes: packages.map(({ name }) => name), }; diff --git a/.ng-dev/release.mjs b/.ng-dev/release.mjs index 9b54dfea2052..3d097ea80b11 100644 --- a/.ng-dev/release.mjs +++ b/.ng-dev/release.mjs @@ -31,8 +31,6 @@ export const release = { '@angular-devkit/schematics-cli', ], }, - // TODO: Remove after `rules_js` migration. - rulesJsInteropMode: true, publishRegistry: 'https://wombat-dressing-room.appspot.com', releasePrLabels: ['action: merge'], }; diff --git a/.npmrc b/.npmrc index b8d41f41d029..9227ff789b96 100644 --- a/.npmrc +++ b/.npmrc @@ -1,7 +1,11 @@ -# Yarn Berry doesn't check engines at all, so pnpm shouldn't either. -engine-strict = false +engine-strict = true # Disabling pnpm [hoisting](https://pnpm.io/npmrc#hoist) by setting `hoist=false` is recommended on # projects using rules_js so that pnpm outside of Bazel lays out a node_modules tree similar to what # rules_js lays out under Bazel (without a hidden node_modules/.pnpm/node_modules) hoist=false + +# Avoid pnpm auto-installing peer dependencies. We want to be explicit about our versions used +# for peer dependencies, avoiding potential mismatches. In addition, it ensures we can continue +# to rely on peer dependency placeholders substituted via Bazel. +auto-install-peers=false diff --git a/.nvmrc b/.nvmrc index 3c5535cf60a0..1117d417c6ac 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -18.19.1 +18.20.5 diff --git a/.yarn/README.md b/.yarn/README.md deleted file mode 100644 index cbbb1165c7b9..000000000000 --- a/.yarn/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Yarn Vendoring -We utilize Yarn's `yarn-path` configuration in a shared `.yarnrc` file to enforce -everyone using the same version of Yarn. Yarn checks the `.yarnrc` file to -determine if yarn should delegate the command to a vendored version at the -provided path. - -## How to update -To update to the latest version of Yarn as our vendored version: -- Run this command -```sh -yarn policies set-version latest -``` -- Remove the previous version \ No newline at end of file diff --git a/BUILD.bazel b/BUILD.bazel index 9555ade0455e..e428d013ef93 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -1,13 +1,7 @@ load("@aspect_rules_ts//ts:defs.bzl", rules_js_tsconfig = "ts_config") - -# Copyright Google Inc. All Rights Reserved. -# -# Use of this source code is governed by an MIT-style license that can be -# found in the LICENSE file at https://angular.dev/license load("@bazel_skylib//rules:common_settings.bzl", "bool_flag") -load("@build_bazel_rules_nodejs//:index.bzl", "copy_to_bin") -load("@npm//@bazel/concatjs:index.bzl", "ts_config") load("@npm2//:defs.bzl", "npm_link_all_packages") +load("//tools:defaults2.bzl", "copy_to_bin") package(default_visibility = ["//visibility:public"]) @@ -22,34 +16,42 @@ exports_files([ "package.json", ]) -npm_link_all_packages( - name = "root_modules", -) +npm_link_all_packages() rules_js_tsconfig( name = "build-tsconfig", src = "tsconfig-build.json", deps = [ "tsconfig.json", - "//:root_modules/@types/node", + "//:node_modules/@types/node", ], ) rules_js_tsconfig( - name = "build-tsconfig-angular", - src = "tsconfig-build-ng.json", + name = "test-tsconfig", + src = "tsconfig-test.json", deps = [ "tsconfig.json", + "//:node_modules/@types/jasmine", + "//:node_modules/@types/node", ], ) rules_js_tsconfig( - name = "test-tsconfig", - src = "tsconfig-test.json", + name = "build-tsconfig-esm", + src = "tsconfig-build-esm.json", deps = [ "tsconfig.json", - "//:root_modules/@types/jasmine", - "//:root_modules/@types/node", + ], +) + +rules_js_tsconfig( + name = "test-tsconfig-esm", + src = "tsconfig-test-esm.json", + deps = [ + ":build-tsconfig-esm", + "//:node_modules/@types/jasmine", + "//:node_modules/@types/node", ], ) @@ -92,11 +94,3 @@ config_setting( ":enable_snapshot_repo_deps": "true", }, ) - -ts_config( - name = "tsconfig-build-ng", - src = "tsconfig-build-ng.json", - deps = [ - ":tsconfig.json", - ], -) diff --git a/CHANGELOG.md b/CHANGELOG.md index dfb97aa7394c..a4ed918be16a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,95 +1,369 @@ - + -# 19.0.7 (2025-01-08) +# 19.2.5 (2025-03-26) + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------------------------- | +| [20455e2a6](https://github.com/angular/angular-cli/commit/20455e2a64558fcbb11906cb414a99d3976645d6) | fix | correct handling of response/request errors | +| [32b1dcd91](https://github.com/angular/angular-cli/commit/32b1dcd91b9f351bb6baa54f52c81c465185e01b) | fix | handle undefined `getOrCreateAngularServerApp` during error compilation | +| [7552a9fec](https://github.com/angular/angular-cli/commit/7552a9fec971f64ff27d78754ed13654e9a56b43) | fix | normalize karma asset paths before lookup | +| [1eb5b4357](https://github.com/angular/angular-cli/commit/1eb5b43575ab9908122606b94c0aaa53718678aa) | fix | update vite to 6.2.3 | + + + + + +# 19.2.4 (2025-03-19) + +### @schematics/angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------------------------------------------------- | +| [0a4e96bda](https://github.com/angular/angular-cli/commit/0a4e96bda054876332c5603a3bc972c3ec1eb0bf) | fix | replace `@angular/platform-browser-dynamic` with `@angular/platform-browser` | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------------------------- | +| [b0b643e46](https://github.com/angular/angular-cli/commit/b0b643e46f1009be66423fdff568d042717c5e2b) | fix | ensure errors for missing component resources | +| [2cd763e89](https://github.com/angular/angular-cli/commit/2cd763e893788cfb38260d48eef40afa574a6a70) | fix | ensure relative karma stack traces for test failures | + + + + + +# 19.2.3 (2025-03-13) + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------- | +| [5a739820b](https://github.com/angular/angular-cli/commit/5a739820be5cc7cb25e159a1f2283db92e741f78) | fix | update babel packages | + + + + + +# 19.2.2 (2025-03-12) + +### @angular/cli + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | -------------------------------------- | +| [0ee24e29b](https://github.com/angular/angular-cli/commit/0ee24e29b9bb24e92ca3159a13a21fac78974fd7) | fix | record analytics for nested schematics | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------- | +| [4575265f0](https://github.com/angular/angular-cli/commit/4575265f0b6dcfe81a729f60264e148d93302a10) | fix | exclude all entrypoints of a library from prebundling | +| [83fcffbb7](https://github.com/angular/angular-cli/commit/83fcffbb7d2ede1b08b4145dcedd46ef328bb2f8) | fix | handle postcss compilation errors gracefully | +| [78297ee47](https://github.com/angular/angular-cli/commit/78297ee47c9c381b08cd3649d369765c0b73d4f9) | fix | provide `extract-i18n` does not respect | +| [b18b9c8f2](https://github.com/angular/angular-cli/commit/b18b9c8f249df7b79caebc5ffca07198c14b9a72) | fix | remove duplicate prebundling warning | + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------ | +| [e6e8ce960](https://github.com/angular/angular-cli/commit/e6e8ce960a8048e7bfbaafa4ea013bb05d9897aa) | fix | prevent stream draining if `write` does not return a boolean | + + + + + +# 19.2.1 (2025-03-05) + +### @schematics/angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------------------------------- | +| [4c35b5721](https://github.com/angular/angular-cli/commit/4c35b5721b146d3c27f200c2688073c20dbe0a19) | fix | prevent accidental deletion of `main.ts` during application builder migration | +| [d7f9cb578](https://github.com/angular/angular-cli/commit/d7f9cb578d164aba830751cffb035bf8d962eca2) | fix | prevent error when tsconfig file is missing in application builder migration | ### @angular-devkit/architect -| Commit | Type | Description | -| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------ | -| [95c22aeff](https://github.com/angular/angular-cli/commit/95c22aeff4560a199416a20c3622301c5c690119) | fix | provide better error when builder is not defined | +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------- | +| [3ebd7ca7c](https://github.com/angular/angular-cli/commit/3ebd7ca7caeb266308856f47af06bea641b1f8e8) | fix | improve error message when configuration is missing | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------------------- | +| [c07330967](https://github.com/angular/angular-cli/commit/c0733096797d45a5cd3ffc18f89a5c75a521accb) | fix | allow component HMR with a service worker | +| [c989c91c3](https://github.com/angular/angular-cli/commit/c989c91c37cab9571bdfaa91cbd806acd9cf9d19) | fix | exclude component styles from 'any' and 'all' budget calculations | +| [96e5dcb5f](https://github.com/angular/angular-cli/commit/96e5dcb5f14b8d16520974b80bb531a190be2343) | fix | handle undefined `less` stylesheet sourcemap values | + + + + + +# 19.2.0 (2025-02-26) + +### @schematics/angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------- | +| [fe8d83a1f](https://github.com/angular/angular-cli/commit/fe8d83a1f6b5e212d6d51d8f042141c3792ed1cf) | fix | add additional checks for application builder usage | +| [adf4ea5d4](https://github.com/angular/angular-cli/commit/adf4ea5d4ccb252132301111153619178c5bdabe) | fix | remove animations module from ng new app | ### @angular-devkit/build-angular -| Commit | Type | Description | -| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------- | -| [028652992](https://github.com/angular/angular-cli/commit/028652992f0f9cc6fec5de35be7ecf74ec3947c5) | fix | preserve css type for jasmine.css | +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | -------------------------------------------- | +| [ef7ea536f](https://github.com/angular/angular-cli/commit/ef7ea536feae128b9fabaa124cde2bdad3802cba) | feat | add aot option to jest | +| [523d539c6](https://github.com/angular/angular-cli/commit/523d539c6633ab223723162f425e0ef2b7b4ff71) | feat | add aot option to karma | +| [a00a49a65](https://github.com/angular/angular-cli/commit/a00a49a65ae68e6e0f9856d8d0f4d9914031cd05) | feat | add aot to WTR schema | +| [2bae1a9c0](https://github.com/angular/angular-cli/commit/2bae1a9c0c9eff8087b67c7890b87dc1c279c809) | fix | support aot option for karma browser builder | ### @angular/build -| Commit | Type | Description | -| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------------------------- | -| [f7522342a](https://github.com/angular/angular-cli/commit/f7522342a8dd99543422629db6dcf1228c5d7279) | fix | add asset tracking to application builder watch files | -| [e973643bf](https://github.com/angular/angular-cli/commit/e973643bfbe47447ca522ca59b07a94fe6c03e0b) | fix | do not mark Babel \_defineProperty helper function as pure | -| [881095eec](https://github.com/angular/angular-cli/commit/881095eec5cdc80fe79de8fdbe05ba985bf8210a) | fix | enable serving files with bundle-like names | -| [db10af0b3](https://github.com/angular/angular-cli/commit/db10af0b3a775619ac71acdd0258cc58e96e948c) | fix | fix incorrect budget calculation | -| [c822f8f15](https://github.com/angular/angular-cli/commit/c822f8f154b75a8b8e48e32953bee7ec2763fd13) | fix | handle relative URLs when constructing new URLs during server fetch | -| [b43c648b0](https://github.com/angular/angular-cli/commit/b43c648b02c181c1d98cd3293d89ad8b131a3f51) | fix | mitigate JS transformer worker execArgv errors | -| [1f2481a4f](https://github.com/angular/angular-cli/commit/1f2481a4f5155368aa571fc6679e3ef8af0ce56f) | fix | pass `define` option defined in application builder to Vite prebundling | -| [c94f568a4](https://github.com/angular/angular-cli/commit/c94f568a412384bb8e4b66928f41b60220c8b7f4) | fix | warn when `@angular/localize/init` is imported directly | +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------------------- | +| [11fab9c7d](https://github.com/angular/angular-cli/commit/11fab9c7dde950e46b2a23d239bb9e29b20f5eff) | feat | add application builder karma testing to package | +| [a5fcf8044](https://github.com/angular/angular-cli/commit/a5fcf804428b835cd79bd8fad55c16e614c2be3a) | fix | provide karma stack trace sourcemap support | +| [964fb778b](https://github.com/angular/angular-cli/commit/964fb778b7d9e4811a6987eddc4f0a010bb713f6) | fix | support per component updates of multi-component files | +| [f836be9e6](https://github.com/angular/angular-cli/commit/f836be9e676575fccd4d74eddbc5bf647f7ff1bd) | fix | support Vite `allowedHosts` option for development server | +| [0ddf6aafa](https://github.com/angular/angular-cli/commit/0ddf6aafaa65b3323dc4ee6251d75794ae862ec7) | fix | utilize bazel stamp instead of resolving peer dependency versions | + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | -------------------------------------------------------------------- | +| [9726cd084](https://github.com/angular/angular-cli/commit/9726cd084b76fe605405d562a18d8af91d6657d8) | feat | Add support for route matchers with fine-grained render mode control | - + -# 19.1.0-next.2 (2024-12-18) +# 19.1.8 (2025-02-19) -### @angular-devkit/architect +### @angular/cli -| Commit | Type | Description | -| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------------------------- | -| [fe1ae6933](https://github.com/angular/angular-cli/commit/fe1ae6933998104c144b2c8854f362289c8d91c6) | fix | avoid Node.js resolution for relative builder schema | +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | -------------------------------------------------------------------------- | +| [f76cee637](https://github.com/angular/angular-cli/commit/f76cee6378d1fb103a47c4c9006df344029491c9) | fix | correctly parse and resolve relative schematic collection names on Windows | +| [ceba7739c](https://github.com/angular/angular-cli/commit/ceba7739cc72835d080a3c2246209a635212a607) | fix | prefer installed package as fallback when listing package groups | ### @angular-devkit/build-angular -| Commit | Type | Description | -| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------ | -| [a9a347014](https://github.com/angular/angular-cli/commit/a9a3470147aaf66ff4784a5b5c26c56d1051a5b3) | fix | jasmine.clock with app builder | +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------- | +| [c54b9996a](https://github.com/angular/angular-cli/commit/c54b9996adb23ebc0a5e1e159ac4a9b54cbf2f1a) | fix | pass missing options to Karma esbuild builder | ### @angular/build | Commit | Type | Description | | --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------------- | -| [298b554a7](https://github.com/angular/angular-cli/commit/298b554a7a40465444b4c508e2250ecbf459ea47) | feat | enable component template hot replacement by default | -| [19bb2d480](https://github.com/angular/angular-cli/commit/19bb2d48097eaf8dcdbf584603210146b5f1b81e) | fix | force HTTP/1.1 in dev-server SSR with SSL | -| [3b7e6a8c6](https://github.com/angular/angular-cli/commit/3b7e6a8c6e2e018a85b437256040fd9c8161d537) | fix | invalidate component template updates with dev-server SSR | +| [2f60a24dd](https://github.com/angular/angular-cli/commit/2f60a24dd76b3345aef666e7a84099863349c53e) | fix | suppress asset missing warning for `/index.html` requests | +| [b8f7952b7](https://github.com/angular/angular-cli/commit/b8f7952b783a83649364107c78f0fb87ac7b3cf3) | fix | update critical CSS inlining to support `autoCsp` | + + + + + +# 19.1.7 (2025-02-12) + +### @schematics/angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | -------------------------------------- | +| [de73b1c0c](https://github.com/angular/angular-cli/commit/de73b1c0c2d5748818d2e94f93f2640d4c6b949c) | fix | include default export for Express app | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------------- | +| [8890a5f76](https://github.com/angular/angular-cli/commit/8890a5f76c252fe383a632880df476e5f63ef931) | fix | always provide Vite client helpers with development server | +| [df1d38846](https://github.com/angular/angular-cli/commit/df1d388465b6f0d3aab5fb4f011cbbe74d3058f4) | fix | configure Vite CORS option | +| [a13a49d95](https://github.com/angular/angular-cli/commit/a13a49d95be61d2a2458962d57318f301dede502) | fix | exclude unmodified files from logs with `--localize` | +| [0826315fa](https://github.com/angular/angular-cli/commit/0826315fac1c3fd2d22aa0ea544bd59ef9ed8781) | fix | handle unlocalizable files correctly in localized prerender | +| [d2e1c8e9f](https://github.com/angular/angular-cli/commit/d2e1c8e9f5c03a410d8204a5f9b11b4ad9cc9eaa) | perf | cache translated i18n bundles for faster builds | ### @angular/ssr -| Commit | Type | Description | -| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------------------------- | -| [1bf9381c8](https://github.com/angular/angular-cli/commit/1bf9381c8c580321c8a473da1735839ecaf5ad76) | fix | correctly resolve pre-transform resources in Vite SSR without AppEngine | -| [ad1d7d76f](https://github.com/angular/angular-cli/commit/ad1d7d76fc6b94b8f12841fcfb331e5fb098403e) | fix | ensure correct `Location` header for redirects behind a proxy | +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------------------------------------- | +| [f5d974576](https://github.com/angular/angular-cli/commit/f5d97457622897b41e73a859dd1f218fa962be15) | fix | accurately calculate content length for static pages with `\r\n` | +| [c26ea1619](https://github.com/angular/angular-cli/commit/c26ea1619095102b21176435af826cf53f0054b1) | fix | properly handle baseHref with protocol | - + -# 19.0.6 (2024-12-18) +# 17.3.12 (2025-02-12) ### @angular-devkit/build-angular -| Commit | Type | Description | -| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------ | -| [db7421231](https://github.com/angular/angular-cli/commit/db7421231c3da7bbbfde72dc35642aaf005fbeca) | fix | jasmine.clock with app builder | +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------- | +| [d83237028](https://github.com/angular/angular-cli/commit/d832370285adccbf955963a5115cf9b9bf54a08d) | fix | update vite to version 5.4.14 | + + + + + +# 19.1.6 (2025-02-05) + +### @schematics/angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------------------------------- | +| [3f7042672](https://github.com/angular/angular-cli/commit/3f704267223d1881ea40e9de4e6381b9d0e43fe6) | fix | remove additional newline after standalone property | +| [e9778dba0](https://github.com/angular/angular-cli/commit/e9778dba0d75e7f528b600d51504a583485bd033) | fix | skip ssr migration when `@angular/ssr` is not a dependency | ### @angular/build -| Commit | Type | Description | -| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------- | -| [5fbc105ed](https://github.com/angular/angular-cli/commit/5fbc105ed0cb76106916660d99fc53d7480dcbc8) | fix | force HTTP/1.1 in dev-server SSR with SSL | +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------------------------------------------- | +| [27f833186](https://github.com/angular/angular-cli/commit/27f8331865de35044ddeda7a8c05bb2700b0be6a) | fix | avoid pre-transform errors with Vite pre-bundling | +| [8f6ee7ed9](https://github.com/angular/angular-cli/commit/8f6ee7ed933ea7394e14fe46d141427839008040) | fix | ensure full rebuild after initial error build in watch mode | +| [2b9c00f68](https://github.com/angular/angular-cli/commit/2b9c00f686145a8613dc2ce7f494193622e02625) | fix | prevent fallback to serving main.js for unknown requests | +| [45abd15b7](https://github.com/angular/angular-cli/commit/45abd15b781bb5bb067a7a52e7a809bb9d141c75) | fix | prevent server manifest generation when no server features are enabled | ### @angular/ssr -| Commit | Type | Description | -| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------------------------- | -| [2f4df6b2b](https://github.com/angular/angular-cli/commit/2f4df6b2be458b3651df49f3bced923e8df4d547) | fix | correctly resolve pre-transform resources in Vite SSR without AppEngine | -| [0789a9e13](https://github.com/angular/angular-cli/commit/0789a9e133fed4edc29b108630b2cf91e157127e) | fix | ensure correct `Location` header for redirects behind a proxy | +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | -------------------------------------------------------- | +| [5bf5e5fd2](https://github.com/angular/angular-cli/commit/5bf5e5fd20e3c33a274a936dd1ce00e07b860226) | fix | prioritize the first matching route over subsequent ones | - + + +# 19.1.5 (2025-01-29) + +### @schematics/angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | -------------------------------------------------------------------------- | +| [14e3a71e4](https://github.com/angular/angular-cli/commit/14e3a71e46e12a556323fff48998794eecab9896) | fix | update library schematic to use `@angular-devkit/build-angular:ng-packagr` | -# 19.1.0-next.1 (2024-12-12) +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | -------------------------------------------------------------------- | +| [d53d25fc1](https://github.com/angular/angular-cli/commit/d53d25fc1b80388158643dbdd37aa49b0aa790e0) | fix | allow tailwindcss 4.x as a peer dependency | +| [bd9d379f0](https://github.com/angular/angular-cli/commit/bd9d379f0401a19d527dc896a96b2671b4c4ed76) | fix | disable TypeScript `removeComments` option | +| [e73e9102e](https://github.com/angular/angular-cli/commit/e73e9102e3098882dd76a8dbf800d4ba414e0e27) | fix | handle empty module case to avoid TypeError | +| [bb413456e](https://github.com/angular/angular-cli/commit/bb413456e95a9be49feba95415915ce2ef39b1b5) | fix | keep background referenced HMR update chunks | +| [2011d3428](https://github.com/angular/angular-cli/commit/2011d34286784156b8c09bb8c6d376d8f902bc00) | fix | support template updates that also trigger global stylesheet changes | +| [688019946](https://github.com/angular/angular-cli/commit/688019946358b176eacc872ece72987387a603f1) | fix | update vite to version 6.0.11 | + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------ | +| [94643d54d](https://github.com/angular/angular-cli/commit/94643d54da1ddadcec1c169aa844a716bec612f6) | fix | enhance dynamic route matching for better performance and accuracy | +| [747557aa0](https://github.com/angular/angular-cli/commit/747557aa0aad00f1df2ce7912ab49775e19c60dc) | fix | redirect to locale pathname instead of full URL | +| [bbbc1eb7a](https://github.com/angular/angular-cli/commit/bbbc1eb7a0c295e0bc4aea95b7292ba484f8a360) | fix | rename `provideServerRoutesConfig` to `provideServerRouting` | + + + + + +# 18.2.14 (2025-01-29) + +### @angular-devkit/build-angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------- | +| [9d34d28ec](https://github.com/angular/angular-cli/commit/9d34d28ec2965e1b9753556b2721d25ab05c655b) | fix | remove unused `vite` dependency | + + + + + +# 18.2.13 (2025-01-29) + +### @angular/cli + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------------------------- | +| [deeaf1883](https://github.com/angular/angular-cli/commit/deeaf18836efddfa1ee56a25e44944ba444d35ac) | fix | correctly select package versions in descending order during `ng add` | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------- | +| [fdddf2c08](https://github.com/angular/angular-cli/commit/fdddf2c0844081667a09f2ffe0b16f77384959b2) | fix | update vite to version 5.4.14 | + + + + + +# 19.1.4 (2025-01-22) + +### @angular-devkit/schematics + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------------------------- | +| [aa6f0d051](https://github.com/angular/angular-cli/commit/aa6f0d051179d31aad2c3be7b79f9fda8de60f34) | fix | ensure collections can be resolved via test runner in pnpm workspaces | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------------------------------------------------------- | +| [ff8192a35](https://github.com/angular/angular-cli/commit/ff8192a355ca38edb34fb0cfe08ef133629f3f63) | fix | correct path for `/@ng/components` on Windows | +| [14d2f7ca0](https://github.com/angular/angular-cli/commit/14d2f7ca0e930fceeea53d307db79f0e963c1d53) | fix | include extracted routes in the manifest during prerendering | +| [c87a38f5b](https://github.com/angular/angular-cli/commit/c87a38f5b25b3cddd1b2a1ee4b443b10cf03b767) | fix | only issue invalid i18n config error for duplicate `subPaths` with inlined locales | +| [d50788cf9](https://github.com/angular/angular-cli/commit/d50788cf9f799ffbe9ba0edde425e6833623686d) | fix | replace deprecation of `i18n.baseHref` with a warning | + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | -------------------------------------------------------------------- | +| [bcc5fab75](https://github.com/angular/angular-cli/commit/bcc5fab750c0029e16ad91d277f88113a60b7fa1) | fix | prevent route matcher error when SSR routing is not used | +| [9bacf3981](https://github.com/angular/angular-cli/commit/9bacf3981995626cf935cf1620c391338de1c9df) | fix | properly manage catch-all routes with base href | +| [59c757781](https://github.com/angular/angular-cli/commit/59c75778112383816da2f729d5ae80705b5828fa) | fix | unblock route extraction with `withEnabledBlockingInitialNavigation` | + + + + + +# 19.1.3 (2025-01-20) + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------------- | +| [7d8c34172](https://github.com/angular/angular-cli/commit/7d8c34172bf29fbf61c0c0114c419903804b6b38) | fix | allow asset changes to reload page on incremental updates | +| [9fa29af37](https://github.com/angular/angular-cli/commit/9fa29af374060a05a19b32d1f0dee954ec70f451) | fix | handle relative `@ng/components` | +| [c4de34703](https://github.com/angular/angular-cli/commit/c4de34703f8b17ac96e66f889fa0e3ffff524831) | fix | perform full reload for templates with `$localize` usage | + + + + + +# 19.1.2 (2025-01-17) + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------ | +| [939d1612a](https://github.com/angular/angular-cli/commit/939d1612add13bab9aed6cc77bce0e17555bfe3b) | fix | perform incremental background file updates with component updates | +| [304027207](https://github.com/angular/angular-cli/commit/30402720707b7a8b9042a6046692d62a768cdc64) | fix | prevent full page reload on HMR updates with SSR enabled | +| [148acbd58](https://github.com/angular/angular-cli/commit/148acbd58a13b1ba8c4a3349bd6042c24a9f93b5) | fix | reset component updates on dev-server index request | + + + + + +# 19.1.1 (2025-01-16) + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------- | +| [298506751](https://github.com/angular/angular-cli/commit/298506751f2b3788fa2def7f7b4012e9e5465047) | fix | resolve HMR-prefixed files in SSR with Vite | + + + + + +# 19.1.0 (2025-01-15) ## Deprecations @@ -99,30 +373,48 @@ The `subPath` defines the URL segment for the locale, serving as both the HTML base HREF and the directory name for output. By default, if not specified, `subPath` will use the locale code. +### @schematics/angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------------------- | +| [02825eec5](https://github.com/angular/angular-cli/commit/02825eec53456384ba5b9c19f25dde3cfc95d796) | feat | use `@angular/build` package in library generation schematic | +| [88431b756](https://github.com/angular/angular-cli/commit/88431b7564d6757898744597a67fcdc178413128) | fix | application migration should migrate ng-packagr builder package | + ### @angular-devkit/architect -| Commit | Type | Description | -| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------- | -| [2b8a02bac](https://github.com/angular/angular-cli/commit/2b8a02bac098d4ac4f31b0e74bedfc739171e30b) | feat | require build schemas from modules | +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------------------------- | +| [2b8a02bac](https://github.com/angular/angular-cli/commit/2b8a02bac098d4ac4f31b0e74bedfc739171e30b) | feat | require build schemas from modules | +| [fe1ae6933](https://github.com/angular/angular-cli/commit/fe1ae6933998104c144b2c8854f362289c8d91c6) | fix | avoid Node.js resolution for relative builder schema | -### @angular-devkit/build-angular +### @angular-devkit/core -| Commit | Type | Description | -| --------------------------------------------------------------------------------------------------- | ---- | -------------------------------------- | -| [fb41d182e](https://github.com/angular/angular-cli/commit/fb41d182ee9e50386b0412e07a8bacaaa8c7ce13) | fix | fix webpack config transform for karma | -| [9e2d3fbd1](https://github.com/angular/angular-cli/commit/9e2d3fbd1f5ce1eeca8a46d854aa45598e516d90) | fix | handle windows spec collisions | +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------------------------------------- | +| [ce7c4e203](https://github.com/angular/angular-cli/commit/ce7c4e203d0312d21d4a3d1955f9c97bdf3e06d2) | fix | handle Windows drive letter case insensitivity in path functions | + +### @angular-devkit/schematics + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------- | +| [2f55209dd](https://github.com/angular/angular-cli/commit/2f55209dd24602bdf8c27ef083f96b5f55166971) | fix | update `Rule` type to support returning a `Promise` of `Tree` | ### @angular/build -| Commit | Type | Description | -| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------- | -| [0a570c0c2](https://github.com/angular/angular-cli/commit/0a570c0c2e64c61ce9969975a21c0d9aac8d9f3b) | feat | add support for customizing URL segments with i18n | -| [210bf4e2b](https://github.com/angular/angular-cli/commit/210bf4e2b4eeac6cdda7e810752486b74c6c0876) | fix | Fixing auto-csp edge cases where | -| [d811a7ffb](https://github.com/angular/angular-cli/commit/d811a7ffb0b6aad741e35025e218ea558590b0bb) | fix | handle external `@angular/` packages during SSR ([#29094](https://github.com/angular/angular-cli/pull/29094)) | -| [64f32c769](https://github.com/angular/angular-cli/commit/64f32c769f58b4e7306faf73fdae386a30f48a41) | fix | provide component HMR update modules to dev-server SSR | -| [c832bac9b](https://github.com/angular/angular-cli/commit/c832bac9b23cd7e8c354f4e2428c158b9bb45e47) | fix | show error when Node.js built-ins are used during `ng serve` | -| [887599822](https://github.com/angular/angular-cli/commit/88759982241ec2c30e00f62691347893d36bbfac) | fix | use consistent path separators for template HMR identifiers | -| [75998ebab](https://github.com/angular/angular-cli/commit/75998ebabb041f60aab40bf5a11979e8f3615537) | perf | reuse TS package.json cache when rebuilding | +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------ | +| [2c9d7368f](https://github.com/angular/angular-cli/commit/2c9d7368fc30f3488152e35ac468db5f2a9432f2) | feat | add ng-packagr builder to the package | +| [0a570c0c2](https://github.com/angular/angular-cli/commit/0a570c0c2e64c61ce9969975a21c0d9aac8d9f3b) | feat | add support for customizing URL segments with i18n | +| [298b554a7](https://github.com/angular/angular-cli/commit/298b554a7a40465444b4c508e2250ecbf459ea47) | feat | enable component template hot replacement by default | +| [d350f357b](https://github.com/angular/angular-cli/commit/d350f357b2a74df828ec022e03754d59cc680848) | fix | correctly validate locales `subPath` | +| [8aa1ce608](https://github.com/angular/angular-cli/commit/8aa1ce60808c073634237d03045626d379a51183) | fix | handle loaders correctly in SSR bundles for external packages | +| [3b7e6a8c6](https://github.com/angular/angular-cli/commit/3b7e6a8c6e2e018a85b437256040fd9c8161d537) | fix | invalidate component template updates with dev-server SSR | +| [8fa682e57](https://github.com/angular/angular-cli/commit/8fa682e571dbba4bf249ceb3ca490c4ddd4d7fe5) | fix | remove deleted assets from output during watch mode | +| [48cae815c](https://github.com/angular/angular-cli/commit/48cae815cfd0124217c1b5bc8c92dfdb0b150101) | fix | skip vite SSR warmup file configuration when SSR is disabled | +| [ba16ad6b5](https://github.com/angular/angular-cli/commit/ba16ad6b56e9a1ae0f380141bc1e1253a75fcf6b) | fix | support incremental build file results in watch mode | +| [955acef3d](https://github.com/angular/angular-cli/commit/955acef3d504ac924bd813f401fa9b49edbd337b) | fix | trigger browser reload on asset changes with Vite dev server | +| [e74300a2c](https://github.com/angular/angular-cli/commit/e74300a2cbc666482992fa8d6dbfeef37f3a9db5) | fix | use component updates for component style HMR | +| [6a19c217e](https://github.com/angular/angular-cli/commit/6a19c217eaebf9c0bffba8482545efc375fd2a8a) | fix | warn when using both `isolatedModules` and `emitDecoratorMetadata` | ### @angular/ssr @@ -130,8 +422,64 @@ | --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------------------------------------- | | [8d7a51dfc](https://github.com/angular/angular-cli/commit/8d7a51dfc9658aa2f0f0c527435c05c2b10f34e5) | feat | add `modulepreload` for lazy-loaded routes | | [41ece633b](https://github.com/angular/angular-cli/commit/41ece633b3d42ef110bf6085fe0783ab2a56efcd) | feat | redirect to preferred locale when accessing root route without a specified locale | -| [d7214e961](https://github.com/angular/angular-cli/commit/d7214e9610588fe1dbd8ce30e51eaac14a038c56) | fix | include `Content-Language` header when locale is set | -| [10a5b8b6b](https://github.com/angular/angular-cli/commit/10a5b8b6b8ab1f1422adcb66e685af16b2c96549) | fix | disable component bootstrapping during route extraction | +| [3feecddbb](https://github.com/angular/angular-cli/commit/3feecddbba0d0559da10a45ad4040faf8e9d5198) | fix | disable component boostrapping when running route extraction | +| [6edb90883](https://github.com/angular/angular-cli/commit/6edb90883733040d77647cf24dea7f53b1b6ceaa) | fix | throw error when using route matchers | + + + + + +# 19.0.7 (2025-01-08) + +### @angular-devkit/architect + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------ | +| [95c22aeff](https://github.com/angular/angular-cli/commit/95c22aeff4560a199416a20c3622301c5c690119) | fix | provide better error when builder is not defined | + +### @angular-devkit/build-angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------- | +| [028652992](https://github.com/angular/angular-cli/commit/028652992f0f9cc6fec5de35be7ecf74ec3947c5) | fix | preserve css type for jasmine.css | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------------------------- | +| [f7522342a](https://github.com/angular/angular-cli/commit/f7522342a8dd99543422629db6dcf1228c5d7279) | fix | add asset tracking to application builder watch files | +| [e973643bf](https://github.com/angular/angular-cli/commit/e973643bfbe47447ca522ca59b07a94fe6c03e0b) | fix | do not mark Babel \_defineProperty helper function as pure | +| [881095eec](https://github.com/angular/angular-cli/commit/881095eec5cdc80fe79de8fdbe05ba985bf8210a) | fix | enable serving files with bundle-like names | +| [db10af0b3](https://github.com/angular/angular-cli/commit/db10af0b3a775619ac71acdd0258cc58e96e948c) | fix | fix incorrect budget calculation | +| [c822f8f15](https://github.com/angular/angular-cli/commit/c822f8f154b75a8b8e48e32953bee7ec2763fd13) | fix | handle relative URLs when constructing new URLs during server fetch | +| [b43c648b0](https://github.com/angular/angular-cli/commit/b43c648b02c181c1d98cd3293d89ad8b131a3f51) | fix | mitigate JS transformer worker execArgv errors | +| [1f2481a4f](https://github.com/angular/angular-cli/commit/1f2481a4f5155368aa571fc6679e3ef8af0ce56f) | fix | pass `define` option defined in application builder to Vite prebundling | +| [c94f568a4](https://github.com/angular/angular-cli/commit/c94f568a412384bb8e4b66928f41b60220c8b7f4) | fix | warn when `@angular/localize/init` is imported directly | + + + + + +# 19.0.6 (2024-12-18) + +### @angular-devkit/build-angular + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------ | +| [db7421231](https://github.com/angular/angular-cli/commit/db7421231c3da7bbbfde72dc35642aaf005fbeca) | fix | jasmine.clock with app builder | + +### @angular/build + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------- | +| [5fbc105ed](https://github.com/angular/angular-cli/commit/5fbc105ed0cb76106916660d99fc53d7480dcbc8) | fix | force HTTP/1.1 in dev-server SSR with SSL | + +### @angular/ssr + +| Commit | Type | Description | +| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------------------------- | +| [2f4df6b2b](https://github.com/angular/angular-cli/commit/2f4df6b2be458b3651df49f3bced923e8df4d547) | fix | correctly resolve pre-transform resources in Vite SSR without AppEngine | +| [0789a9e13](https://github.com/angular/angular-cli/commit/0789a9e133fed4edc29b108630b2cf91e157127e) | fix | ensure correct `Location` header for redirects behind a proxy | @@ -182,14 +530,6 @@ - - -# 19.1.0-next.0 (2024-12-04) - -Added support for TypeScript 5.7 - - - # 19.0.3 (2024-12-04) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 3f395134d519..0642e0b7ff65 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -306,10 +306,10 @@ Our Public API surface is tracked using golden files. You check all golden files by running: ```bash -yarn public-api:check +pnpm public-api:check ``` If you modified the public API, the test will fail. To update the golden files you need to run: ```bash -yarn public-api:update +pnpm public-api:update ``` diff --git a/WORKSPACE b/WORKSPACE index 3fb75fb4f3d0..2cf75f5f52f8 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -2,12 +2,6 @@ workspace(name = "angular_cli") DEFAULT_NODE_VERSION = "18.19.1" -# Workaround for: https://github.com/bazel-contrib/bazel-lib/issues/968. -# Override toolchain for tar on windows. -register_toolchains( - "//tools:windows_tar_system_toolchain", -) - load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive", "http_file") http_archive( @@ -37,9 +31,9 @@ build_bazel_rules_nodejs_dependencies() http_archive( name = "aspect_rules_js", - sha256 = "fbc34d815a0cc52183a1a26732fc0329e26774a51abbe0f26fc9fd2dab6133b4", - strip_prefix = "rules_js-2.1.2", - url = "https://github.com/aspect-build/rules_js/releases/download/v2.1.2/rules_js-v2.1.2.tar.gz", + sha256 = "875b8d01af629dbf626eddc5cf239c9f0da20330f4d99ad956afc961096448dd", + strip_prefix = "rules_js-2.1.3", + url = "https://github.com/aspect-build/rules_js/releases/download/v2.1.3/rules_js-v2.1.3.tar.gz", ) load("@aspect_rules_js//js:repositories.bzl", "rules_js_dependencies") @@ -131,29 +125,25 @@ rules_js_register_toolchains( load("@build_bazel_rules_nodejs//:index.bzl", "yarn_install") +# TODO(devversion): Remove this once `ng_package` is ported over to `rules_js`. yarn_install( name = "npm", data = [ - "//:.yarn/releases/yarn-4.5.0.cjs", - "//:.yarnrc.yml", - "//:patches/@angular+bazel+19.1.0-next.4.patch", - "//:patches/@bazel+concatjs+5.8.1.patch", - "//:patches/@bazel+jasmine+5.8.1.patch", + "//tools/legacy-rnjs:.yarn/patches/@angular-bazel-https-67c38b3c32.patch", + "//tools/legacy-rnjs:.yarn/releases/yarn-4.5.0.cjs", + "//tools/legacy-rnjs:.yarnrc.yml", ], - # Currently disabled due to: - # 1. Missing Windows support currently. - # 2. Incompatibilites with the `ts_library` rule. exports_directories_only = False, - package_json = "//:package.json", - yarn = "//:.yarn/releases/yarn-4.5.0.cjs", - yarn_lock = "//:yarn.lock", + package_json = "//tools/legacy-rnjs:package.json", + yarn = "//tools/legacy-rnjs:.yarn/releases/yarn-4.5.0.cjs", + yarn_lock = "//tools/legacy-rnjs:yarn.lock", ) http_archive( name = "aspect_bazel_lib", - sha256 = "7b39d9f38b82260a8151b18dd4a6219d2d7fc4a0ac313d4f5a630ae6907d205d", - strip_prefix = "bazel-lib-2.10.0", - url = "https://github.com/aspect-build/bazel-lib/releases/download/v2.10.0/bazel-lib-v2.10.0.tar.gz", + sha256 = "57a777c5d4d0b79ad675995ee20fc1d6d2514a1ef3000d98f5c70cf0c09458a3", + strip_prefix = "bazel-lib-2.13.0", + url = "https://github.com/aspect-build/bazel-lib/releases/download/v2.13.0/bazel-lib-v2.13.0.tar.gz", ) load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies", "aspect_bazel_lib_register_toolchains") @@ -162,17 +152,6 @@ aspect_bazel_lib_dependencies() aspect_bazel_lib_register_toolchains() -register_toolchains( - "@npm//@angular/build-tooling/bazel/git-toolchain:git_linux_toolchain", - "@npm//@angular/build-tooling/bazel/git-toolchain:git_macos_x86_toolchain", - "@npm//@angular/build-tooling/bazel/git-toolchain:git_macos_arm64_toolchain", - "@npm//@angular/build-tooling/bazel/git-toolchain:git_windows_toolchain", -) - -load("@npm//@angular/build-tooling/bazel/browsers:browser_repositories.bzl", "browser_repositories") - -browser_repositories() - load("@build_bazel_rules_nodejs//toolchains/esbuild:esbuild_repositories.bzl", "esbuild_repositories") esbuild_repositories( @@ -183,19 +162,49 @@ load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock") npm_translate_lock( name = "npm2", + custom_postinstalls = { + # TODO: Standardize browser management for `rules_js` + "webdriver-manager": "node ./bin/webdriver-manager update --standalone false --gecko false --versions.chrome 106.0.5249.21", + }, data = [ "//:package.json", "//:pnpm-workspace.yaml", + "//modules/testing/builder:package.json", + "//packages/angular/build:package.json", + "//packages/angular/cli:package.json", + "//packages/angular/pwa:package.json", + "//packages/angular/ssr:package.json", + "//packages/angular_devkit/architect:package.json", + "//packages/angular_devkit/architect_cli:package.json", + "//packages/angular_devkit/build_angular:package.json", + "//packages/angular_devkit/build_webpack:package.json", + "//packages/angular_devkit/core:package.json", + "//packages/angular_devkit/schematics:package.json", + "//packages/angular_devkit/schematics_cli:package.json", + "//packages/ngtools/webpack:package.json", + "//packages/schematics/angular:package.json", ], + lifecycle_hooks_envs = { + # TODO: Standardize browser management for `rules_js` + "puppeteer": ["PUPPETEER_DOWNLOAD_PATH=./downloads"], + }, + lifecycle_hooks_execution_requirements = { + # Needed for downloading chromedriver. + # Also `update-config` of webdriver manager would store an absolute path; + # which would then break execution. + "webdriver-manager": ["local"], + }, npmrc = "//:.npmrc", patches = { # Note: Patches not needed as the existing patches are only # for `rules_nodejs` dependencies :) }, pnpm_lock = "//:pnpm-lock.yaml", - update_pnpm_lock = True, + public_hoist_packages = { + # TODO: Remove when https://github.com/verdaccio/verdaccio/commit/bf0e09a509e8e0a74167b0307d129202bc3f40d2 is available. + "@verdaccio/config": [""], + }, verify_node_modules_ignored = "//:.bazelignore", - yarn_lock = "//:yarn.lock", ) load("@npm2//:repositories.bzl", "npm_repositories") @@ -204,11 +213,9 @@ npm_repositories() http_archive( name = "aspect_rules_ts", - patch_args = ["-p1"], - patches = ["//tools:rules_ts_windows.patch"], - sha256 = "cff3137b043ff6bf1a2542fd9691dc762432370cd39eb4bb0756d288de52067d", - strip_prefix = "rules_ts-3.3.2", - url = "https://github.com/aspect-build/rules_ts/releases/download/v3.3.2/rules_ts-v3.3.2.tar.gz", + sha256 = "4263532b2fb4d16f309d80e3597191a1cb2fb69c19e95d91711bd6b97874705e", + strip_prefix = "rules_ts-3.5.0", + url = "https://github.com/aspect-build/rules_ts/releases/download/v3.5.0/rules_ts-v3.5.0.tar.gz", ) load("@aspect_rules_ts//ts:repositories.bzl", "rules_ts_dependencies") @@ -225,3 +232,41 @@ http_file( sha256 = "5a5c46846ecda83e05b9da26f1672ad51c59bce08fed88419850d0e29c993b30", urls = ["https://raw.githubusercontent.com/devversion/rules_angular/4b7532ba2b29078d005899cd15b415593d03cceb/dist/worker.mjs"], ) + +http_archive( + name = "aspect_rules_jasmine", + sha256 = "0d2f9c977842685895020cac721d8cc4f1b37aae15af46128cf619741dc61529", + strip_prefix = "rules_jasmine-2.0.0", + url = "https://github.com/aspect-build/rules_jasmine/releases/download/v2.0.0/rules_jasmine-v2.0.0.tar.gz", +) + +load("@aspect_rules_jasmine//jasmine:dependencies.bzl", "rules_jasmine_dependencies") + +rules_jasmine_dependencies() + +load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository") + +git_repository( + name = "devinfra", + commit = "feae4f916da946bfc789ff5a9203c3536b624277", + remote = "https://github.com/angular/dev-infra.git", +) + +load("@devinfra//bazel:setup_dependencies_1.bzl", "setup_dependencies_1") + +setup_dependencies_1() + +load("@devinfra//bazel:setup_dependencies_2.bzl", "setup_dependencies_2") + +setup_dependencies_2() + +load("@devinfra//bazel/browsers:browser_repositories.bzl", "browser_repositories") + +browser_repositories() + +register_toolchains( + "@devinfra//bazel/git-toolchain:git_linux_toolchain", + "@devinfra//bazel/git-toolchain:git_macos_x86_toolchain", + "@devinfra//bazel/git-toolchain:git_macos_arm64_toolchain", + "@devinfra//bazel/git-toolchain:git_windows_toolchain", +) diff --git a/constants.bzl b/constants.bzl index dbfb920ef457..88315111158f 100644 --- a/constants.bzl +++ b/constants.bzl @@ -3,6 +3,11 @@ RELEASE_ENGINES_NODE = "^18.19.1 || ^20.11.1 || >=22.0.0" RELEASE_ENGINES_NPM = "^6.11.0 || ^7.5.6 || >=8.0.0" RELEASE_ENGINES_YARN = ">= 1.13.0" +NG_PACKAGR_VERSION = "^19.2.0" +ANGULAR_FW_VERSION = "^19.2.0" +ANGULAR_FW_PEER_DEP = "^19.0.0 || ^19.2.0-next.0" +NG_PACKAGR_PEER_DEP = "^19.0.0 || ^19.2.0-next.0" + SNAPSHOT_REPOS = { "@angular/cli": "angular/cli-builds", "@angular/pwa": "angular/angular-pwa-builds", diff --git a/docs/DEVELOPER.md b/docs/DEVELOPER.md index 1bd5f389bef9..36cf7da7fcdf 100644 --- a/docs/DEVELOPER.md +++ b/docs/DEVELOPER.md @@ -5,17 +5,20 @@ To get started locally, follow these instructions: 1. If you haven't done it already, [make a fork of this repo](https://github.com/angular/angular-cli/fork). -1. Clone to your local computer using `git`. -1. Make sure that you have Node `v18.19` or higher installed. See instructions [here](https://nodejs.org/en/download/). -1. Make sure that you have `yarn` installed; see instructions [here](https://yarnpkg.com/lang/en/docs/install/). -1. Run `yarn` (no arguments) from the root of your clone of this project to install dependencies. +2. If you are on Windows, see [the extra steps needed for contributing on Windows](#windows) +3. Clone to your local computer using `git`. +4. Make sure that you have Node `v20.18.1` or higher installed. See instructions [here](https://nodejs.org/en/download/). +5. Install `pnpm`. + - You can install pnpm by running `npm i -g pnpm@9`. + - See detailed instructions [here](https://pnpm.io/installation). +6. Run `pnpm install` from the root of your clone of this project to install dependencies. ## Building and Installing the CLI To make a local build: ```shell -yarn build --local +pnpm build --local ``` This generates a number of tarballs in the `dist/` directory. To actually use @@ -74,9 +77,9 @@ There are two different test suites which can be run locally: ### Unit tests -- Run all tests: `yarn bazel test //packages/...` -- Run a subset of the tests, use the full Bazel target example: `yarn bazel test //packages/schematics/angular:angular_test` -- For a complete list of test targets use the following Bazel query: `yarn bazel query "tests(//packages/...)"` +- Run all tests: `pnpm bazel test //packages/...` +- Run a subset of the tests, use the full Bazel target example: `pnpm bazel test //packages/schematics/angular:angular_test` +- For a complete list of test targets use the following Bazel query: `pnpm bazel query "tests(//packages/...)"` When debugging a specific test, change `describe()` or `it()` to `fdescribe()` and `fit()` to focus execution to just that one test. This will keep the output clean and speed up execution by not running irrelevant tests. @@ -85,9 +88,9 @@ You can find more info about debugging [tests with Bazel in the docs.](https://g ### End to end tests -- For a complete list of test targets use the following Bazel query: `yarn bazel query "tests(//tests/...)"` -- Run a subset of the tests: `yarn bazel test //tests/legacy-cli:e2e_node18 --config=e2e --test_filter="tests/i18n/ivy-localize-*"` -- Use `bazel run` to debug failing tests debugging: `yarn bazel run //tests/legacy-cli:e2e_node18 --config=e2e --test_arg="--glob=tests/basic/aot.ts"` +- For a complete list of test targets use the following Bazel query: `pnpm bazel query "tests(//tests/...)"` +- Run a subset of the tests: `pnpm bazel test //tests/legacy-cli:e2e_node22 --config=e2e --test_filter="tests/i18n/ivy-localize-*"` +- Use `bazel run` to debug failing tests debugging: `JS_BINARY__PATCH_NODE_FS=0 pnpm bazel run //tests/legacy-cli:e2e_node22 --config=e2e --test_arg="--glob=tests/basic/aot.ts"` - Provide additional `e2e_runner` options using `--test_arg`: `--test_arg="--package-manager=yarn"` When running the debug commands, Node will stop and wait for a debugger to attach. @@ -170,3 +173,17 @@ Adding a package to this repository means running two separate commands: For private packages, you will need to add a `"private": true` key to your package.json manually. This will require re-running the template admin script. + +## Windows + +To contribute to Angular using a Windows machine, you need to use the [Windows Linux Subsystem](https://learn.microsoft.com/en-us/windows/wsl/about) (also known as WSL). +Installing WSL on your machine requires a few extra steps, but we believe it's generally useful for developing on Windows: + +1. Run `wsl --install` from Powershell (as administrator). +2. Restart your machine. +3. Enter the WSL environment by running: `wsl`. +4. Continue with the developer guide as if you were on a native Linux system. + +For a more detailed guide, refer to the official Microsoft documentation: [Installing WSL](https://learn.microsoft.com/en-us/windows/wsl/install). + +**Note:** Angular continues to support native Windows development via the `ng` CLI and rigorously tests on Windows for every code change. This recommendation specifically applies to contributing to the Angular codebase itself. diff --git a/docs/process/bazel.md b/docs/process/bazel.md index 4973278c30ba..86542047745e 100644 --- a/docs/process/bazel.md +++ b/docs/process/bazel.md @@ -65,15 +65,7 @@ the reruns of tests that have been marked as `flaky`. The `.bazelrc` includes a config for running tests with remote debugging enabled: ```sh -yarn bazel test --config=debug //packages/angular/cli:angular-cli_test +pnpm bazel test --config=debug //packages/angular/cli:angular-cli_test # Also disable reruns of failing tests that were marked as flaky: -yarn bazel test --config=debug --config=no-sharding //packages/angular/cli:angular-cli_test +pnpm bazel test --config=debug --config=no-sharding //packages/angular/cli:angular-cli_test ``` - -NB: For a few tests, sandbox is required as otherwise the rules_nodejs linker symlinks will conflict -with the yarn workspace symlinks in node_modules. - -## Issues - -1. Yarn workspaces is not compatible with Bazel-managed deps - [(#12736)](https://github.com/angular/angular-cli/issues/12736) diff --git a/docs/process/release.md b/docs/process/release.md index 419d3f05821c..3e89c2900261 100644 --- a/docs/process/release.md +++ b/docs/process/release.md @@ -30,7 +30,7 @@ the access group to now include the next caretakers. To perform this update to t the caretaker can run: ```bash -$ yarn ng-dev caretaker handoff +$ pnpm ng-dev caretaker handoff ``` ## Merging PRs @@ -39,12 +39,12 @@ The list of PRs which are currently ready to merge (approved with passing status be found with [this search](https://github.com/angular/angular-cli/pulls?q=is%3Apr+is%3Aopen+label%3A%22action%3A+merge%22+-is%3Adraft). This list should be checked daily and any ready PRs should be merged. For each PR, check the `target` label to understand where it should be merged to. You can find which branches a specific -PR will be merged into with the `yarn ng-dev pr check-target-branches ` command. +PR will be merged into with the `pnpm ng-dev pr check-target-branches ` command. When ready to merge a PR, run the following command: -``` -yarn ng-dev pr merge +```bash +pnpm ng-dev pr merge ``` ### Maintaining LTS branches @@ -63,31 +63,20 @@ In general, cherry picks for LTS should only be done if it meets one of the crit # Release -Releasing is performed using Angular's unified release tooling. Each week, two releases are expected, `latest` and `next` on npm. For major -and minor releases, some dependencies need to be manually bumped. The following files contain all the version numbers which need to be -manually updated: - -- [`latest-versions.ts`](/packages/schematics/angular/utility/latest-versions.ts#L=18) -- [`latest-versions/package.json`](/packages/schematics/angular/utility/latest-versions/package.json) -- [`@angular/pwa`](/packages/angular/pwa/package.json) -- [`@angular-devkit/build-angular`](/packages/angular_devkit/build_angular/package.json) -- [`@ngtools/webpack`](/packages/ngtools/webpack/package.json) +Releasing is performed using Angular's unified release tooling. Each week, two releases are expected, `latest` and `next` on npm. **DURING a minor OR major CLI release:** -Once FW releases the actual minor/major release (for example: `13.0.0` or `13.1.0`), the above versions should be updated to match (remove -`-rc.0` and `-next.0`). This **must** be done as a separate PR which lands _after_ FW releases (or else CI will fail) but _before_ the CLI -release PR. Releases are built before the PR is sent for review, so any changes after that point won't be included in the release. +Once FW releases the actual minor/major release (for example: `13.0.0` or `13.1.0`), update dependencies with the following: -**AFTER a major CLI release:** +1. Update [`constants.bzl`](../../constants.bzl) so `@angular/core` and `ng-packagr` are using the release version (drop `-next.0`). -Once a major release is complete, peer dependencies in the above files will need to be updated to "undo" the above change and add the -prerelease version segment on `main`. For example, `"@angular/compiler-cli": "^13.0.0-next.0"` should become -`"@angular/compiler-cli": "^13.0.0 || ^13.1.0-next.0"`. This should be done for all the peer deps in the above files. +Merge the above change in a separate PR which lands _after_ FW releases (or else CI will fail) but _before_ the CLI +release PR. Releases are built before the PR is sent for review, so any changes after that point won't be included in the release. **AFTER a minor OR major CLI release:** -`latest-versions.ts` also needs to be updated to use `-next.0` after a major or minor release. However this needs to happen _after_ FW +`constants.bzl` also needs to be updated to use `-next.0` after a major or minor release. However this needs to happen _after_ FW publishes the initial `-next.0` release, which will happen 1 week after the major or minor release. ## Releasing the CLI @@ -99,7 +88,7 @@ After confirming that the above steps have been done or are not necessary, run t navigate the prompts: ```sh -yarn ng-dev release publish +pnpm ng-dev release publish ``` Releases should be done in "reverse semver order", meaning they should follow: @@ -130,8 +119,8 @@ will block the next weekly release. 1. Trigger a release build locally. ```shell nvm install - yarn --frozen-lockfile - yarn -s ng-dev release build + pnpm install --frozen-lockfile + pnpm ng-dev release build ``` 1. Log in to NPM as `angular`. ```shell diff --git a/goldens/BUILD.bazel b/goldens/BUILD.bazel index 3b3283026537..6dbbdd28f25b 100644 --- a/goldens/BUILD.bazel +++ b/goldens/BUILD.bazel @@ -1,6 +1,8 @@ +load("@aspect_bazel_lib//lib:copy_to_bin.bzl", "copy_to_bin") + package(default_visibility = ["//visibility:public"]) -filegroup( +copy_to_bin( name = "public-api", srcs = glob([ "public-api/**/*.md", diff --git a/goldens/public-api/angular/build/index.api.md b/goldens/public-api/angular/build/index.api.md index 9e35cbe6b158..79240b301679 100644 --- a/goldens/public-api/angular/build/index.api.md +++ b/goldens/public-api/angular/build/index.api.md @@ -19,7 +19,7 @@ export interface ApplicationBuilderExtensions { } // @public -export interface ApplicationBuilderOptions { +export type ApplicationBuilderOptions = { allowedCommonJsDependencies?: string[]; aot?: boolean; appShell?: boolean; @@ -69,7 +69,7 @@ export interface ApplicationBuilderOptions { verbose?: boolean; watch?: boolean; webWorkerTsConfig?: string; -} +}; // @public export function buildApplication(options: ApplicationBuilderOptions, context: BuilderContext, extensions?: ApplicationBuilderExtensions): AsyncIterable; @@ -107,7 +107,8 @@ export enum BuildOutputFileType { } // @public -export interface DevServerBuilderOptions { +export type DevServerBuilderOptions = { + allowedHosts?: AllowedHosts; buildTarget: string; headers?: { [key: string]: string; @@ -127,7 +128,7 @@ export interface DevServerBuilderOptions { sslKey?: string; verbose?: boolean; watch?: boolean; -} +}; // @public export interface DevServerBuilderOutput extends BuilderOutput { @@ -153,21 +154,21 @@ export function executeExtractI18nBuilder(options: ExtractI18nBuilderOptions, co export function executeNgPackagrBuilder(options: NgPackagrBuilderOptions, context: BuilderContext): AsyncIterableIterator; // @public -export interface ExtractI18nBuilderOptions { +export type ExtractI18nBuilderOptions = { buildTarget?: string; format?: Format; outFile?: string; outputPath?: string; progress?: boolean; -} +}; // @public -export interface NgPackagrBuilderOptions { +export type NgPackagrBuilderOptions = { poll?: number; project: string; tsConfig?: string; watch?: boolean; -} +}; // (No @packageDocumentation comment for this package) diff --git a/goldens/public-api/angular/ssr/index.api.md b/goldens/public-api/angular/ssr/index.api.md index 57487bea54d5..7811c545000c 100644 --- a/goldens/public-api/angular/ssr/index.api.md +++ b/goldens/public-api/angular/ssr/index.api.md @@ -4,7 +4,10 @@ ```ts +import { DefaultExport } from '@angular/router'; import { EnvironmentProviders } from '@angular/core'; +import { Provider } from '@angular/core'; +import { Type } from '@angular/core'; // @public export class AngularAppEngine { @@ -23,9 +26,12 @@ export enum PrerenderFallback { Server = 0 } -// @public +// @public @deprecated export function provideServerRoutesConfig(routes: ServerRoute[], options?: ServerRoutesConfigOptions): EnvironmentProviders; +// @public +export function provideServerRouting(routes: ServerRoute[], ...features: ServerRoutesFeature[]): EnvironmentProviders; + // @public export enum RenderMode { Client = 1, @@ -63,7 +69,7 @@ export interface ServerRoutePrerenderWithParams extends Omit Promise[]>; } -// @public +// @public @deprecated export interface ServerRoutesConfigOptions { appShellRoute?: string; } @@ -73,6 +79,9 @@ export interface ServerRouteServer extends ServerRouteCommon { renderMode: RenderMode.Server; } +// @public +export function withAppShell(component: Type | (() => Promise | DefaultExport>>)): ServerRoutesFeature; + // (No @packageDocumentation comment for this package) ``` diff --git a/goldens/public-api/angular_devkit/architect/index.api.md b/goldens/public-api/angular_devkit/architect/index.api.md index 7089d2124556..0ae8751719b5 100644 --- a/goldens/public-api/angular_devkit/architect/index.api.md +++ b/goldens/public-api/angular_devkit/architect/index.api.md @@ -25,6 +25,18 @@ export class Architect { scheduleTarget(target: Target, overrides?: json.JsonObject, scheduleOptions?: ScheduleOptions): Promise; } +// @public +export interface Builder { + // (undocumented) + [BuilderSymbol]: true; + // (undocumented) + [BuilderVersionSymbol]: string; + // (undocumented) + __OptionT: OptionT; + // (undocumented) + handler: JobHandler; +} + // @public export interface BuilderContext { addTeardown(teardown: () => Promise | void): void; diff --git a/goldens/public-api/angular_devkit/build_angular/index.api.md b/goldens/public-api/angular_devkit/build_angular/index.api.md index 25256458b6bd..9208d1ad56a1 100644 --- a/goldens/public-api/angular_devkit/build_angular/index.api.md +++ b/goldens/public-api/angular_devkit/build_angular/index.api.md @@ -13,7 +13,6 @@ import { Configuration } from 'webpack'; import { DevServerBuilderOutput } from '@angular/build'; import type http from 'node:http'; import { IndexHtmlTransform } from '@angular/build/private'; -import { json } from '@angular-devkit/core'; import { Observable } from 'rxjs'; import type { Plugin as Plugin_2 } from 'esbuild'; import webpack from 'webpack'; @@ -25,16 +24,16 @@ export { ApplicationBuilderOptions } export type AssetPattern = AssetPatternObject | string; // @public (undocumented) -export interface AssetPatternObject { +export type AssetPatternObject = { followSymlinks?: boolean; glob: string; ignore?: string[]; input: string; output?: string; -} +}; // @public -export interface BrowserBuilderOptions { +export type BrowserBuilderOptions = { allowedCommonJsDependencies?: string[]; aot?: boolean; assets?: AssetPattern[]; @@ -75,7 +74,7 @@ export interface BrowserBuilderOptions { verbose?: boolean; watch?: boolean; webWorkerTsConfig?: string; -} +}; // @public export type BrowserBuilderOutput = BuilderOutput & { @@ -89,7 +88,7 @@ export type BrowserBuilderOutput = BuilderOutput & { }; // @public (undocumented) -export interface Budget { +export type Budget = { baseline?: string; error?: string; maximumError?: string; @@ -99,7 +98,7 @@ export interface Budget { name?: string; type: Type; warning?: string; -} +}; export { buildApplication } @@ -114,7 +113,7 @@ export enum CrossOrigin { } // @public -export interface DevServerBuilderOptions { +export type DevServerBuilderOptions = { allowedHosts?: string[]; buildTarget: string; disableHostCheck?: boolean; @@ -138,7 +137,7 @@ export interface DevServerBuilderOptions { sslKey?: string; verbose?: boolean; watch?: boolean; -} +}; export { DevServerBuilderOutput } @@ -189,28 +188,25 @@ export function executeSSRDevServerBuilder(options: SSRDevServerBuilderOptions, export type ExecutionTransformer = (input: T) => T | Promise; // @public -export interface ExtractI18nBuilderOptions { +export type ExtractI18nBuilderOptions = { buildTarget?: string; format?: Format; outFile?: string; outputPath?: string; progress?: boolean; -} +}; // @public (undocumented) -export interface FileReplacement { - // (undocumented) +export type FileReplacement = { replace?: string; - // (undocumented) replaceWith?: string; - // (undocumented) src?: string; - // (undocumented) with?: string; -} +}; // @public -export interface KarmaBuilderOptions { +export type KarmaBuilderOptions = { + aot?: boolean; assets?: AssetPattern_2[]; browsers?: Browsers; builderMode?: BuilderMode; @@ -234,7 +230,7 @@ export interface KarmaBuilderOptions { tsConfig: string; watch?: boolean; webWorkerTsConfig?: string; -} +}; // @public (undocumented) export type KarmaConfigOptions = ConfigOptions & { @@ -243,19 +239,19 @@ export type KarmaConfigOptions = ConfigOptions & { }; // @public -export interface NgPackagrBuilderOptions { +export type NgPackagrBuilderOptions = { poll?: number; project: string; tsConfig?: string; watch?: boolean; -} +}; // @public (undocumented) -export interface OptimizationObject { +export type OptimizationObject = { fonts?: FontsUnion; scripts?: boolean; styles?: StylesUnion; -} +}; // @public export type OptimizationUnion = boolean | OptimizationObject; @@ -273,7 +269,7 @@ export enum OutputHashing { } // @public -export interface ProtractorBuilderOptions { +export type ProtractorBuilderOptions = { baseUrl?: string; devServerTarget?: string; grep?: string; @@ -284,10 +280,10 @@ export interface ProtractorBuilderOptions { specs?: string[]; suite?: string; webdriverUpdate?: boolean; -} +}; // @public (undocumented) -export interface ServerBuilderOptions { +export type ServerBuilderOptions = { assets?: AssetPattern_3[]; buildOptimizer?: boolean; deleteOutputPath?: boolean; @@ -315,7 +311,7 @@ export interface ServerBuilderOptions { vendorChunk?: boolean; verbose?: boolean; watch?: boolean; -} +}; // @public export type ServerBuilderOutput = BuilderOutput & { @@ -328,18 +324,18 @@ export type ServerBuilderOutput = BuilderOutput & { }; // @public (undocumented) -export interface SourceMapObject { +export type SourceMapObject = { hidden?: boolean; scripts?: boolean; styles?: boolean; vendor?: boolean; -} +}; // @public export type SourceMapUnion = boolean | SourceMapObject; // @public (undocumented) -export type SSRDevServerBuilderOptions = Schema & json.JsonObject; +export type SSRDevServerBuilderOptions = Schema; // @public (undocumented) export type SSRDevServerBuilderOutput = BuilderOutput & { @@ -348,9 +344,9 @@ export type SSRDevServerBuilderOutput = BuilderOutput & { }; // @public -export interface StylePreprocessorOptions { +export type StylePreprocessorOptions = { includePaths?: string[]; -} +}; // @public export enum Type { diff --git a/goldens/public-api/angular_devkit/core/node/testing/index.api.md b/goldens/public-api/angular_devkit/core/node/testing/index.api.md index 1200d6b49f4e..116019d266a1 100644 --- a/goldens/public-api/angular_devkit/core/node/testing/index.api.md +++ b/goldens/public-api/angular_devkit/core/node/testing/index.api.md @@ -4,7 +4,7 @@ ```ts -import * as fs from 'fs'; +import * as fs from 'node:fs'; import { Observable } from 'rxjs'; // @public diff --git a/goldens/public-api/angular_devkit/schematics/index.api.md b/goldens/public-api/angular_devkit/schematics/index.api.md index de17a0462162..add7132d138f 100644 --- a/goldens/public-api/angular_devkit/schematics/index.api.md +++ b/goldens/public-api/angular_devkit/schematics/index.api.md @@ -13,7 +13,7 @@ import { PathFragment } from '@angular-devkit/core'; import { schema } from '@angular-devkit/core'; import { strings } from '@angular-devkit/core'; import { Subject } from 'rxjs'; -import { Url } from 'url'; +import { Url } from 'node:url'; import { virtualFs } from '@angular-devkit/core'; // @public (undocumented) @@ -204,9 +204,9 @@ export interface CreateFileAction extends ActionBase { // @public (undocumented) export class DelegateTree implements Tree_2 { - constructor(_other: Tree_2); // (undocumented) - [x: symbol]: () => this; + [TreeSymbol]: () => this; + constructor(_other: Tree_2); // (undocumented) get actions(): Action[]; // (undocumented) @@ -518,9 +518,9 @@ export class HostSink extends SimpleSinkBase { // @public (undocumented) export class HostTree implements Tree_2 { - constructor(_backend?: virtualFs.ReadonlyHost<{}>); // (undocumented) - [x: symbol]: () => this; + [TreeSymbol]: () => this; + constructor(_backend?: virtualFs.ReadonlyHost<{}>); // (undocumented) get actions(): Action[]; // (undocumented) @@ -722,7 +722,7 @@ interface RequiredWorkflowExecutionContext { } // @public (undocumented) -export type Rule = (tree: Tree_2, context: SchematicContext) => Tree_2 | Observable | Rule | Promise | void; +export type Rule = (tree: Tree_2, context: SchematicContext) => Tree_2 | Observable | Rule | Promise | void; // @public export type RuleFactory = (options: T) => Rule; diff --git a/goldens/public-api/angular_devkit/schematics/testing/index.api.md b/goldens/public-api/angular_devkit/schematics/testing/index.api.md index 579b1ccdb6bf..abf89972c862 100644 --- a/goldens/public-api/angular_devkit/schematics/testing/index.api.md +++ b/goldens/public-api/angular_devkit/schematics/testing/index.api.md @@ -9,7 +9,7 @@ import { logging } from '@angular-devkit/core'; import { Observable } from 'rxjs'; import { Path } from '@angular-devkit/core'; import { PathFragment } from '@angular-devkit/core'; -import { Url } from 'url'; +import { Url } from 'node:url'; // @public (undocumented) export class SchematicTestRunner { diff --git a/goldens/public-api/angular_devkit/schematics/tools/index.api.md b/goldens/public-api/angular_devkit/schematics/tools/index.api.md index d53e3fe77640..6a32d88e9ec0 100644 --- a/goldens/public-api/angular_devkit/schematics/tools/index.api.md +++ b/goldens/public-api/angular_devkit/schematics/tools/index.api.md @@ -12,9 +12,9 @@ import { Observable } from 'rxjs'; import { Path } from '@angular-devkit/core'; import { PathFragment } from '@angular-devkit/core'; import { schema } from '@angular-devkit/core'; -import { Url } from 'url'; +import { Subject } from 'rxjs'; +import { Url } from 'node:url'; import { virtualFs } from '@angular-devkit/core'; -import { workflow } from '@angular-devkit/schematics'; // @public (undocumented) export class CollectionCannotBeResolvedException extends BaseException { diff --git a/goldens/public-api/manage.js b/goldens/public-api/manage.js index b74ff9c01cc5..569f2a6bd1e3 100644 --- a/goldens/public-api/manage.js +++ b/goldens/public-api/manage.js @@ -7,7 +7,7 @@ const argv = parser(process.argv.slice(2)); const USER_COMMAND = argv._[0]; // The shell command to query for all Public API guard tests. const BAZEL_PUBLIC_API_TARGET_QUERY_CMD = - `yarn bazel query --output label 'kind(nodejs_test, ...) intersect attr("tags", "api_guard", ...)'` + `pnpm -s bazel query --output label 'kind(nodejs_test, ...) intersect attr("tags", "api_guard", ...)'` // Bazel targets for testing Public API goldens process.stdout.write('Gathering all Public API targets'); const ALL_PUBLIC_API_TESTS = exec(BAZEL_PUBLIC_API_TARGET_QUERY_CMD, {silent: true}) @@ -25,7 +25,7 @@ const ALL_PUBLIC_API_ACCEPTS = ALL_PUBLIC_API_TESTS.map(test => `${test}.accept` function runBazelCommandOnTargets(command, targets, present) { for (const target of targets) { process.stdout.write(`${present}: ${target}`); - const commandResult = exec(`yarn bazel ${command} ${target}`, {silent: true}); + const commandResult = exec(`pnpm -s bazel ${command} ${target}`, {silent: true}); process.stdout.clearLine(); process.stdout.cursorTo(0); if (commandResult.code) { @@ -51,4 +51,4 @@ switch (USER_COMMAND) { console.warn(); console.warn(`Run this script with either "accept" and "test"`); break; -} \ No newline at end of file +} diff --git a/modules/testing/builder/BUILD.bazel b/modules/testing/builder/BUILD.bazel index 1e0cbcbf33cb..6983baca7fda 100644 --- a/modules/testing/builder/BUILD.bazel +++ b/modules/testing/builder/BUILD.bazel @@ -1,8 +1,10 @@ -load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") -load("//tools:interop.bzl", "ts_project") +load("@npm2//:defs.bzl", "npm_link_all_packages") +load("//tools:defaults2.bzl", "jasmine_test", "ts_project") package(default_visibility = ["//visibility:public"]) +npm_link_all_packages() + ts_project( name = "builder", testonly = True, @@ -14,14 +16,16 @@ ts_project( "src/**/*_spec.ts", ], ), - data = glob(["projects/**/*"]), + data = [ + # Needed at runtime by some builder tests relying on SSR being + # resolvable in the test project. + ":node_modules/@angular/ssr", + ] + glob(["projects/**/*"]), deps = [ - "//:root_modules/rxjs", - "//packages/angular_devkit/architect:architect_rjs", - "//packages/angular_devkit/architect/node:node_rjs", - "//packages/angular_devkit/architect/testing:testing_rjs", - "//packages/angular_devkit/core:core_rjs", - "//packages/angular_devkit/core/node:node_rjs", + ":node_modules/@angular-devkit/architect", + ":node_modules/@angular-devkit/core", + "//:node_modules/@types/node", + "//:node_modules/rxjs", ], ) @@ -34,12 +38,12 @@ ts_project( ], ), deps = [ - ":builder_rjs", - "//packages/angular_devkit/architect/testing:testing_rjs", + ":builder", + ":node_modules/@angular-devkit/architect", ], ) -jasmine_node_test( +jasmine_test( name = "unit_test", - srcs = [":unit_test_lib"], + data = [":unit_test_lib"], ) diff --git a/modules/testing/builder/package.json b/modules/testing/builder/package.json new file mode 100644 index 000000000000..d315fc454ede --- /dev/null +++ b/modules/testing/builder/package.json @@ -0,0 +1,8 @@ +{ + "devDependencies": { + "@angular-devkit/core": "workspace:*", + "@angular-devkit/architect": "workspace:*", + "@angular/ssr": "workspace:*", + "@angular-devkit/build-angular": "workspace:*" + } +} diff --git a/modules/testing/builder/projects/hello-world-app/src/tsconfig.server.json b/modules/testing/builder/projects/hello-world-app/src/tsconfig.server.json index 3b71d541f537..9a492c781eb1 100644 --- a/modules/testing/builder/projects/hello-world-app/src/tsconfig.server.json +++ b/modules/testing/builder/projects/hello-world-app/src/tsconfig.server.json @@ -3,7 +3,7 @@ "compilerOptions": { "outDir": "../dist-server", "baseUrl": "./", - "types": ["@angular/localize"] + "types": ["@angular/localize", "node"] }, "files": [ "main.server.ts" diff --git a/modules/testing/builder/src/jasmine-helpers.ts b/modules/testing/builder/src/jasmine-helpers.ts index 269cbc2396ed..b204d507bab8 100644 --- a/modules/testing/builder/src/jasmine-helpers.ts +++ b/modules/testing/builder/src/jasmine-helpers.ts @@ -8,7 +8,7 @@ import { BuilderHandlerFn } from '@angular-devkit/architect'; import { json } from '@angular-devkit/core'; -import { readFileSync } from 'fs'; +import { readFileSync } from 'node:fs'; import { concatMap, count, firstValueFrom, take, timeout } from 'rxjs'; import { BuilderHarness, BuilderHarnessExecutionResult } from './builder-harness'; import { host } from './test-utils'; diff --git a/modules/testing/builder/src/test-utils.ts b/modules/testing/builder/src/test-utils.ts index 9e331c1e5843..126af073b726 100644 --- a/modules/testing/builder/src/test-utils.ts +++ b/modules/testing/builder/src/test-utils.ts @@ -21,6 +21,7 @@ import { virtualFs, workspaces, } from '@angular-devkit/core'; +import path from 'node:path'; import { firstValueFrom } from 'rxjs'; // Default timeout for large specs is 2.5 minutes. @@ -42,6 +43,13 @@ export async function createArchitect(workspaceRoot: Path) { registry.addPostTransform(schema.transforms.addUndefinedDefaults); const workspaceSysPath = getSystemPath(workspaceRoot); + // The download path is relative (set from Starlark), so before potentially + // changing directories, or executing inside a temporary directory, ensure + // the path is absolute. + if (process.env['PUPPETEER_DOWNLOAD_PATH']) { + process.env.PUPPETEER_DOWNLOAD_PATH = path.resolve(process.env['PUPPETEER_DOWNLOAD_PATH']); + } + const { workspace } = await workspaces.readWorkspace( workspaceSysPath, workspaces.createWorkspaceHost(host), diff --git a/package.json b/package.json index 4ae7970549b4..d9da4db1e050 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@angular/devkit-repo", - "version": "19.1.0-next.2", + "version": "19.2.5", "private": true, "description": "Software Development Kit for Angular", "keywords": [ @@ -12,27 +12,32 @@ ], "scripts": { "admin": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only ./scripts/devkit-admin.mjs", + "bazel": "bazelisk", "test": "bazel test //packages/...", - "build": "yarn admin build", + "build": "pnpm -s admin build", "lint": "eslint --cache --max-warnings=0 \"**/*.@(ts|mts|cts)\"", - "templates": "yarn admin templates", - "validate": "yarn admin validate", - "postinstall": "patch-package && yarn webdriver-update && yarn husky", + "templates": "pnpm -s admin templates", + "validate": "pnpm -s admin validate", + "postinstall": "pnpm -s webdriver-update && husky", "//webdriver-update-README": "ChromeDriver version must match Puppeteer Chromium version, see https://github.com/GoogleChrome/puppeteer/releases http://chromedriver.chromium.org/downloads", "webdriver-update": "webdriver-manager update --standalone false --gecko false --versions.chrome 106.0.5249.21", "public-api:check": "node goldens/public-api/manage.js test", "ng-dev": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only node_modules/@angular/ng-dev/bundles/cli.mjs", "public-api:update": "node goldens/public-api/manage.js accept", - "ts-circular-deps": "yarn ng-dev ts-circular-deps --config ./scripts/circular-deps-test.conf.mjs", - "check-tooling-setup": "tsc --project .ng-dev/tsconfig.json" + "ts-circular-deps": "pnpm -s ng-dev ts-circular-deps --config ./scripts/circular-deps-test.conf.mjs", + "check-tooling-setup": "tsc --project .ng-dev/tsconfig.json", + "diff-release-package": "node --no-warnings=ExperimentalWarning --loader ts-node/esm/transpile-only scripts/diff-release-package.mts" }, "repository": { "type": "git", "url": "https://github.com/angular/angular-cli.git" }, + "packageManager": "pnpm@9.15.6", "engines": { "node": "^18.19.1 || ^20.11.1 || >=22.0.0", - "npm": "Please use yarn instead of NPM to install dependencies" + "npm": "Please use pnpm instead of NPM to install dependencies", + "yarn": "Please use pnpm instead of Yarn to install dependencies", + "pnpm": "^9.15.6" }, "author": "Angular Authors", "license": "MIT", @@ -42,47 +47,42 @@ "homepage": "https://github.com/angular/angular-cli", "devDependencies": { "@ampproject/remapping": "2.3.0", - "@angular/animations": "19.1.0-rc.0", - "@angular/bazel": "https://github.com/angular/bazel-builds.git#169e71f64fa706648c60d77abb8d4cab1ca22f55", - "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#67627d22c2fef6e3cb128f65723e19eb35e02eaa", - "@angular/cdk": "19.1.0-next.3", - "@angular/common": "19.1.0-rc.0", - "@angular/compiler": "19.1.0-rc.0", - "@angular/compiler-cli": "19.1.0-rc.0", - "@angular/core": "19.1.0-rc.0", - "@angular/forms": "19.1.0-rc.0", - "@angular/localize": "19.1.0-rc.0", - "@angular/material": "19.1.0-next.3", - "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#ff93dd98d8d10bfab0f94495fe631485a6a772e1", - "@angular/platform-browser": "19.1.0-rc.0", - "@angular/platform-browser-dynamic": "19.1.0-rc.0", - "@angular/platform-server": "19.1.0-rc.0", - "@angular/router": "19.1.0-rc.0", - "@angular/service-worker": "19.1.0-rc.0", - "@babel/core": "7.26.0", - "@babel/generator": "7.26.3", + "@angular/animations": "19.2.0-rc.0", + "@angular/build-tooling": "https://github.com/angular/dev-infra-private-build-tooling-builds.git#d4727212a9d0f7eb63ae3116d73c769d9bd0bdc1", + "@angular/cdk": "19.2.0-rc.0", + "@angular/common": "19.2.0-rc.0", + "@angular/compiler": "19.2.0-rc.0", + "@angular/compiler-cli": "19.2.0-rc.0", + "@angular/core": "19.2.0-rc.0", + "@angular/forms": "19.2.0-rc.0", + "@angular/localize": "19.2.0-rc.0", + "@angular/material": "19.2.0-rc.0", + "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#252589f7bc8fe6ca13b31e02d506ec52e826cdd2", + "@angular/platform-browser": "19.2.0-rc.0", + "@angular/platform-browser-dynamic": "19.2.0-rc.0", + "@angular/platform-server": "19.2.0-rc.0", + "@angular/router": "19.2.0-rc.0", + "@angular/service-worker": "19.2.0-rc.0", + "@babel/core": "7.26.10", + "@babel/generator": "7.26.10", "@babel/helper-annotate-as-pure": "7.25.9", "@babel/helper-split-export-declaration": "7.24.7", "@babel/plugin-syntax-import-attributes": "7.26.0", - "@babel/plugin-transform-async-generator-functions": "7.25.9", + "@babel/plugin-transform-async-generator-functions": "7.26.8", "@babel/plugin-transform-async-to-generator": "7.25.9", - "@babel/plugin-transform-runtime": "7.25.9", - "@babel/preset-env": "7.26.0", - "@babel/runtime": "7.26.0", + "@babel/plugin-transform-runtime": "7.26.10", + "@babel/preset-env": "7.26.9", + "@babel/runtime": "7.26.10", "@bazel/bazelisk": "1.25.0", - "@bazel/buildifier": "7.3.1", - "@bazel/concatjs": "5.8.1", - "@bazel/jasmine": "5.8.1", - "@bazel/rollup": "^5.8.1", - "@bazel/runfiles": "^5.8.1", + "@bazel/buildifier": "8.0.3", "@discoveryjs/json-ext": "0.6.3", - "@inquirer/confirm": "5.1.1", - "@inquirer/prompts": "7.2.1", + "@inquirer/prompts": "7.3.2", "@listr2/prompt-adapter-inquirer": "2.0.18", "@rollup/plugin-alias": "^5.1.1", "@rollup/plugin-commonjs": "^28.0.0", + "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^13.0.5", - "@stylistic/eslint-plugin": "^2.8.0", + "@stylistic/eslint-plugin": "^3.0.0", "@types/babel__core": "7.20.5", "@types/babel__generator": "^7.6.8", "@types/browser-sync": "^2.27.0", @@ -90,11 +90,12 @@ "@types/http-proxy": "^1.17.4", "@types/ini": "^4.0.0", "@types/jasmine": "~5.1.0", + "@types/jasmine-reporters": "^2", "@types/karma": "^6.3.0", "@types/less": "^3.0.3", "@types/loader-utils": "^2.0.0", "@types/lodash": "^4.17.0", - "@types/node": "^18.13.0", + "@types/node": "18.19.76", "@types/npm-package-arg": "^6.1.0", "@types/pacote": "^11.1.3", "@types/picomatch": "^3.0.0", @@ -106,10 +107,10 @@ "@types/yargs": "^17.0.20", "@types/yargs-parser": "^21.0.0", "@types/yarnpkg__lockfile": "^1.1.5", - "@typescript-eslint/eslint-plugin": "8.19.1", - "@typescript-eslint/parser": "8.19.1", + "@typescript-eslint/eslint-plugin": "8.24.1", + "@typescript-eslint/parser": "8.24.1", "@vitejs/plugin-basic-ssl": "1.2.0", - "@web/test-runner": "^0.19.0", + "@web/test-runner": "^0.20.0", "@yarnpkg/lockfile": "1.1.0", "ajv": "8.17.1", "ajv-formats": "3.0.1", @@ -124,10 +125,10 @@ "copy-webpack-plugin": "12.0.2", "css-loader": "7.1.2", "debug": "^4.1.1", - "esbuild": "0.24.2", - "esbuild-wasm": "0.24.2", + "esbuild": "0.25.1", + "esbuild-wasm": "0.25.1", "eslint": "8.57.0", - "eslint-config-prettier": "9.1.0", + "eslint-config-prettier": "10.0.1", "eslint-plugin-header": "3.1.1", "eslint-plugin-import": "2.31.0", "express": "4.21.2", @@ -138,8 +139,9 @@ "husky": "9.1.7", "ini": "5.0.0", "istanbul-lib-instrument": "6.0.3", - "jasmine": "^5.0.0", - "jasmine-core": "~5.5.0", + "jasmine": "~5.6.0", + "jasmine-core": "~5.6.0", + "jasmine-reporters": "^2.5.2", "jasmine-spec-reporter": "~7.0.0", "jsonc-parser": "3.3.1", "karma": "~6.4.0", @@ -148,59 +150,58 @@ "karma-jasmine": "~5.1.0", "karma-jasmine-html-reporter": "~2.1.0", "karma-source-map-support": "1.4.0", - "less": "4.2.1", + "less": "4.2.2", "less-loader": "12.2.0", "license-webpack-plugin": "4.0.2", "listr2": "8.2.5", - "lmdb": "3.2.2", + "lmdb": "3.2.6", "loader-utils": "3.3.1", "lodash": "^4.17.21", "magic-string": "0.30.17", "mini-css-extract-plugin": "2.9.2", - "mrmime": "2.0.0", - "ng-packagr": "19.1.0-next.3", - "npm": "^11.0.0", - "npm-package-arg": "12.0.1", + "mrmime": "2.0.1", + "ng-packagr": "19.2.0", + "npm": "~10.9.2", + "npm-package-arg": "12.0.2", "npm-pick-manifest": "10.0.0", "open": "10.1.0", "ora": "5.4.1", "pacote": "20.0.0", "parse5-html-rewriting-stream": "7.0.0", - "patch-package": "^8.0.0", "picomatch": "4.0.2", "piscina": "4.8.0", - "postcss": "8.4.49", + "postcss": "8.5.2", "postcss-loader": "8.1.1", "prettier": "^3.0.0", "protractor": "~7.0.0", "puppeteer": "18.2.1", - "quicktype-core": "23.0.170", + "quicktype-core": "23.0.171", "resolve-url-loader": "5.0.0", - "rollup": "4.30.1", + "rollup": "4.34.8", "rollup-license-plugin": "~3.0.1", "rollup-plugin-sourcemaps": "^0.6.0", "rxjs": "7.8.1", - "sass": "1.83.1", - "sass-loader": "16.0.4", - "semver": "7.6.3", + "sass": "1.85.0", + "sass-loader": "16.0.5", + "semver": "7.7.1", "shelljs": "^0.8.5", "source-map": "0.7.4", "source-map-loader": "5.0.0", "source-map-support": "0.5.21", "symbol-observable": "4.0.0", "tar": "^7.0.0", - "terser": "5.37.0", + "terser": "5.39.0", "tree-kill": "1.2.2", "ts-node": "^10.9.1", "tslib": "2.8.1", - "typescript": "5.7.2", - "undici": "7.2.0", + "typescript": "5.8.1-rc", + "undici": "6.21.1", "unenv": "^1.10.0", "verdaccio": "6.0.5", "verdaccio-auth-memory": "^10.0.0", - "vite": "6.0.7", + "vite": "6.2.3", "watchpack": "2.4.2", - "webpack": "5.97.1", + "webpack": "5.98.0", "webpack-dev-middleware": "7.4.2", "webpack-dev-server": "5.2.0", "webpack-merge": "6.0.1", @@ -218,9 +219,27 @@ } }, "pnpm": { - "onlyBuiltDependencies": [] + "onlyBuiltDependencies": [ + "puppeteer", + "webdriver-manager" + ], + "overrides": { + "@angular/build": "workspace:*" + }, + "packageExtensions": { + "grpc-gcp": { + "peerDependencies": { + "protobufjs": "*" + } + }, + "@angular/platform-server": { + "peerDependencies": { + "rxjs": "*" + } + } + } }, "resolutions": { - "typescript": "5.7.2" + "typescript": "5.8.1-rc" } } diff --git a/packages/angular/build/BUILD.bazel b/packages/angular/build/BUILD.bazel index ba11626610e7..83d0c0036863 100644 --- a/packages/angular/build/BUILD.bazel +++ b/packages/angular/build/BUILD.bazel @@ -1,13 +1,14 @@ -load("@npm//@angular/build-tooling/bazel/api-golden:index.bzl", "api_golden_test_npm_package") -load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") -load("//tools:defaults.bzl", "pkg_npm") -load("//tools:interop.bzl", "ts_project") +load("@devinfra//bazel/api-golden:index_rjs.bzl", "api_golden_test_npm_package") +load("@npm2//:defs.bzl", "npm_link_all_packages") +load("//tools:defaults2.bzl", "copy_to_bin", "jasmine_test", "npm_package", "ts_project") load("//tools:ts_json_schema.bzl", "ts_json_schema") licenses(["notice"]) package(default_visibility = ["//visibility:public"]) +npm_link_all_packages() + ts_json_schema( name = "application_schema", src = "src/builders/application/schema.json", @@ -23,11 +24,33 @@ ts_json_schema( src = "src/builders/extract-i18n/schema.json", ) +ts_json_schema( + name = "ng_karma_schema", + src = "src/builders/karma/schema.json", +) + ts_json_schema( name = "ng_packagr_schema", src = "src/builders/ng-packagr/schema.json", ) +copy_to_bin( + name = "schemas", + srcs = glob(["**/schema.json"]), +) + +RUNTIME_ASSETS = glob( + include = [ + "src/**/schema.json", + "src/**/*.js", + "src/**/*.mjs", + "src/**/*.html", + ], +) + [ + "builders.json", + "package.json", +] + ts_project( name = "build", srcs = glob( @@ -45,69 +68,65 @@ ts_project( "//packages/angular/build:src/builders/application/schema.ts", "//packages/angular/build:src/builders/dev-server/schema.ts", "//packages/angular/build:src/builders/extract-i18n/schema.ts", + "//packages/angular/build:src/builders/karma/schema.ts", "//packages/angular/build:src/builders/ng-packagr/schema.ts", ], - data = glob( - include = [ - "src/**/schema.json", - "src/**/*.js", - "src/**/*.mjs", - "src/**/*.html", - ], - ) + [ - "builders.json", - "package.json", - ], - interop_deps = [ - "//packages/angular/ssr", - "//packages/angular/ssr/node", - "//packages/angular_devkit/architect", - ], + data = RUNTIME_ASSETS, + # TODO: Fix strict_deps failure + ignore_strict_deps = True, module_name = "@angular/build", deps = [ - "//:root_modules/@ampproject/remapping", - "//:root_modules/@angular/common", - "//:root_modules/@angular/compiler", - "//:root_modules/@angular/compiler-cli", - "//:root_modules/@angular/core", - "//:root_modules/@angular/localize", - "//:root_modules/@angular/platform-server", - "//:root_modules/@angular/service-worker", - "//:root_modules/@babel/core", - "//:root_modules/@babel/helper-annotate-as-pure", - "//:root_modules/@babel/helper-split-export-declaration", - "//:root_modules/@babel/plugin-syntax-import-attributes", - "//:root_modules/@inquirer/confirm", - "//:root_modules/@types/babel__core", - "//:root_modules/@types/less", - "//:root_modules/@types/node", - "//:root_modules/@types/picomatch", - "//:root_modules/@types/semver", - "//:root_modules/@types/watchpack", - "//:root_modules/@vitejs/plugin-basic-ssl", - "//:root_modules/beasties", - "//:root_modules/browserslist", - "//:root_modules/esbuild", - "//:root_modules/esbuild-wasm", - "//:root_modules/fast-glob", - "//:root_modules/https-proxy-agent", - "//:root_modules/jsonc-parser", - "//:root_modules/listr2", - "//:root_modules/lmdb", - "//:root_modules/magic-string", - "//:root_modules/mrmime", - "//:root_modules/ng-packagr", - "//:root_modules/parse5-html-rewriting-stream", - "//:root_modules/picomatch", - "//:root_modules/piscina", - "//:root_modules/postcss", - "//:root_modules/rollup", - "//:root_modules/sass", - "//:root_modules/semver", - "//:root_modules/tslib", - "//:root_modules/typescript", - "//:root_modules/vite", - "//:root_modules/watchpack", + ":node_modules/@angular-devkit/architect", + ":node_modules/@angular-devkit/core", + ":node_modules/@angular/ssr", + ":node_modules/@inquirer/confirm", + ":node_modules/@vitejs/plugin-basic-ssl", + ":node_modules/vite", + "//:node_modules/@ampproject/remapping", + "//:node_modules/@angular/common", + "//:node_modules/@angular/compiler", + "//:node_modules/@angular/compiler-cli", + "//:node_modules/@angular/core", + "//:node_modules/@angular/localize", + "//:node_modules/@angular/platform-server", + "//:node_modules/@angular/service-worker", + "//:node_modules/@babel/core", + "//:node_modules/@babel/helper-annotate-as-pure", + "//:node_modules/@babel/helper-split-export-declaration", + "//:node_modules/@babel/plugin-syntax-import-attributes", + "//:node_modules/@types/babel__core", + "//:node_modules/@types/karma", + "//:node_modules/@types/less", + "//:node_modules/@types/node", + "//:node_modules/@types/picomatch", + "//:node_modules/@types/semver", + "//:node_modules/@types/watchpack", + "//:node_modules/beasties", + "//:node_modules/browserslist", + "//:node_modules/esbuild", + "//:node_modules/esbuild-wasm", + "//:node_modules/fast-glob", + "//:node_modules/https-proxy-agent", + "//:node_modules/istanbul-lib-instrument", + "//:node_modules/jsonc-parser", + "//:node_modules/karma", + "//:node_modules/less", + "//:node_modules/listr2", + "//:node_modules/lmdb", + "//:node_modules/magic-string", + "//:node_modules/mrmime", + "//:node_modules/ng-packagr", + "//:node_modules/parse5-html-rewriting-stream", + "//:node_modules/picomatch", + "//:node_modules/piscina", + "//:node_modules/postcss", + "//:node_modules/rollup", + "//:node_modules/sass", + "//:node_modules/semver", + "//:node_modules/source-map-support", + "//:node_modules/tslib", + "//:node_modules/typescript", + "//:node_modules/watchpack", ], ) @@ -118,51 +137,49 @@ ts_project( include = ["src/**/*_spec.ts"], exclude = ["src/builders/**/tests/**"], ), + # TODO: Fix strict_deps failure + ignore_strict_deps = True, deps = [ - ":build_rjs", - "//:root_modules/@angular/compiler-cli", - "//:root_modules/@babel/core", - "//:root_modules/@types/jasmine", - "//:root_modules/prettier", - "//:root_modules/typescript", - "//packages/angular/build/private:private_rjs", - "//packages/angular_devkit/core:core_rjs", - "//packages/angular_devkit/core/node:node_rjs", + ":build", + "//:node_modules/@angular/compiler-cli", + "//:node_modules/@babel/core", + "//:node_modules/@types/jasmine", + "//:node_modules/prettier", + "//:node_modules/typescript", + "//packages/angular/build/private", ], ) -jasmine_node_test( +jasmine_test( name = "unit_tests", - deps = [":unit_test_lib"], + data = [":unit_test_lib"], ) ts_project( name = "application_integration_test_lib", testonly = True, srcs = glob(include = ["src/builders/application/tests/**/*.ts"]), + # TODO: Fix strict_deps failure + ignore_strict_deps = True, deps = [ - ":build_rjs", - "//packages/angular/build/private:private_rjs", - "//modules/testing/builder:builder_rjs", - "//packages/angular_devkit/architect:architect_rjs", - "//packages/angular_devkit/architect/node:node_rjs", - "//packages/angular_devkit/architect/testing:testing_rjs", - "//packages/angular_devkit/core:core_rjs", - "//packages/angular_devkit/core/node:node_rjs", + ":build", + "//packages/angular/build/private", + "//modules/testing/builder", + ":node_modules/@angular-devkit/architect", # Base dependencies for the application in hello-world-app. - "//:root_modules/@angular/common", - "//:root_modules/@angular/compiler", - "//:root_modules/@angular/compiler-cli", - "//:root_modules/@angular/core", - "//:root_modules/@angular/platform-browser", - "//:root_modules/@angular/platform-browser-dynamic", - "//:root_modules/@angular/router", - "//:root_modules/rxjs", - "//:root_modules/tslib", - "//:root_modules/typescript", - "//:root_modules/zone.js", - "//:root_modules/buffer", + "//:node_modules/@angular/common", + "//:node_modules/@angular/compiler", + "//:node_modules/@angular/compiler-cli", + "//:node_modules/@angular/core", + "//:node_modules/@angular/platform-browser", + "//:node_modules/@angular/platform-browser-dynamic", + "//:node_modules/@angular/router", + "//:node_modules/rxjs", + "//:node_modules/tslib", + "//:node_modules/typescript", + "//:node_modules/zone.js", + "//:node_modules/buffer", ], ) @@ -170,52 +187,98 @@ ts_project( name = "dev-server_integration_test_lib", testonly = True, srcs = glob(include = ["src/builders/dev-server/tests/**/*.ts"]), + # TODO: Fix strict_deps failure + ignore_strict_deps = True, deps = [ - ":build_rjs", - "//packages/angular/build/private:private_rjs", - "//modules/testing/builder:builder_rjs", - "//packages/angular_devkit/architect:architect_rjs", - "//packages/angular_devkit/architect/node:node_rjs", - "//packages/angular_devkit/architect/testing:testing_rjs", - "//packages/angular_devkit/core:core_rjs", - "//packages/angular_devkit/core/node:node_rjs", + ":build", + "//packages/angular/build/private", + "//modules/testing/builder", + ":node_modules/@angular-devkit/architect", # dev server only test deps - "//:root_modules/@types/http-proxy", - "//:root_modules/http-proxy", - "//:root_modules/puppeteer", + "//:node_modules/@types/http-proxy", + "//:node_modules/http-proxy", + "//:node_modules/puppeteer", # Base dependencies for the application in hello-world-app. - "//:root_modules/@angular/common", - "//:root_modules/@angular/compiler", - "//:root_modules/@angular/compiler-cli", - "//:root_modules/@angular/core", - "//:root_modules/@angular/platform-browser", - "//:root_modules/@angular/platform-browser-dynamic", - "//:root_modules/@angular/router", - "//:root_modules/ng-packagr", - "//:root_modules/rxjs", - "//:root_modules/tslib", - "//:root_modules/typescript", - "//:root_modules/zone.js", - "//:root_modules/buffer", + "//:node_modules/@angular/common", + "//:node_modules/@angular/compiler", + "//:node_modules/@angular/compiler-cli", + "//:node_modules/@angular/core", + "//:node_modules/@angular/platform-browser", + "//:node_modules/@angular/platform-browser-dynamic", + "//:node_modules/@angular/router", + "//:node_modules/ng-packagr", + "//:node_modules/rxjs", + "//:node_modules/tslib", + "//:node_modules/typescript", + "//:node_modules/zone.js", + "//:node_modules/buffer", + ], +) + +ts_project( + name = "karma_integration_test_lib", + testonly = True, + srcs = glob(include = ["src/builders/karma/tests/**/*.ts"]), + # TODO: Fix strict_deps failure + ignore_strict_deps = True, + deps = [ + ":build", + "//packages/angular/build/private", + "//modules/testing/builder", + ":node_modules/@angular-devkit/architect", + + # karma specific test deps + "//:node_modules/karma-chrome-launcher", + "//:node_modules/karma-coverage", + "//:node_modules/karma-jasmine", + "//:node_modules/karma-jasmine-html-reporter", + "//:node_modules/puppeteer", + + # Base dependencies for the karma in hello-world-app. + "//:node_modules/@angular/common", + "//:node_modules/@angular/compiler", + "//:node_modules/@angular/compiler-cli", + "//:node_modules/@angular/core", + "//:node_modules/@angular/platform-browser", + "//:node_modules/@angular/platform-browser-dynamic", + "//:node_modules/@angular/router", + "//:node_modules/rxjs", + "//:node_modules/tslib", + "//:node_modules/typescript", + "//:node_modules/zone.js", + "//:node_modules/buffer", ], ) -jasmine_node_test( +jasmine_test( name = "application_integration_tests", size = "large", + data = [":application_integration_test_lib"], flaky = True, shard_count = 10, - deps = [":application_integration_test_lib"], ) -jasmine_node_test( +jasmine_test( name = "dev-server_integration_tests", size = "large", + data = [":dev-server_integration_test_lib"], + flaky = True, + shard_count = 10, +) + +jasmine_test( + name = "karma_integration_tests", + size = "large", + data = [":karma_integration_test_lib"], + env = { + # TODO: Replace Puppeteer downloaded browsers with Bazel-managed browsers, + # or standardize to avoid complex configuration like this! + "PUPPETEER_DOWNLOAD_PATH": "../../../node_modules/puppeteer/downloads", + }, flaky = True, shard_count = 10, - deps = [":dev-server_integration_test_lib"], ) genrule( @@ -225,13 +288,18 @@ genrule( cmd = "cp $(execpath //:LICENSE) $@", ) -pkg_npm( - name = "npm_package", +npm_package( + name = "pkg", pkg_deps = [ "//packages/angular_devkit/architect:package.json", ], + stamp_files = [ + "src/utils/version.js", + "src/tools/esbuild/utils.js", + "src/utils/normalize-cache.js", + ], tags = ["release-package"], - deps = [ + deps = RUNTIME_ASSETS + [ ":README.md", ":build", ":license", @@ -245,6 +313,6 @@ api_golden_test_npm_package( ":npm_package", "//goldens:public-api", ], - golden_dir = "angular_cli/goldens/public-api/angular/build", - npm_package = "angular_cli/packages/angular/build/npm_package", + golden_dir = "goldens/public-api/angular/build", + npm_package = "packages/angular/build/npm_package", ) diff --git a/packages/angular/build/README.md b/packages/angular/build/README.md index b78776718072..62249f7fe422 100644 --- a/packages/angular/build/README.md +++ b/packages/angular/build/README.md @@ -2,4 +2,4 @@ The sources for this package are in the [Angular CLI](https://github.com/angular/angular-cli) repository. Please file issues and pull requests against that repository. -Usage information and reference details can be found in repository [README](../../../README.md) file. +Usage information and reference details can be found in repository [README](https://github.com/angular/angular-cli/blob/main/README.md) file. diff --git a/packages/angular/build/builders.json b/packages/angular/build/builders.json index ef98f535c16c..ab3dbb23702b 100644 --- a/packages/angular/build/builders.json +++ b/packages/angular/build/builders.json @@ -15,6 +15,11 @@ "schema": "./src/builders/extract-i18n/schema.json", "description": "Extract i18n messages from an application." }, + "karma": { + "implementation": "./src/builders/karma", + "schema": "./src/builders/karma/schema.json", + "description": "Run Karma unit tests." + }, "ng-packagr": { "implementation": "./src/builders/ng-packagr/index", "schema": "./src/builders/ng-packagr/schema.json", diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json index 9f0b998a476f..d7649bddace6 100644 --- a/packages/angular/build/package.json +++ b/packages/angular/build/package.json @@ -19,46 +19,52 @@ "builders": "builders.json", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.0.0-EXPERIMENTAL-PLACEHOLDER", - "@babel/core": "7.26.0", + "@angular-devkit/architect": "workspace:0.0.0-EXPERIMENTAL-PLACEHOLDER", + "@babel/core": "7.26.10", "@babel/helper-annotate-as-pure": "7.25.9", "@babel/helper-split-export-declaration": "7.24.7", "@babel/plugin-syntax-import-attributes": "7.26.0", - "@inquirer/confirm": "5.1.1", + "@inquirer/confirm": "5.1.6", "@vitejs/plugin-basic-ssl": "1.2.0", "beasties": "0.2.0", "browserslist": "^4.23.0", - "esbuild": "0.24.2", + "esbuild": "0.25.1", "fast-glob": "3.3.3", "https-proxy-agent": "7.0.6", "istanbul-lib-instrument": "6.0.3", "listr2": "8.2.5", "magic-string": "0.30.17", - "mrmime": "2.0.0", + "mrmime": "2.0.1", "parse5-html-rewriting-stream": "7.0.0", "picomatch": "4.0.2", "piscina": "4.8.0", - "rollup": "4.30.1", - "sass": "1.83.1", - "semver": "7.6.3", - "vite": "6.0.7", + "rollup": "4.34.8", + "sass": "1.85.0", + "semver": "7.7.1", + "source-map-support": "0.5.21", + "vite": "6.2.3", "watchpack": "2.4.2" }, "optionalDependencies": { - "lmdb": "3.2.2" + "lmdb": "3.2.6" + }, + "devDependencies": { + "@angular/ssr": "workspace:*", + "@angular-devkit/core": "workspace:*" }, "peerDependencies": { - "@angular/compiler": "^19.0.0 || ^19.1.0-next.0", - "@angular/compiler-cli": "^19.0.0 || ^19.1.0-next.0", - "@angular/localize": "^19.0.0 || ^19.1.0-next.0", - "@angular/platform-server": "^19.0.0 || ^19.1.0-next.0", - "@angular/service-worker": "^19.0.0 || ^19.1.0-next.0", + "@angular/compiler": "0.0.0-ANGULAR-FW-PEER-DEP", + "@angular/compiler-cli": "0.0.0-ANGULAR-FW-PEER-DEP", + "@angular/localize": "0.0.0-ANGULAR-FW-PEER-DEP", + "@angular/platform-server": "0.0.0-ANGULAR-FW-PEER-DEP", + "@angular/service-worker": "0.0.0-ANGULAR-FW-PEER-DEP", "@angular/ssr": "^0.0.0-PLACEHOLDER", + "karma": "^6.4.0", "less": "^4.2.0", - "ng-packagr": "^19.0.0 || ^19.1.0-next.0", + "ng-packagr": "0.0.0-NG-PACKAGR-PEER-DEP", "postcss": "^8.4.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=5.5 <5.8" + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "typescript": ">=5.5 <5.9" }, "peerDependenciesMeta": { "@angular/localize": { @@ -73,6 +79,9 @@ "@angular/ssr": { "optional": true }, + "karma": { + "optional": true + }, "less": { "optional": true }, diff --git a/packages/angular/build/private/BUILD.bazel b/packages/angular/build/private/BUILD.bazel index 4d3cf2ab9fda..8cca388d6640 100644 --- a/packages/angular/build/private/BUILD.bazel +++ b/packages/angular/build/private/BUILD.bazel @@ -7,6 +7,6 @@ ts_project( srcs = ["index.ts"], module_name = "@angular/build/private", deps = [ - "//packages/angular/build:build_rjs", + "//packages/angular/build", ], ) diff --git a/packages/angular/build/src/builders/application/build-action.ts b/packages/angular/build/src/builders/application/build-action.ts index f5726746825c..c59863f0ebf5 100644 --- a/packages/angular/build/src/builders/application/build-action.ts +++ b/packages/angular/build/src/builders/application/build-action.ts @@ -9,10 +9,11 @@ import { BuilderContext } from '@angular-devkit/architect'; import { existsSync } from 'node:fs'; import path from 'node:path'; -import { BuildOutputFileType } from '../../tools/esbuild/bundler-context'; +import { BuildOutputFile, BuildOutputFileType } from '../../tools/esbuild/bundler-context'; import { ExecutionResult, RebuildState } from '../../tools/esbuild/bundler-execution-result'; import { shutdownSassWorkerPool } from '../../tools/esbuild/stylesheets/sass-language'; import { logMessages, withNoProgress, withSpinner } from '../../tools/esbuild/utils'; +import { ChangedFiles } from '../../tools/esbuild/watcher'; import { shouldWatchRoot } from '../../utils/environment-options'; import { NormalizedCachedOptions } from '../../utils/normalize-cache'; import { NormalizedApplicationBuildOptions, NormalizedOutputOptions } from './options'; @@ -151,6 +152,10 @@ export async function* runEsBuildBuildAction( return; } + // Used to force a full result on next rebuild if there were initial errors. + // This ensures at least one full result is emitted. + let hasInitialErrors = result.errors.length > 0; + // Wait for changes and rebuild as needed const currentWatchFiles = new Set(result.watchFiles); try { @@ -199,10 +204,14 @@ export async function* runEsBuildBuildAction( for (const outputResult of emitOutputResults( result, outputOptions, - incrementalResults ? rebuildState.previousOutputInfo : undefined, + changes, + incrementalResults && !hasInitialErrors ? rebuildState : undefined, )) { yield outputResult; } + + // Clear initial build errors flag if no errors are now present + hasInitialErrors &&= result.errors.length > 0; } } finally { // Stop the watcher and cleanup incremental rebuild state @@ -224,7 +233,8 @@ function* emitOutputResults( templateUpdates, }: ExecutionResult, outputOptions: NormalizedApplicationBuildOptions['outputOptions'], - previousOutputInfo?: ReadonlyMap, + changes?: ChangedFiles, + rebuildState?: RebuildState, ): Iterable { if (errors.length > 0) { yield { @@ -239,29 +249,11 @@ function* emitOutputResults( return; } - // Template updates only exist if no other JS changes have occurred - const hasTemplateUpdates = !!templateUpdates?.size; - if (hasTemplateUpdates) { - const updateResult: ComponentUpdateResult = { - kind: ResultKind.ComponentUpdate, - updates: Array.from(templateUpdates, ([id, content]) => ({ - type: 'template', - id, - content, - })), - }; - - yield updateResult; - } - - // Use an incremental result if previous output information is available - if (previousOutputInfo) { - const incrementalResult: IncrementalResult = { - kind: ResultKind.Incremental, + // Use a full result if there is no rebuild state (no prior build result) + if (!rebuildState || !changes) { + const result: FullResult = { + kind: ResultKind.Full, warnings: warnings as ResultMessage[], - added: [], - removed: [], - modified: [], files: {}, detail: { externalMetadata, @@ -270,68 +262,42 @@ function* emitOutputResults( outputOptions, }, }; - - // Initially assume all previous output files have been removed - const removedOutputFiles = new Map(previousOutputInfo); - - for (const file of outputFiles) { - removedOutputFiles.delete(file.path); - - // Temporarily ignore JS files until Angular compiler plugin refactor to allow - // bypassing application code bundling for template affecting only changes. - // TODO: Remove once refactor is complete. - if (hasTemplateUpdates && /\.js(?:\.map)?$/.test(file.path)) { - continue; - } - - const previousHash = previousOutputInfo.get(file.path)?.hash; - let needFile = false; - if (previousHash === undefined) { - needFile = true; - incrementalResult.added.push(file.path); - } else if (previousHash !== file.hash) { - needFile = true; - incrementalResult.modified.push(file.path); - } - - if (needFile) { - incrementalResult.files[file.path] = { - type: file.type, - contents: file.contents, - origin: 'memory', - hash: file.hash, - }; - } - } - - // Include the removed output files - incrementalResult.removed.push( - ...Array.from(removedOutputFiles, ([file, { type }]) => ({ - path: file, - type, - })), - ); - - // Always consider asset files as added to ensure new/modified assets are available. - // TODO: Consider more comprehensive asset analysis. for (const file of assetFiles) { - incrementalResult.added.push(file.destination); - incrementalResult.files[file.destination] = { + result.files[file.destination] = { type: BuildOutputFileType.Browser, inputPath: file.source, origin: 'disk', }; } + for (const file of outputFiles) { + result.files[file.path] = { + type: file.type, + contents: file.contents, + origin: 'memory', + hash: file.hash, + }; + } - yield incrementalResult; + yield result; return; } - // Otherwise, use a full result - const result: FullResult = { - kind: ResultKind.Full, + // Template updates only exist if no other JS changes have occurred. + // A full page reload may be required based on the following incremental output change analysis. + const hasTemplateUpdates = !!templateUpdates?.size; + + // Use an incremental result if previous output information is available + const { previousAssetsInfo, previousOutputInfo } = rebuildState; + + const incrementalResult: IncrementalResult = { + kind: ResultKind.Incremental, warnings: warnings as ResultMessage[], + // Initially attempt to use a background update of files to support component updates. + background: hasTemplateUpdates, + added: [], + removed: [], + modified: [], files: {}, detail: { externalMetadata, @@ -340,21 +306,130 @@ function* emitOutputResults( outputOptions, }, }; - for (const file of assetFiles) { - result.files[file.destination] = { + + let hasCssUpdates = false; + + // Initially assume all previous output files have been removed + const removedOutputFiles = new Map(previousOutputInfo); + for (const file of outputFiles) { + removedOutputFiles.delete(file.path); + + const previousHash = previousOutputInfo.get(file.path)?.hash; + let needFile = false; + if (previousHash === undefined) { + needFile = true; + incrementalResult.added.push(file.path); + } else if (previousHash !== file.hash) { + needFile = true; + incrementalResult.modified.push(file.path); + } + + if (needFile) { + if (file.path.endsWith('.css')) { + hasCssUpdates = true; + } else if (!canBackgroundUpdate(file)) { + incrementalResult.background = false; + } + + incrementalResult.files[file.path] = { + type: file.type, + contents: file.contents, + origin: 'memory', + hash: file.hash, + }; + } + } + + // Initially assume all previous assets files have been removed + const removedAssetFiles = new Map(previousAssetsInfo); + for (const { source, destination } of assetFiles) { + removedAssetFiles.delete(source); + + if (!previousAssetsInfo.has(source)) { + incrementalResult.added.push(destination); + incrementalResult.background = false; + } else if (changes.modified.has(source)) { + incrementalResult.modified.push(destination); + incrementalResult.background = false; + } else { + continue; + } + + hasCssUpdates ||= destination.endsWith('.css'); + + incrementalResult.files[destination] = { type: BuildOutputFileType.Browser, - inputPath: file.source, + inputPath: source, origin: 'disk', }; } - for (const file of outputFiles) { - result.files[file.path] = { - type: file.type, - contents: file.contents, - origin: 'memory', - hash: file.hash, + + // Do not remove stale files yet if there are template updates. + // Component chunk files may still be referenced in running browser code. + // Module evaluation time component updates will update any of these files. + // This typically occurs when a lazy component is changed that has not yet + // been accessed at runtime. + if (hasTemplateUpdates && incrementalResult.background) { + removedOutputFiles.clear(); + } + + // Include the removed output and asset files + incrementalResult.removed.push( + ...Array.from(removedOutputFiles, ([file, { type }]) => ({ + path: file, + type, + })), + ...Array.from(removedAssetFiles.values(), (file) => ({ + path: file, + type: BuildOutputFileType.Browser, + })), + ); + + yield incrementalResult; + + // If there are template updates and the incremental update was background only, a component + // update is possible. + if (hasTemplateUpdates && incrementalResult.background) { + // Template changes may be accompanied by stylesheet changes and these should also be updated hot when possible. + if (hasCssUpdates) { + const styleResult: IncrementalResult = { + kind: ResultKind.Incremental, + added: incrementalResult.added.filter(isCssFilePath), + removed: incrementalResult.removed.filter(({ path }) => isCssFilePath(path)), + modified: incrementalResult.modified.filter(isCssFilePath), + files: Object.fromEntries( + Object.entries(incrementalResult.files).filter(([path]) => isCssFilePath(path)), + ), + }; + + yield styleResult; + } + + const updateResult: ComponentUpdateResult = { + kind: ResultKind.ComponentUpdate, + updates: Array.from(templateUpdates, ([id, content]) => ({ + type: 'template', + id, + content, + })), }; + + yield updateResult; + } +} + +function isCssFilePath(filePath: string): boolean { + return /\.css(?:\.map)?$/i.test(filePath); +} + +function canBackgroundUpdate(file: BuildOutputFile): boolean { + // Files in the output root are not served and do not affect the + // application available with the development server. + if (file.type === BuildOutputFileType.Root) { + return true; } - yield result; + // Updates to non-JS files must signal an update with the dev server + // except the service worker configuration which is special cased. + return /(?:\.m?js|\.map)$/.test(file.path) || file.path === 'ngsw.json'; } diff --git a/packages/angular/build/src/builders/application/execute-build.ts b/packages/angular/build/src/builders/application/execute-build.ts index 43cbf41d52a6..72a07d8b8307 100644 --- a/packages/angular/build/src/builders/application/execute-build.ts +++ b/packages/angular/build/src/builders/application/execute-build.ts @@ -7,6 +7,7 @@ */ import { BuilderContext } from '@angular-devkit/architect'; +import { createAngularCompilation } from '../../tools/angular/compilation'; import { SourceFileCache } from '../../tools/esbuild/angular/source-file-cache'; import { generateBudgetStats } from '../../tools/esbuild/budget-stats'; import { @@ -108,6 +109,8 @@ export async function executeBuild( target, codeBundleCache, componentStyleBundler, + // Create new reusable compilation for the appropriate mode based on the `jit` plugin option + await createAngularCompilation(!!options.jit, !options.serverEntryPoint), templateUpdates, ); @@ -160,30 +163,55 @@ export async function executeBuild( // Analyze external imports if external options are enabled if (options.externalPackages || bundlingResult.externalConfiguration) { const { - externalConfiguration, - externalImports: { browser, server }, + externalConfiguration = [], + externalImports: { browser = [], server = [] }, } = bundlingResult; - const implicitBrowser = browser ? [...browser] : []; - const implicitServer = server ? [...server] : []; - // TODO: Implement wildcard externalConfiguration filtering - executionResult.setExternalMetadata( - externalConfiguration - ? implicitBrowser.filter((value) => !externalConfiguration.includes(value)) - : implicitBrowser, - externalConfiguration - ? implicitServer.filter((value) => !externalConfiguration.includes(value)) - : implicitServer, - externalConfiguration, - ); + // Similar to esbuild, --external:@foo/bar automatically implies --external:@foo/bar/*, + // which matches import paths like @foo/bar/baz. + // This means all paths within the @foo/bar package are also marked as external. + const exclusionsPrefixes = externalConfiguration.map((exclusion) => exclusion + '/'); + const exclusions = new Set(externalConfiguration); + const explicitExternal = new Set(); + + const isExplicitExternal = (dep: string): boolean => { + if (exclusions.has(dep)) { + return true; + } + + for (const prefix of exclusionsPrefixes) { + if (dep.startsWith(prefix)) { + return true; + } + } + + return false; + }; + + const implicitBrowser: string[] = []; + for (const dep of browser) { + if (isExplicitExternal(dep)) { + explicitExternal.add(dep); + } else { + implicitBrowser.push(dep); + } + } + + const implicitServer: string[] = []; + for (const dep of server) { + if (isExplicitExternal(dep)) { + explicitExternal.add(dep); + } else { + implicitServer.push(dep); + } + } + + executionResult.setExternalMetadata(implicitBrowser, implicitServer, [...explicitExternal]); } const { metafile, initialFiles, outputFiles } = bundlingResult; executionResult.outputFiles.push(...outputFiles); - const changedFiles = - rebuildState && executionResult.findChangedFiles(rebuildState.previousOutputInfo); - // Analyze files for bundle budget failures if present let budgetFailures: BudgetCalculatorResult[] | undefined; if (options.budgets) { @@ -240,11 +268,6 @@ export async function executeBuild( ); } - // Override auto-CSP settings if we are serving through Vite middleware. - if (context.builder.builderName === 'dev-server' && options.security) { - options.security.autoCsp = false; - } - // Perform i18n translation inlining if enabled if (i18nOptions.shouldInline) { const result = await inlineI18n(metafile, options, executionResult, initialFiles); @@ -285,6 +308,8 @@ export async function executeBuild( } if (!jsonLogs) { + const changedFiles = + rebuildState && executionResult.findChangedFiles(rebuildState.previousOutputInfo); executionResult.addLog( logBuildStats( metafile, diff --git a/packages/angular/build/src/builders/application/execute-post-bundle.ts b/packages/angular/build/src/builders/application/execute-post-bundle.ts index 5066d5aaca01..5171ca254d5d 100644 --- a/packages/angular/build/src/builders/application/execute-post-bundle.ts +++ b/packages/angular/build/src/builders/application/execute-post-bundle.ts @@ -66,7 +66,7 @@ export async function executePostBundleSteps( const { baseHref = '/', serviceWorker, - i18nOptions, + ssrOptions, indexHtmlOptions, optimizationOptions, sourcemapOptions, @@ -113,7 +113,7 @@ export async function executePostBundleSteps( // Create server manifest const initialFilesPaths = new Set(initialFiles.keys()); - if (serverEntryPoint) { + if (serverEntryPoint && (outputMode || prerenderOptions || appShellOptions || ssrOptions)) { const { manifestContent, serverAssetsChunks } = generateAngularServerAppManifest( additionalHtmlOutputFiles, outputFiles, @@ -184,7 +184,6 @@ export async function executePostBundleSteps( } const serializableRouteTreeNodeForManifest: WritableSerializableRouteTreeNode = []; - for (const metadata of serializableRouteTreeNode) { serializableRouteTreeNodeForManifest.push(metadata); diff --git a/packages/angular/build/src/builders/application/i18n.ts b/packages/angular/build/src/builders/application/i18n.ts index f526286e35a7..478a8893ca10 100644 --- a/packages/angular/build/src/builders/application/i18n.ts +++ b/packages/angular/build/src/builders/application/i18n.ts @@ -39,7 +39,7 @@ export async function inlineI18n( warnings: string[]; prerenderedRoutes: PrerenderedRoutesRecord; }> { - const { i18nOptions, optimizationOptions, baseHref } = options; + const { i18nOptions, optimizationOptions, baseHref, cacheOptions } = options; // Create the multi-threaded inliner with common options and the files generated from the build. const inliner = new I18nInliner( @@ -47,6 +47,7 @@ export async function inlineI18n( missingTranslation: i18nOptions.missingTranslationBehavior ?? 'warning', outputFiles: executionResult.outputFiles, shouldOptimize: optimizationOptions.scripts, + persistentCachePath: cacheOptions.enabled ? cacheOptions.path : undefined, }, maxWorkers, ); @@ -64,6 +65,11 @@ export async function inlineI18n( // For each active locale, use the inliner to process the output files of the build. const updatedOutputFiles = []; const updatedAssetFiles = []; + // Root and SSR entry files are not modified. + const unModifiedOutputFiles = executionResult.outputFiles.filter( + ({ type }) => type === BuildOutputFileType.Root || type === BuildOutputFileType.ServerRoot, + ); + try { for (const locale of i18nOptions.inlineLocales) { // A locale specific set of files is returned from the inliner. @@ -87,7 +93,7 @@ export async function inlineI18n( ...options, baseHref: getLocaleBaseHref(baseHref, i18nOptions, locale) ?? baseHref, }, - localeOutputFiles, + [...unModifiedOutputFiles, ...localeOutputFiles], executionResult.assetFiles, initialFiles, locale, @@ -124,9 +130,7 @@ export async function inlineI18n( // Update the result with all localized files. executionResult.outputFiles = [ // Root and SSR entry files are not modified. - ...executionResult.outputFiles.filter( - ({ type }) => type === BuildOutputFileType.Root || type === BuildOutputFileType.ServerRoot, - ), + ...unModifiedOutputFiles, // Updated files for each locale. ...updatedOutputFiles, ]; diff --git a/packages/angular/build/src/builders/application/index.ts b/packages/angular/build/src/builders/application/index.ts index 118f54c2013f..afe657e59da7 100644 --- a/packages/angular/build/src/builders/application/index.ts +++ b/packages/angular/build/src/builders/application/index.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/architect'; +import { Builder, BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/architect'; import assert from 'node:assert'; import fs from 'node:fs/promises'; import path from 'node:path'; @@ -259,4 +259,6 @@ function generateFullPath( return fullFilePath; } -export default createBuilder(buildApplication); +const builder: Builder = createBuilder(buildApplication); + +export default builder; diff --git a/packages/angular/build/src/builders/application/options.ts b/packages/angular/build/src/builders/application/options.ts index fd69191ca969..a58c60386c9c 100644 --- a/packages/angular/build/src/builders/application/options.ts +++ b/packages/angular/build/src/builders/application/options.ts @@ -174,7 +174,7 @@ export async function normalizeOptions( const i18nOptions: I18nOptions & { duplicateTranslationBehavior?: I18NTranslation; missingTranslationBehavior?: I18NTranslation; - } = createI18nOptions(projectMetadata, options.localize, context.logger); + } = createI18nOptions(projectMetadata, options.localize, context.logger, !!options.ssr); i18nOptions.duplicateTranslationBehavior = options.i18nDuplicateTranslation; i18nOptions.missingTranslationBehavior = options.i18nMissingTranslation; if (options.forceI18nFlatOutput) { @@ -386,6 +386,15 @@ export async function normalizeOptions( } } + const autoCsp = options.security?.autoCsp; + const security = { + autoCsp: autoCsp + ? { + unsafeEval: autoCsp === true ? false : !!autoCsp.unsafeEval, + } + : undefined, + }; + // Initial options to keep const { allowedCommonJsDependencies, @@ -415,7 +424,6 @@ export async function normalizeOptions( partialSSRBuild = false, externalRuntimeStyles, instrumentForCoverage, - security, } = options; // Return all the normalized options @@ -425,7 +433,14 @@ export async function normalizeOptions( baseHref, cacheOptions, crossOrigin, - externalDependencies, + externalDependencies: normalizeExternals(externalDependencies), + externalPackages: + typeof externalPackages === 'object' + ? { + ...externalPackages, + exclude: normalizeExternals(externalPackages.exclude), + } + : externalPackages, extractLicenses, inlineStyleLanguage, jit: !aot, @@ -433,7 +448,6 @@ export async function normalizeOptions( polyfills: polyfills === undefined || Array.isArray(polyfills) ? polyfills : [polyfills], poll, progress, - externalPackages, preserveSymlinks, stylePreprocessorOptions, subresourceIntegrity, @@ -669,3 +683,23 @@ export function getLocaleBaseHref( return baseHrefSuffix !== '' ? urlJoin(baseHref, baseHrefSuffix) : undefined; } + +/** + * Normalizes an array of external dependency paths by ensuring that + * wildcard patterns (`/*`) are removed from package names. + * + * This avoids the need to handle this normalization repeatedly in our plugins, + * as esbuild already treats `--external:@foo/bar` as implicitly including + * `--external:@foo/bar/*`. By standardizing the input, we ensure consistency + * and reduce redundant checks across our plugins. + * + * @param value - An optional array of dependency paths to normalize. + * @returns A new array with wildcard patterns removed from package names, or `undefined` if input is `undefined`. + */ +function normalizeExternals(value: string[] | undefined): string[] | undefined { + if (!value) { + return undefined; + } + + return [...new Set(value.map((d) => (d.endsWith('/*') ? d.slice(0, -2) : d)))]; +} diff --git a/packages/angular/build/src/builders/application/results.ts b/packages/angular/build/src/builders/application/results.ts index 077237967425..3e3f0dd99315 100644 --- a/packages/angular/build/src/builders/application/results.ts +++ b/packages/angular/build/src/builders/application/results.ts @@ -36,6 +36,7 @@ export interface FullResult extends BaseResult { export interface IncrementalResult extends BaseResult { kind: ResultKind.Incremental; + background?: boolean; added: string[]; removed: { path: string; type: BuildOutputFileType }[]; modified: string[]; diff --git a/packages/angular/build/src/builders/application/schema.json b/packages/angular/build/src/builders/application/schema.json index a8e8e13a8016..d990e3a3cff3 100644 --- a/packages/angular/build/src/builders/application/schema.json +++ b/packages/angular/build/src/builders/application/schema.json @@ -196,7 +196,7 @@ "additionalProperties": false }, "externalDependencies": { - "description": "Exclude the listed external dependencies from being bundled into the bundle. Instead, the created bundle relies on these dependencies to be available during runtime.", + "description": "Exclude the listed external dependencies from being bundled into the bundle. Instead, the created bundle relies on these dependencies to be available during runtime. Note: `@foo/bar` marks all paths within the `@foo/bar` package as external, including sub-paths like `@foo/bar/baz`.", "type": "array", "items": { "type": "string" diff --git a/packages/angular/build/src/builders/application/setup-bundling.ts b/packages/angular/build/src/builders/application/setup-bundling.ts index c0ef33ab2ff8..413c625eb81c 100644 --- a/packages/angular/build/src/builders/application/setup-bundling.ts +++ b/packages/angular/build/src/builders/application/setup-bundling.ts @@ -6,6 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ +import { AngularCompilation } from '../../tools/angular/compilation'; import { ComponentStylesheetBundler } from '../../tools/esbuild/angular/component-stylesheets'; import { SourceFileCache } from '../../tools/esbuild/angular/source-file-cache'; import { @@ -34,6 +35,7 @@ export function setupBundlerContexts( target: string[], codeBundleCache: SourceFileCache, stylesheetBundler: ComponentStylesheetBundler, + angularCompilation: AngularCompilation, templateUpdates: Map | undefined, ): { typescriptContexts: BundlerContext[]; @@ -61,6 +63,7 @@ export function setupBundlerContexts( target, codeBundleCache, stylesheetBundler, + angularCompilation, templateUpdates, ), ), diff --git a/packages/angular/build/src/builders/application/tests/behavior/component-stylesheets_spec.ts b/packages/angular/build/src/builders/application/tests/behavior/component-stylesheets_spec.ts index 7853c3a920b0..ecc460bcb405 100644 --- a/packages/angular/build/src/builders/application/tests/behavior/component-stylesheets_spec.ts +++ b/packages/angular/build/src/builders/application/tests/behavior/component-stylesheets_spec.ts @@ -44,5 +44,44 @@ describeBuilder(buildApplication, APPLICATION_BUILDER_INFO, (harness) => { harness.expectFile('dist/browser/main.js').content.not.toContain('variables'); }); + + it('should generate an error for a missing stylesheet with AOT', async () => { + await harness.modifyFile('src/app/app.component.ts', (content) => { + return content.replace('./app.component.css', './not-present.css'); + }); + + harness.useTarget('build', { + ...BASE_OPTIONS, + }); + + const { result, logs } = await harness.executeOnce({ outputLogsOnFailure: false }); + expect(result?.success).toBeFalse(); + expect(logs).toContain( + jasmine.objectContaining({ + level: 'error', + message: jasmine.stringContaining(`Could not find stylesheet file './not-present.css'`), + }), + ); + }); + + it('should generate an error for a missing stylesheet with JIT', async () => { + await harness.modifyFile('src/app/app.component.ts', (content) => { + return content.replace('./app.component.css', './not-present.css'); + }); + + harness.useTarget('build', { + ...BASE_OPTIONS, + aot: false, + }); + + const { result, logs } = await harness.executeOnce({ outputLogsOnFailure: false }); + expect(result?.success).toBeFalse(); + expect(logs).toContain( + jasmine.objectContaining({ + level: 'error', + message: jasmine.stringContaining('Could not resolve'), + }), + ); + }); }); }); diff --git a/packages/angular/build/src/builders/application/tests/behavior/component-templates_spec.ts b/packages/angular/build/src/builders/application/tests/behavior/component-templates_spec.ts new file mode 100644 index 000000000000..687ed78dc74c --- /dev/null +++ b/packages/angular/build/src/builders/application/tests/behavior/component-templates_spec.ts @@ -0,0 +1,33 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { buildApplication } from '../../index'; +import { APPLICATION_BUILDER_INFO, BASE_OPTIONS, describeBuilder } from '../setup'; + +describeBuilder(buildApplication, APPLICATION_BUILDER_INFO, (harness) => { + describe('Behavior: "Component Templates"', () => { + it('should generate an error for a missing template', async () => { + await harness.modifyFile('src/app/app.component.ts', (content) => { + return content.replace('./app.component.html', './not-present.html'); + }); + + harness.useTarget('build', { + ...BASE_OPTIONS, + }); + + const { result, logs } = await harness.executeOnce({ outputLogsOnFailure: false }); + expect(result?.success).toBeFalse(); + expect(logs).toContain( + jasmine.objectContaining({ + level: 'error', + message: jasmine.stringContaining(`Could not find template file './not-present.html'`), + }), + ); + }); + }); +}); diff --git a/packages/angular/build/src/builders/application/tests/behavior/rebuild-assets_spec.ts b/packages/angular/build/src/builders/application/tests/behavior/rebuild-assets_spec.ts index 6bf7763d2e4b..a48c19fd1baf 100644 --- a/packages/angular/build/src/builders/application/tests/behavior/rebuild-assets_spec.ts +++ b/packages/angular/build/src/builders/application/tests/behavior/rebuild-assets_spec.ts @@ -61,5 +61,50 @@ describeBuilder(buildApplication, APPLICATION_BUILDER_INFO, (harness) => { expect(buildCount).toBe(2); }); + + it('remove deleted asset from output', async () => { + await Promise.all([ + harness.writeFile('public/asset-two.txt', 'bar'), + harness.writeFile('public/asset-one.txt', 'foo'), + ]); + + harness.useTarget('build', { + ...BASE_OPTIONS, + assets: [ + { + glob: '**/*', + input: 'public', + }, + ], + watch: true, + }); + + const buildCount = await harness + .execute({ outputLogsOnFailure: false }) + .pipe( + timeout(BUILD_TIMEOUT), + concatMap(async ({ result }, index) => { + switch (index) { + case 0: + expect(result?.success).toBeTrue(); + harness.expectFile('dist/browser/asset-one.txt').toExist(); + harness.expectFile('dist/browser/asset-two.txt').toExist(); + + await harness.removeFile('public/asset-two.txt'); + break; + case 1: + expect(result?.success).toBeTrue(); + harness.expectFile('dist/browser/asset-one.txt').toExist(); + harness.expectFile('dist/browser/asset-two.txt').toNotExist(); + break; + } + }), + take(2), + count(), + ) + .toPromise(); + + expect(buildCount).toBe(2); + }); }); }); diff --git a/packages/angular/build/src/builders/application/tests/options/sourcemap_spec.ts b/packages/angular/build/src/builders/application/tests/options/sourcemap_spec.ts index ddd36477bd99..a65df5eb8d32 100644 --- a/packages/angular/build/src/builders/application/tests/options/sourcemap_spec.ts +++ b/packages/angular/build/src/builders/application/tests/options/sourcemap_spec.ts @@ -240,5 +240,24 @@ describeBuilder(buildApplication, APPLICATION_BUILDER_INFO, (harness) => { .content.not.toContain('sourceMappingURL=app.component.css.map'); harness.expectFile('dist/browser/app.component.css.map').toNotExist(); }); + + for (const ext of ['css', 'scss', 'less']) { + it(`should generate a correct sourcemap when input file is ${ext}`, async () => { + await harness.writeFile(`src/styles.${ext}`, `* { color: red }`); + + harness.useTarget('build', { + ...BASE_OPTIONS, + sourceMap: true, + styles: [`src/styles.${ext}`], + }); + + const { result } = await harness.executeOnce(); + + expect(result?.success).toBeTrue(); + harness + .expectFile('dist/browser/styles.css.map') + .content.toContain(`"sources": ["src/styles.${ext}"]`); + }); + } }); }); diff --git a/packages/angular/build/src/builders/dev-server/builder.ts b/packages/angular/build/src/builders/dev-server/builder.ts index d9ad825dd6e6..4ea11d5f11e9 100644 --- a/packages/angular/build/src/builders/dev-server/builder.ts +++ b/packages/angular/build/src/builders/dev-server/builder.ts @@ -56,13 +56,6 @@ export async function* execute( const { builderName, normalizedOptions } = await initialize(options, projectName, context); - // Warn if the initial options provided by the user enable prebundling but caching is disabled - if (options.prebundle && !normalizedOptions.cacheOptions.enabled) { - context.logger.warn( - `Prebundling has been configured but will not be used because caching has been disabled.`, - ); - } - yield* serveWithVite( normalizedOptions, builderName, diff --git a/packages/angular/build/src/builders/dev-server/index.ts b/packages/angular/build/src/builders/dev-server/index.ts index 0410d1b0f2d8..bdf90250151b 100644 --- a/packages/angular/build/src/builders/dev-server/index.ts +++ b/packages/angular/build/src/builders/dev-server/index.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { createBuilder } from '@angular-devkit/architect'; +import { Builder, createBuilder } from '@angular-devkit/architect'; import { execute } from './builder'; import type { DevServerBuilderOutput } from './output'; import type { Schema as DevServerBuilderOptions } from './schema'; @@ -16,7 +16,12 @@ export { type DevServerBuilderOutput, execute as executeDevServerBuilder, }; -export default createBuilder(execute); +const builder: Builder = createBuilder< + DevServerBuilderOptions, + DevServerBuilderOutput +>(execute); + +export default builder; // Temporary export to support specs export { execute as executeDevServer }; diff --git a/packages/angular/build/src/builders/dev-server/options.ts b/packages/angular/build/src/builders/dev-server/options.ts index 237c26b8c2f6..3e0f59319117 100644 --- a/packages/angular/build/src/builders/dev-server/options.ts +++ b/packages/angular/build/src/builders/dev-server/options.ts @@ -103,6 +103,7 @@ export async function normalizeOptions( sslCert, sslKey, prebundle, + allowedHosts, } = options; // Return all the normalized options @@ -128,5 +129,6 @@ export async function normalizeOptions( // Prebundling defaults to true but requires caching to function prebundle: cacheOptions.enabled && !optimization.scripts && prebundle, inspect, + allowedHosts: allowedHosts ? allowedHosts : [], }; } diff --git a/packages/angular/build/src/builders/dev-server/schema.json b/packages/angular/build/src/builders/dev-server/schema.json index 2eb16987b8ca..41902e43d8d0 100644 --- a/packages/angular/build/src/builders/dev-server/schema.json +++ b/packages/angular/build/src/builders/dev-server/schema.json @@ -36,6 +36,23 @@ "type": "string", "description": "SSL certificate to use for serving HTTPS." }, + "allowedHosts": { + "description": "The hosts that the development server will respond to. This option sets the Vite option of the same name. For further details: https://vite.dev/config/server-options.html#server-allowedhosts", + "default": [], + "oneOf": [ + { + "type": "array", + "description": "A list of hosts that the development server will respond to.", + "items": { + "type": "string" + } + }, + { + "type": "boolean", + "description": "Indicates that all hosts are allowed. This is not recommended and a security risk." + } + ] + }, "headers": { "type": "object", "description": "Custom HTTP headers to be added to all responses.", @@ -98,7 +115,7 @@ "type": "object", "properties": { "exclude": { - "description": "List of package imports that should not be prebundled by the development server. The packages will be bundled into the application code itself.", + "description": "List of package imports that should not be prebundled by the development server. The packages will be bundled into the application code itself. Note: specifying `@foo/bar` marks all paths within the `@foo/bar` package as excluded, including sub-paths like `@foo/bar/baz`.", "type": "array", "items": { "type": "string" } } diff --git a/packages/angular/build/src/builders/dev-server/tests/behavior/build-assets_spec.ts b/packages/angular/build/src/builders/dev-server/tests/behavior/build-assets_spec.ts index ef33e9e5ec0c..c1ee820d6f1b 100644 --- a/packages/angular/build/src/builders/dev-server/tests/behavior/build-assets_spec.ts +++ b/packages/angular/build/src/builders/dev-server/tests/behavior/build-assets_spec.ts @@ -142,7 +142,7 @@ describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupT expect(await response?.headers.get('Location')).toBe('/login/'); }); - it('serves a JavaScript asset named as a bundle', async () => { + it('serves a JavaScript asset named as a bundle (main.js)', async () => { await harness.writeFile('public/test/main.js', javascriptFileContent); setupTarget(harness, { @@ -162,5 +162,17 @@ describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupT expect(result?.success).toBeTrue(); expect(await response?.text()).toContain(javascriptFileContent); }); + + it('should return 404 when a JavaScript asset named as a bundle (main.js) does not exist', async () => { + setupTarget(harness, {}); + + harness.useTarget('serve', { + ...BASE_OPTIONS, + }); + + const { result, response } = await executeOnceAndFetch(harness, 'unknown/main.js'); + expect(result?.success).toBeTrue(); + expect(response?.status).toBe(404); + }); }); }); diff --git a/packages/angular/build/src/builders/dev-server/tests/behavior/build-errors_spec.ts b/packages/angular/build/src/builders/dev-server/tests/behavior/build-errors_spec.ts new file mode 100644 index 000000000000..82467da0d249 --- /dev/null +++ b/packages/angular/build/src/builders/dev-server/tests/behavior/build-errors_spec.ts @@ -0,0 +1,66 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { concatMap, count, take, timeout } from 'rxjs'; +import { executeDevServer } from '../../index'; +import { describeServeBuilder } from '../jasmine-helpers'; +import { BASE_OPTIONS, BUILD_TIMEOUT, DEV_SERVER_BUILDER_INFO } from '../setup'; +import { logging } from '@angular-devkit/core'; + +describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupTarget) => { + describe('Behavior: "Rebuild Error Detection"', () => { + beforeEach(() => { + setupTarget(harness); + }); + + it('Emits full build result with incremental enabled and initial build has errors', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + watch: true, + }); + + // Missing ending `>` on the div will cause an error + await harness.appendToFile('src/app/app.component.html', '
Hello, world! { + switch (index) { + case 0: + expect(result?.success).toBeFalse(); + debugger; + expect(logs).toContain( + jasmine.objectContaining({ + message: jasmine.stringMatching('Unexpected character "EOF"'), + }), + ); + + await harness.appendToFile('src/app/app.component.html', '>'); + + break; + case 1: + expect(result?.success).toBeTrue(); + expect(logs).not.toContain( + jasmine.objectContaining({ + message: jasmine.stringMatching('Unexpected character "EOF"'), + }), + ); + break; + } + }), + take(2), + count(), + ) + .toPromise(); + + expect(buildCount).toBe(2); + }); + }); +}); diff --git a/packages/angular/build/src/builders/dev-server/tests/behavior/build-external-dependencies_spec.ts b/packages/angular/build/src/builders/dev-server/tests/behavior/build-external-dependencies_spec.ts index 583f988ba12a..db6d6e6d54b6 100644 --- a/packages/angular/build/src/builders/dev-server/tests/behavior/build-external-dependencies_spec.ts +++ b/packages/angular/build/src/builders/dev-server/tests/behavior/build-external-dependencies_spec.ts @@ -48,7 +48,7 @@ describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupT it('respects import specifiers when using baseHref with trailing slash', async () => { setupTarget(harness, { - externalDependencies: ['rxjs', 'rxjs/operators'], + externalDependencies: ['rxjs'], baseHref: '/test/', }); @@ -67,7 +67,7 @@ describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupT it('respects import specifiers when using baseHref without trailing slash', async () => { setupTarget(harness, { - externalDependencies: ['rxjs', 'rxjs/operators'], + externalDependencies: ['rxjs/*'], baseHref: '/test', }); @@ -83,5 +83,21 @@ describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupT expect(text).toContain(`import { BehaviorSubject } from "rxjs";`); expect(text).toContain(`import { map } from "rxjs/operators";`); }); + + // TODO: Enable when Vite has a custom logger setup to redirect logging into the builder system + xit('does not show pre-transform errors in the console for external dependencies', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + }); + + const { result, logs } = await executeOnceAndFetch(harness, 'main.js'); + + expect(result?.success).toBeTrue(); + expect(logs).not.toContain( + jasmine.objectContaining({ + message: jasmine.stringMatching('Pre-transform error'), + }), + ); + }); }); }); diff --git a/packages/angular/build/src/builders/dev-server/tests/behavior/build_localize_replaced_watch_spec.ts b/packages/angular/build/src/builders/dev-server/tests/behavior/build_localize_replaced_watch_spec.ts index 36906f1358e3..9bc326ebe087 100644 --- a/packages/angular/build/src/builders/dev-server/tests/behavior/build_localize_replaced_watch_spec.ts +++ b/packages/angular/build/src/builders/dev-server/tests/behavior/build_localize_replaced_watch_spec.ts @@ -6,80 +6,70 @@ * found in the LICENSE file at https://angular.dev/license */ -/* eslint-disable max-len */ import { concatMap, count, take, timeout } from 'rxjs'; -import { URL } from 'url'; import { executeDevServer } from '../../index'; import { describeServeBuilder } from '../jasmine-helpers'; import { BASE_OPTIONS, BUILD_TIMEOUT, DEV_SERVER_BUILDER_INFO } from '../setup'; -describeServeBuilder( - executeDevServer, - DEV_SERVER_BUILDER_INFO, - (harness, setupTarget, isViteRun) => { - // TODO(fix-vite): currently this is broken in vite. - (isViteRun ? xdescribe : describe)( - 'Behavior: "i18n $localize calls are replaced during watching"', - () => { - beforeEach(() => { - harness.useProject('test', { - root: '.', - sourceRoot: 'src', - cli: { - cache: { - enabled: false, - }, - }, - i18n: { - sourceLocale: { - 'code': 'fr', - }, - }, - }); +describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupTarget) => { + describe('Behavior: "i18n $localize calls are replaced during watching"', () => { + beforeEach(() => { + harness.useProject('test', { + root: '.', + sourceRoot: 'src', + cli: { + cache: { + enabled: false, + }, + }, + i18n: { + sourceLocale: { + code: 'fr', + }, + }, + }); - setupTarget(harness, { localize: ['fr'] }); - }); + setupTarget(harness, { localize: ['fr'] }); + }); - it('$localize are replaced in watch', async () => { - harness.useTarget('serve', { - ...BASE_OPTIONS, - watch: true, - }); + it('$localize are replaced in watch', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + watch: true, + }); - await harness.writeFile( - 'src/app/app.component.html', - ` + await harness.writeFile( + 'src/app/app.component.html', + `

Hello {{ title }}!

`, - ); + ); - const buildCount = await harness - .execute() - .pipe( - timeout(BUILD_TIMEOUT * 2), - concatMap(async ({ result }, index) => { - expect(result?.success).toBe(true); + const buildCount = await harness + .execute() + .pipe( + timeout(BUILD_TIMEOUT * 2), + concatMap(async ({ result }, index) => { + expect(result?.success).toBe(true); - const response = await fetch(new URL('main.js', `${result?.baseUrl}`)); - expect(await response?.text()).not.toContain('$localize`:'); + const response = await fetch(new URL('main.js', `${result?.baseUrl}`)); + expect(await response?.text()).not.toContain('$localize`:'); - switch (index) { - case 0: { - await harness.modifyFile('src/app/app.component.html', (content) => - content.replace('introduction', 'intro'), - ); - break; - } - } - }), - take(2), - count(), - ) - .toPromise(); + switch (index) { + case 0: { + await harness.modifyFile('src/app/app.component.html', (content) => + content.replace('introduction', 'intro'), + ); + break; + } + } + }), + take(2), + count(), + ) + .toPromise(); - expect(buildCount).toBe(2); - }); - }, - ); - }, -); + expect(buildCount).toBe(2); + }); + }); +}); diff --git a/packages/angular/build/src/builders/dev-server/tests/behavior/build_translation_watch_spec.ts b/packages/angular/build/src/builders/dev-server/tests/behavior/build_translation_watch_spec.ts index 7b6e185ec18f..00c652449db2 100644 --- a/packages/angular/build/src/builders/dev-server/tests/behavior/build_translation_watch_spec.ts +++ b/packages/angular/build/src/builders/dev-server/tests/behavior/build_translation_watch_spec.ts @@ -8,7 +8,7 @@ /* eslint-disable max-len */ import { concatMap, count, take, timeout } from 'rxjs'; -import { URL } from 'url'; +import { URL } from 'node:url'; import { executeDevServer } from '../../index'; import { describeServeBuilder } from '../jasmine-helpers'; import { BASE_OPTIONS, BUILD_TIMEOUT, DEV_SERVER_BUILDER_INFO } from '../setup'; diff --git a/packages/angular/build/src/builders/dev-server/tests/behavior/component-updates_spec.ts b/packages/angular/build/src/builders/dev-server/tests/behavior/component-updates_spec.ts index d471d487c556..742e07ea3b74 100644 --- a/packages/angular/build/src/builders/dev-server/tests/behavior/component-updates_spec.ts +++ b/packages/angular/build/src/builders/dev-server/tests/behavior/component-updates_spec.ts @@ -47,5 +47,39 @@ describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupT expect(response?.headers.get('Cache-Control')).toEqual('no-cache'); expect(output).toBe(''); }); + + it('sets ngHmrMode define to true when HMR is enabled', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + hmr: true, + }); + + await harness.writeFile( + 'src/main.ts', + 'declare const ngHmrMode: boolean; console.log(`HMR=${ngHmrMode}`);', + ); + + const { result, content } = await executeOnceAndFetch(harness, 'main.js'); + + expect(result?.success).toBeTrue(); + expect(content).toContain('HMR=${true}'); + }); + + it('sets ngHmrMode define to false when HMR is disabled', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + hmr: false, + }); + + await harness.writeFile( + 'src/main.ts', + 'declare const ngHmrMode: boolean; console.log(`HMR=${ngHmrMode}`);', + ); + + const { result, content } = await executeOnceAndFetch(harness, 'main.js'); + + expect(result?.success).toBeTrue(); + expect(content).toContain('HMR=${false}'); + }); }); }); diff --git a/packages/angular/build/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts b/packages/angular/build/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts index bea7278f8e9e..7617e31b45af 100644 --- a/packages/angular/build/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts +++ b/packages/angular/build/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts @@ -8,9 +8,9 @@ /* eslint-disable import/no-extraneous-dependencies */ import { tags } from '@angular-devkit/core'; -import { createServer } from 'http'; +import { createServer } from 'node:http'; import { createProxyServer } from 'http-proxy'; -import { AddressInfo } from 'net'; +import { AddressInfo } from 'node:net'; import puppeteer, { Browser, Page } from 'puppeteer'; import { count, debounceTime, finalize, switchMap, take, timeout } from 'rxjs'; import { executeDevServer } from '../../index'; diff --git a/packages/angular/build/src/builders/dev-server/tests/execute-fetch.ts b/packages/angular/build/src/builders/dev-server/tests/execute-fetch.ts index 3bb731a6c6b3..ebbdcf3f1133 100644 --- a/packages/angular/build/src/builders/dev-server/tests/execute-fetch.ts +++ b/packages/angular/build/src/builders/dev-server/tests/execute-fetch.ts @@ -7,7 +7,8 @@ */ import { lastValueFrom, mergeMap, take, timeout } from 'rxjs'; -import { URL } from 'url'; +import { get, IncomingMessage, RequestOptions } from 'node:http'; +import { text } from 'node:stream/consumers'; import { BuilderHarness, BuilderHarnessExecutionOptions, @@ -41,3 +42,49 @@ export async function executeOnceAndFetch( ), ); } + +/** + * Executes the builder and then immediately performs a GET request + * via the Node.js `http` builtin module. This is useful for cases + * where the `fetch` API is limited such as testing different `Host` + * header values with the development server. + * The `fetch` based alternative is preferred otherwise. + * + * @param harness A builder harness instance. + * @param url The URL string to get. + * @param options An options object. + * @returns + */ +export async function executeOnceAndGet( + harness: BuilderHarness, + url: string, + options?: Partial & { request?: RequestOptions }, +): Promise { + return lastValueFrom( + harness.execute().pipe( + timeout(30000), + mergeMap(async (executionResult) => { + let response = undefined; + let content = undefined; + if (executionResult.result?.success) { + let baseUrl = `${executionResult.result.baseUrl}`; + baseUrl = baseUrl[baseUrl.length - 1] === '/' ? baseUrl : `${baseUrl}/`; + const resolvedUrl = new URL(url, baseUrl); + + response = await new Promise((resolve) => + get(resolvedUrl, options?.request ?? {}, resolve), + ); + + if (response.statusCode === 200) { + content = await text(response); + } + + response.resume(); + } + + return { ...executionResult, response, content }; + }), + take(1), + ), + ); +} diff --git a/packages/angular/build/src/builders/dev-server/tests/options/allowed-hosts_spec.ts b/packages/angular/build/src/builders/dev-server/tests/options/allowed-hosts_spec.ts new file mode 100644 index 000000000000..8e96c7b4b4b0 --- /dev/null +++ b/packages/angular/build/src/builders/dev-server/tests/options/allowed-hosts_spec.ts @@ -0,0 +1,80 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { executeDevServer } from '../../index'; +import { executeOnceAndGet } from '../execute-fetch'; +import { describeServeBuilder } from '../jasmine-helpers'; +import { BASE_OPTIONS, DEV_SERVER_BUILDER_INFO } from '../setup'; + +const FETCH_HEADERS = Object.freeze({ Host: 'example.com' }); + +describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupTarget) => { + describe('option: "allowedHosts"', () => { + beforeEach(async () => { + setupTarget(harness); + + // Application code is not needed for these tests + await harness.writeFile('src/main.ts', ''); + }); + + it('does not allow an invalid host when option is not present', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + }); + + const { result, response } = await executeOnceAndGet(harness, '/', { + request: { headers: FETCH_HEADERS }, + }); + + expect(result?.success).toBeTrue(); + expect(response?.statusCode).toBe(403); + }); + + it('does not allow an invalid host when option is an empty array', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + allowedHosts: [], + }); + + const { result, response } = await executeOnceAndGet(harness, '/', { + request: { headers: FETCH_HEADERS }, + }); + + expect(result?.success).toBeTrue(); + expect(response?.statusCode).toBe(403); + }); + + it('allows a host when specified in the option', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + allowedHosts: ['example.com'], + }); + + const { result, content } = await executeOnceAndGet(harness, '/', { + request: { headers: FETCH_HEADERS }, + }); + + expect(result?.success).toBeTrue(); + expect(content).toContain(''); + }); + + it('allows a host when option is true', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + allowedHosts: true, + }); + + const { result, content } = await executeOnceAndGet(harness, '/', { + request: { headers: FETCH_HEADERS }, + }); + + expect(result?.success).toBeTrue(); + expect(content).toContain('<title>'); + }); + }); +}); diff --git a/packages/angular/build/src/builders/dev-server/tests/options/hmr_spec.ts b/packages/angular/build/src/builders/dev-server/tests/options/hmr_spec.ts new file mode 100644 index 000000000000..4b9ba6a4c780 --- /dev/null +++ b/packages/angular/build/src/builders/dev-server/tests/options/hmr_spec.ts @@ -0,0 +1,83 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { logging } from '@angular-devkit/core'; +import { executeDevServer } from '../../index'; +import { executeOnceAndFetch } from '../execute-fetch'; +import { describeServeBuilder } from '../jasmine-helpers'; +import { BASE_OPTIONS, DEV_SERVER_BUILDER_INFO } from '../setup'; + +describeServeBuilder(executeDevServer, DEV_SERVER_BUILDER_INFO, (harness, setupTarget) => { + describe('option: "hmr"', () => { + beforeEach(async () => { + setupTarget(harness, {}); + }); + + it('shows message with opt out steps by default', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + }); + + const { result, logs } = await executeOnceAndFetch(harness, '/'); + + expect(result?.success).toBeTrue(); + expect(logs).toContain( + jasmine.objectContaining<logging.LogEntry>({ + message: jasmine.stringMatching('Component HMR has been enabled'), + }), + ); + expect(logs).toContain( + jasmine.objectContaining<logging.LogEntry>({ + message: jasmine.stringMatching('--no-hmr'), + }), + ); + }); + + it('shows message with opt out steps when explicitly enabled', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + hmr: true, + }); + + const { result, logs } = await executeOnceAndFetch(harness, '/'); + + expect(result?.success).toBeTrue(); + expect(logs).toContain( + jasmine.objectContaining<logging.LogEntry>({ + message: jasmine.stringMatching('Component HMR has been enabled'), + }), + ); + expect(logs).toContain( + jasmine.objectContaining<logging.LogEntry>({ + message: jasmine.stringMatching('--no-hmr'), + }), + ); + }); + + it('does not show enabled message with opt out steps when explicitly disabled', async () => { + harness.useTarget('serve', { + ...BASE_OPTIONS, + hmr: false, + }); + + const { result, logs } = await executeOnceAndFetch(harness, '/'); + + expect(result?.success).toBeTrue(); + expect(logs).not.toContain( + jasmine.objectContaining<logging.LogEntry>({ + message: jasmine.stringMatching('Component HMR has been enabled'), + }), + ); + expect(logs).not.toContain( + jasmine.objectContaining<logging.LogEntry>({ + message: jasmine.stringMatching('--no-hmr'), + }), + ); + }); + }); +}); diff --git a/packages/angular/build/src/builders/dev-server/tests/options/port_spec.ts b/packages/angular/build/src/builders/dev-server/tests/options/port_spec.ts index 7943ce2df765..83f3a4d1486b 100644 --- a/packages/angular/build/src/builders/dev-server/tests/options/port_spec.ts +++ b/packages/angular/build/src/builders/dev-server/tests/options/port_spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { URL } from 'url'; +import { URL } from 'node:url'; import { executeDevServer } from '../../index'; import { executeOnceAndFetch } from '../execute-fetch'; import { describeServeBuilder } from '../jasmine-helpers'; diff --git a/packages/angular/build/src/builders/dev-server/tests/options/serve-path_spec.ts b/packages/angular/build/src/builders/dev-server/tests/options/serve-path_spec.ts index dc358060c296..7570175c65d2 100644 --- a/packages/angular/build/src/builders/dev-server/tests/options/serve-path_spec.ts +++ b/packages/angular/build/src/builders/dev-server/tests/options/serve-path_spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { URL } from 'url'; +import { URL } from 'node:url'; import { executeDevServer } from '../../index'; import { executeOnceAndFetch } from '../execute-fetch'; import { describeServeBuilder } from '../jasmine-helpers'; diff --git a/packages/angular/build/src/builders/dev-server/vite-server.ts b/packages/angular/build/src/builders/dev-server/vite-server.ts index 8521b9af6674..241ff2cdc505 100644 --- a/packages/angular/build/src/builders/dev-server/vite-server.ts +++ b/packages/angular/build/src/builders/dev-server/vite-server.ts @@ -49,6 +49,11 @@ interface OutputFileRecord { type: BuildOutputFileType; } +interface OutputAssetRecord { + source: string; + updated: boolean; +} + interface DevServerExternalResultMetadata extends Omit<ExternalResultMetadata, 'explicit'> { explicitBrowser: string[]; explicitServer: string[]; @@ -107,6 +112,21 @@ export async function* serveWithVite( browserOptions.ssr ||= true; } + // Disable auto CSP. + browserOptions.security = { + autoCsp: false, + }; + + // Disable JSON build stats. + // These are not accessible with the dev server and can cause HMR fallbacks. + if (browserOptions.statsJson === true) { + context.logger.warn( + 'Build JSON statistics output (`statsJson` option) has been disabled.' + + ' The development server does not support this option.', + ); + } + browserOptions.statsJson = false; + // Set all packages as external to support Vite's prebundle caching browserOptions.externalPackages = serverOptions.prebundle; @@ -138,7 +158,7 @@ export async function* serveWithVite( process.setSourceMapsEnabled(true); } - // Enable to support link-based component style hot reloading (`NG_HMR_CSTYLES=0` can be used to disable selectively) + // Enable to support link-based component style hot reloading (`NG_HMR_CSTYLES=1` can be used to enable) browserOptions.externalRuntimeStyles = serverOptions.liveReload && serverOptions.hmr && useComponentStyleHmr; @@ -146,6 +166,14 @@ export async function* serveWithVite( // This will also replace file-based/inline styles as code if external runtime styles are not enabled. browserOptions.templateUpdates = serverOptions.liveReload && serverOptions.hmr && useComponentTemplateHmr; + if (browserOptions.templateUpdates) { + context.logger.warn( + 'Component HMR has been enabled.\n' + + 'If you encounter application reload issues, you can manually reload the page to bypass HMR and/or disable this feature with the' + + ' `--no-hmr` command line option.\n' + + 'Please consider reporting any issues you encounter here: https://github.com/angular/angular-cli/issues\n', + ); + } browserOptions.incrementalResults = true; @@ -168,7 +196,7 @@ export async function* serveWithVite( let serverUrl: URL | undefined; let hadError = false; const generatedFiles = new Map<string, OutputFileRecord>(); - const assetFiles = new Map<string, string>(); + const assetFiles = new Map<string, OutputAssetRecord>(); const externalMetadata: DevServerExternalResultMetadata = { implicitBrowser: [], implicitServer: [], @@ -200,6 +228,8 @@ export async function* serveWithVite( }, }); } + + yield { baseUrl: '', success: false }; continue; } // Clear existing error overlay on successful result @@ -212,6 +242,7 @@ export async function* serveWithVite( }); } + let needClientUpdate = true; switch (result.kind) { case ResultKind.Full: if (result.detail?.['htmlIndexPath']) { @@ -229,30 +260,21 @@ export async function* serveWithVite( assetFiles.clear(); componentStyles.clear(); generatedFiles.clear(); - for (const entry of Object.entries(result.files)) { - const [outputPath, file] = entry; - if (file.origin === 'disk') { - assetFiles.set('/' + normalizePath(outputPath), normalizePath(file.inputPath)); - continue; - } + for (const [outputPath, file] of Object.entries(result.files)) { updateResultRecord( outputPath, file, normalizePath, htmlIndexPath, generatedFiles, + assetFiles, componentStyles, // The initial build will not yet have a server setup !server, ); } - // Invalidate SSR module graph to ensure that only new rebuild is used and not stale component updates - if (server && browserOptions.ssr && templateUpdates.size > 0) { - server.moduleGraph.invalidateAll(); - } - // Clear stale template updates on code rebuilds templateUpdates.clear(); @@ -260,11 +282,15 @@ export async function* serveWithVite( case ResultKind.Incremental: assert(server, 'Builder must provide an initial full build before incremental results.'); + // Background updates should only update server files/options + needClientUpdate = !result.background; + for (const removed of result.removed) { const filePath = '/' + normalizePath(removed.path); generatedFiles.delete(filePath); assetFiles.delete(filePath); } + for (const modified of result.modified) { updateResultRecord( modified, @@ -272,9 +298,11 @@ export async function* serveWithVite( normalizePath, htmlIndexPath, generatedFiles, + assetFiles, componentStyles, ); } + for (const added of result.added) { updateResultRecord( added, @@ -282,6 +310,7 @@ export async function* serveWithVite( normalizePath, htmlIndexPath, generatedFiles, + assetFiles, componentStyles, ); } @@ -294,16 +323,6 @@ export async function* serveWithVite( 'Builder must provide an initial full build before component update results.', ); - // Invalidate SSR module graph to ensure that new component updates are used - // TODO: Use fine-grained invalidation of only the component update modules - if (browserOptions.ssr) { - server.moduleGraph.invalidateAll(); - const { ɵresetCompiledComponents } = (await server.ssrLoadModule('/main.server.mjs')) as { - ɵresetCompiledComponents: () => void; - }; - ɵresetCompiledComponents(); - } - for (const componentUpdate of result.updates) { if (componentUpdate.type === 'template') { templateUpdates.set(componentUpdate.id, componentUpdate.content); @@ -313,6 +332,7 @@ export async function* serveWithVite( }); } } + context.logger.info('Component update sent to client(s).'); continue; default: @@ -352,17 +372,22 @@ export async function* serveWithVite( if (server) { // Update fs allow list to include any new assets from the build option. server.config.server.fs.allow = [ - ...new Set([...server.config.server.fs.allow, ...assetFiles.values()]), + ...new Set([ + ...server.config.server.fs.allow, + ...[...assetFiles.values()].map(({ source }) => source), + ]), ]; - await handleUpdate( + const updatedFiles = await invalidateUpdatedFiles( normalizePath, generatedFiles, + assetFiles, server, - serverOptions, - context.logger, - componentStyles, ); + + if (needClientUpdate) { + handleUpdate(server, serverOptions, context.logger, componentStyles, updatedFiles); + } } else { const projectName = context.target?.project; if (!projectName) { @@ -431,6 +456,59 @@ export async function* serveWithVite( server = await createServer(serverConfiguration); await server.listen(); + // Setup builder context logging for browser clients + server.hot.on('angular:log', (data: { text: string; kind?: string }) => { + if (typeof data?.text !== 'string') { + context.logger.warn('Development server client sent invalid internal log event.'); + } + switch (data.kind) { + case 'error': + context.logger.error(`[CLIENT ERROR]: ${data.text}`); + break; + case 'warning': + context.logger.warn(`[CLIENT WARNING]: ${data.text}`); + break; + default: + context.logger.info(`[CLIENT INFO]: ${data.text}`); + break; + } + }); + + // Setup component HMR invalidation + // Invalidation occurs when the runtime cannot update a component + server.hot.on( + 'angular:invalidate', + (data: { id: string; message?: string; error?: boolean }) => { + if (typeof data?.id !== 'string') { + context.logger.warn( + 'Development server client sent invalid internal invalidate event.', + ); + } + + // Clear invalid template update + templateUpdates.delete(data.id); + + // Some cases are expected unsupported update scenarios but some may be errors. + // If an error occurred, log the error in addition to the invalidation. + if (data.error) { + context.logger.error( + `Component update failed${data.message ? `: ${data.message}` : '.'}` + + '\nPlease consider reporting the error at https://github.com/angular/angular-cli/issues', + ); + } else { + context.logger.warn( + `Component update unsupported${data.message ? `: ${data.message}` : '.'}`, + ); + } + + server?.ws.send({ + type: 'full-reload', + path: '*', + }); + context.logger.info('Page reload sent to client(s).'); + }, + ); + const urls = server.resolvedUrls; if (urls && (urls.local.length || urls.network.length)) { serverUrl = new URL(urls.local[0] ?? urls.network[0]); @@ -468,36 +546,40 @@ export async function* serveWithVite( await new Promise<void>((resolve) => (deferred = resolve)); } -async function handleUpdate( +/** + * Invalidates any updated asset or generated files and resets their `updated` state. + * This function also clears the server application cache when necessary. + * + * @returns A list of files that were updated and invalidated. + */ +async function invalidateUpdatedFiles( normalizePath: (id: string) => string, generatedFiles: Map<string, OutputFileRecord>, + assetFiles: Map<string, OutputAssetRecord>, server: ViteDevServer, - serverOptions: NormalizedDevServerOptions, - logger: BuilderContext['logger'], - componentStyles: Map<string, ComponentStyleRecord>, -): Promise<void> { +): Promise<string[]> { const updatedFiles: string[] = []; - let destroyAngularServerAppCalled = false; - // Invalidate any updated files - for (const [file, record] of generatedFiles) { + // Invalidate any updated asset + for (const [file, record] of assetFiles) { if (!record.updated) { continue; } - record.updated = false; - if (record.type === BuildOutputFileType.ServerApplication && !destroyAngularServerAppCalled) { - // Clear the server app cache - // This must be done before module invalidation. - const { ɵdestroyAngularServerApp } = (await server.ssrLoadModule('/main.server.mjs')) as { - ɵdestroyAngularServerApp: typeof destroyAngularServerApp; - }; + record.updated = false; + updatedFiles.push(file); + } - ɵdestroyAngularServerApp(); - destroyAngularServerAppCalled = true; + // Invalidate any updated files + let serverApplicationChanged = false; + for (const [file, record] of generatedFiles) { + if (!record.updated) { + continue; } + record.updated = false; updatedFiles.push(file); + serverApplicationChanged ||= record.type === BuildOutputFileType.ServerApplication; const updatedModules = server.moduleGraph.getModulesByFile( normalizePath(join(server.config.root, file)), @@ -505,13 +587,33 @@ async function handleUpdate( updatedModules?.forEach((m) => server.moduleGraph.invalidateModule(m)); } - if (!updatedFiles.length) { - return; + if (serverApplicationChanged) { + // Clear the server app cache and + // trigger module evaluation before reload to initiate dependency optimization. + const { ɵdestroyAngularServerApp } = (await server.ssrLoadModule('/main.server.mjs')) as { + ɵdestroyAngularServerApp: typeof destroyAngularServerApp; + }; + + ɵdestroyAngularServerApp(); } - if (destroyAngularServerAppCalled) { - // Trigger module evaluation before reload to initiate dependency optimization. - await server.ssrLoadModule('/main.server.mjs'); + return updatedFiles; +} + +/** + * Handles updates for the client by sending HMR or full page reload commands + * based on the updated files. It also ensures proper tracking of component styles and determines if + * a full reload is needed. + */ +function handleUpdate( + server: ViteDevServer, + serverOptions: NormalizedDevServerOptions, + logger: BuilderContext['logger'], + componentStyles: Map<string, ComponentStyleRecord>, + updatedFiles: string[], +): void { + if (!updatedFiles.length) { + return; } if (serverOptions.hmr) { @@ -557,7 +659,7 @@ async function handleUpdate( type: 'update', updates, }); - logger.info('HMR update sent to client(s).'); + logger.info('Stylesheet update sent to client(s).'); return; } @@ -584,10 +686,16 @@ function updateResultRecord( normalizePath: (id: string) => string, htmlIndexPath: string, generatedFiles: Map<string, OutputFileRecord>, + assetFiles: Map<string, OutputAssetRecord>, componentStyles: Map<string, ComponentStyleRecord>, initial = false, ): void { if (file.origin === 'disk') { + assetFiles.set('/' + normalizePath(outputPath), { + source: normalizePath(file.inputPath), + updated: !initial, + }); + return; } @@ -641,10 +749,11 @@ function updateResultRecord( } } +// eslint-disable-next-line max-lines-per-function export async function setupServer( serverOptions: NormalizedDevServerOptions, outputFiles: Map<string, OutputFileRecord>, - assets: Map<string, string>, + assets: Map<string, OutputAssetRecord>, preserveSymlinks: boolean | undefined, externalMetadata: DevServerExternalResultMetadata, ssrMode: ServerSsrMode, @@ -683,6 +792,15 @@ export async function setupServer( break; } + /** + * Required when using `externalDependencies` to prevent Vite load errors. + * + * @note Can be removed if Vite introduces native support for externals. + * @note Vite misresolves browser modules in SSR when accessing URLs with multiple segments + * (e.g., 'foo/bar'), as they are not correctly re-based from the base href. + */ + const preTransformRequests = + externalMetadata.explicitBrowser.length === 0 && ssrMode === ServerSsrMode.NoSsr; const cacheDir = join(serverOptions.cacheOptions.path, serverOptions.buildTarget.project, 'vite'); const configuration: InlineConfig = { configFile: false, @@ -712,7 +830,11 @@ export async function setupServer( mainFields: ['es2020', 'browser', 'module', 'main'], preserveSymlinks, }, + dev: { + preTransformRequests, + }, server: { + preTransformRequests, warmup: { ssrFiles, }, @@ -720,6 +842,7 @@ export async function setupServer( strictPort: true, host: serverOptions.host, open: serverOptions.open, + allowedHosts: serverOptions.allowedHosts, headers: serverOptions.headers, // Disable the websocket if live reload is disabled (false/undefined are the only valid values) ws: serverOptions.liveReload === false && serverOptions.hmr === false ? false : undefined, @@ -733,6 +856,9 @@ export async function setupServer( ? (proxy ?? {}) : proxy, cors: { + // This will add the header `Access-Control-Allow-Origin: http://example.com`, + // where `http://example.com` is the requesting origin. + origin: true, // Allow preflight requests to be proxied. preflightContinue: true, }, @@ -743,11 +869,12 @@ export async function setupServer( // The first two are required for Vite to function in prebundling mode (the default) and to load // the Vite client-side code for browser reloading. These would be available by default but when // the `allow` option is explicitly configured, they must be included manually. - allow: [cacheDir, join(serverOptions.workspaceRoot, 'node_modules'), ...assets.values()], + allow: [ + cacheDir, + join(serverOptions.workspaceRoot, 'node_modules'), + ...[...assets.values()].map(({ source }) => source), + ], }, - // This is needed when `externalDependencies` is used to prevent Vite load errors. - // NOTE: If Vite adds direct support for externals, this can be removed. - preTransformRequests: externalMetadata.explicitBrowser.length === 0, }, ssr: { // Note: `true` and `/.*/` have different sematics. When true, the `external` option is ignored. @@ -780,6 +907,7 @@ export async function setupServer( componentStyles, templateUpdates, ssrMode, + resetComponentUpdates: () => templateUpdates.clear(), }), createRemoveIdPrefixPlugin(externalMetadata.explicitBrowser), await createAngularSsrTransformPlugin(serverOptions.workspaceRoot), @@ -788,7 +916,7 @@ export async function setupServer( outputFiles, templateUpdates, external: externalMetadata.explicitBrowser, - skipViteClient: serverOptions.liveReload === false && serverOptions.hmr === false, + disableViteTransport: !serverOptions.liveReload, }), ], // Browser only optimizeDeps. (This does not run for SSR dependencies). diff --git a/packages/angular/build/src/builders/extract-i18n/builder.ts b/packages/angular/build/src/builders/extract-i18n/builder.ts index 8ade2b0a5609..5e44c31fa516 100644 --- a/packages/angular/build/src/builders/extract-i18n/builder.ts +++ b/packages/angular/build/src/builders/extract-i18n/builder.ts @@ -94,7 +94,7 @@ export async function execute( // eslint-disable-next-line @typescript-eslint/no-explicit-any checkFileSystem as any, extractionResult.messages, - 'warning', + normalizedOptions.i18nOptions.i18nDuplicateTranslation || 'warning', // eslint-disable-next-line @typescript-eslint/no-explicit-any extractionResult.basePath as any, ); diff --git a/packages/angular/build/src/builders/extract-i18n/index.ts b/packages/angular/build/src/builders/extract-i18n/index.ts index d751e3df5beb..c8328a67af72 100644 --- a/packages/angular/build/src/builders/extract-i18n/index.ts +++ b/packages/angular/build/src/builders/extract-i18n/index.ts @@ -6,9 +6,13 @@ * found in the LICENSE file at https://angular.dev/license */ -import { createBuilder } from '@angular-devkit/architect'; +import { Builder, createBuilder } from '@angular-devkit/architect'; import { execute } from './builder'; import type { Schema as ExtractI18nBuilderOptions } from './schema'; export { ExtractI18nBuilderOptions, execute }; -export default createBuilder<ExtractI18nBuilderOptions>(execute); + +const builder: Builder<ExtractI18nBuilderOptions> = + createBuilder<ExtractI18nBuilderOptions>(execute); + +export default builder; diff --git a/packages/angular_devkit/build_angular/src/builders/karma/application_builder.ts b/packages/angular/build/src/builders/karma/application_builder.ts similarity index 80% rename from packages/angular_devkit/build_angular/src/builders/karma/application_builder.ts rename to packages/angular/build/src/builders/karma/application_builder.ts index 3096dcb18e99..d311eee0e4a3 100644 --- a/packages/angular_devkit/build_angular/src/builders/karma/application_builder.ts +++ b/packages/angular/build/src/builders/karma/application_builder.ts @@ -6,7 +6,6 @@ * found in the LICENSE file at https://angular.dev/license */ -import { BuildOutputFileType } from '@angular/build'; import { ApplicationBuilderInternalOptions, Result, @@ -15,20 +14,23 @@ import { buildApplicationInternal, emitFilesToDisk, } from '@angular/build/private'; -import { BuilderContext, BuilderOutput } from '@angular-devkit/architect'; -import { randomUUID } from 'crypto'; +import type { BuilderContext, BuilderOutput } from '@angular-devkit/architect'; import glob from 'fast-glob'; -import * as fs from 'fs/promises'; -import { IncomingMessage, ServerResponse } from 'http'; -import type { Config, ConfigOptions, FilePattern, InlinePluginDef } from 'karma'; -import * as path from 'path'; -import { Observable, Subscriber, catchError, defaultIfEmpty, from, of, switchMap } from 'rxjs'; -import { Configuration } from 'webpack'; -import { ExecutionTransformer } from '../../transforms'; -import { OutputHashing } from '../browser-esbuild/schema'; +import type { Config, ConfigOptions, FilePattern, InlinePluginDef, Server } from 'karma'; +import { randomUUID } from 'node:crypto'; +import * as fs from 'node:fs/promises'; +import type { IncomingMessage, ServerResponse } from 'node:http'; +import { createRequire } from 'node:module'; +import * as path from 'node:path'; +import { ReadableStreamController } from 'node:stream/web'; +import { BuildOutputFileType } from '../../tools/esbuild/bundler-context'; +import { OutputHashing } from '../application/schema'; import { findTests, getTestEntrypoints } from './find-tests'; import { Schema as KarmaBuilderOptions } from './schema'; +const localResolve = createRequire(__filename).resolve; +const isWindows = process.platform === 'win32'; + interface BuildOptions extends ApplicationBuilderInternalOptions { // We know that it's always a string since we set it. outputPath: string; @@ -72,7 +74,14 @@ class AngularAssetsMiddleware { let err = null; try { const url = new URL(`http://${req.headers['host']}${req.url}`); - const file = this.latestBuildFiles.files[url.pathname.slice(1)]; + // Remove the leading slash from the URL path and convert to platform specific. + // The latest build files will use the platform path separator. + let pathname = url.pathname.slice(1); + if (isWindows) { + pathname = pathname.replaceAll(path.posix.sep, path.win32.sep); + } + + const file = this.latestBuildFiles.files[pathname]; if (file?.origin === 'disk') { this.serveFile(file.inputPath, undefined, res); @@ -160,6 +169,13 @@ class AngularPolyfillsPlugin { f.type = 'module'; } } + + // Add browser sourcemap support as a classic script + files.unshift({ + pattern: localResolve('source-map-support/browser-source-map-support.js'), + included: true, + watched: false, + }); }, AngularPolyfillsPlugin), ], }; @@ -170,7 +186,7 @@ function injectKarmaReporter( buildOptions: BuildOptions, buildIterator: AsyncIterator<Result>, karmaConfig: Config & ConfigOptions, - subscriber: Subscriber<BuilderOutput>, + controller: ReadableStreamController<BuilderOutput>, ) { const reporterName = 'angular-progress-notifier'; @@ -204,7 +220,7 @@ function injectKarmaReporter( } if (buildOutput.kind === ResultKind.Failure) { - subscriber.next({ success: false, message: 'Build failed' }); + controller.enqueue({ success: false, message: 'Build failed' }); } else if ( buildOutput.kind === ResultKind.Incremental || buildOutput.kind === ResultKind.Full @@ -226,9 +242,9 @@ function injectKarmaReporter( onRunComplete = function (_browsers: unknown, results: RunCompleteInfo) { if (results.exitCode === 0) { - subscriber.next({ success: true }); + controller.enqueue({ success: true }); } else { - subscriber.next({ success: false }); + controller.enqueue({ success: false }); } }; } @@ -254,44 +270,48 @@ export function execute( context: BuilderContext, karmaOptions: ConfigOptions, transforms: { - webpackConfiguration?: ExecutionTransformer<Configuration>; // The karma options transform cannot be async without a refactor of the builder implementation karmaOptions?: (options: ConfigOptions) => ConfigOptions; } = {}, -): Observable<BuilderOutput> { - return from(initializeApplication(options, context, karmaOptions, transforms)).pipe( - switchMap( - ([karma, karmaConfig, buildOptions, buildIterator]) => - new Observable<BuilderOutput>((subscriber) => { - // If `--watch` is explicitly enabled or if we are keeping the Karma - // process running, we should hook Karma into the build. - if (buildIterator) { - injectKarmaReporter(buildOptions, buildIterator, karmaConfig, subscriber); - } +): AsyncIterable<BuilderOutput> { + let karmaServer: Server; + + return new ReadableStream({ + async start(controller) { + let init; + try { + init = await initializeApplication(options, context, karmaOptions, transforms); + } catch (err) { + if (err instanceof ApplicationBuildError) { + controller.enqueue({ success: false, message: err.message }); + controller.close(); + + return; + } - // Complete the observable once the Karma server returns. - const karmaServer = new karma.Server(karmaConfig as Config, (exitCode) => { - subscriber.next({ success: exitCode === 0 }); - subscriber.complete(); - }); + throw err; + } - const karmaStart = karmaServer.start(); - - // Cleanup, signal Karma to exit. - return () => { - void karmaStart.then(() => karmaServer.stop()); - }; - }), - ), - catchError((err) => { - if (err instanceof ApplicationBuildError) { - return of({ success: false, message: err.message }); + const [karma, karmaConfig, buildOptions, buildIterator] = init; + + // If `--watch` is explicitly enabled or if we are keeping the Karma + // process running, we should hook Karma into the build. + if (buildIterator) { + injectKarmaReporter(buildOptions, buildIterator, karmaConfig, controller); } - throw err; - }), - defaultIfEmpty({ success: false }), - ); + // Close the stream once the Karma server returns. + karmaServer = new karma.Server(karmaConfig as Config, (exitCode) => { + controller.enqueue({ success: exitCode === 0 }); + controller.close(); + }); + + await karmaServer.start(); + }, + async cancel() { + await karmaServer?.stop(); + }, + }); } async function getProjectSourceRoot(context: BuilderContext): Promise<string> { @@ -314,16 +334,15 @@ function normalizePolyfills(polyfills: string | string[] | undefined): [string[] polyfills = []; } - const jasmineGlobalEntryPoint = - '@angular-devkit/build-angular/src/builders/karma/jasmine_global.js'; - const jasmineGlobalCleanupEntrypoint = - '@angular-devkit/build-angular/src/builders/karma/jasmine_global_cleanup.js'; + const jasmineGlobalEntryPoint = localResolve('./polyfills/jasmine_global.js'); + const jasmineGlobalCleanupEntrypoint = localResolve('./polyfills/jasmine_global_cleanup.js'); + const sourcemapEntrypoint = localResolve('./polyfills/init_sourcemaps.js'); const zoneTestingEntryPoint = 'zone.js/testing'; const polyfillsExludingZoneTesting = polyfills.filter((p) => p !== zoneTestingEntryPoint); return [ - polyfillsExludingZoneTesting.concat([jasmineGlobalEntryPoint]), + polyfillsExludingZoneTesting.concat([jasmineGlobalEntryPoint, sourcemapEntrypoint]), polyfillsExludingZoneTesting.length === polyfills.length ? [jasmineGlobalCleanupEntrypoint] : [jasmineGlobalCleanupEntrypoint, zoneTestingEntryPoint], @@ -351,18 +370,11 @@ async function initializeApplication( context: BuilderContext, karmaOptions: ConfigOptions, transforms: { - webpackConfiguration?: ExecutionTransformer<Configuration>; karmaOptions?: (options: ConfigOptions) => ConfigOptions; } = {}, ): Promise< [typeof import('karma'), Config & ConfigOptions, BuildOptions, AsyncIterator<Result> | null] > { - if (transforms.webpackConfiguration) { - context.logger.warn( - `This build is using the application builder but transforms.webpackConfiguration was provided. The transform will be ignored.`, - ); - } - const outputPath = path.join(context.workspaceRoot, 'dist/test-out', randomUUID()); const projectSourceRoot = await getProjectSourceRoot(context); @@ -376,7 +388,7 @@ async function initializeApplication( if (options.main) { entryPoints.set(mainName, options.main); } else { - entryPoints.set(mainName, '@angular-devkit/build-angular/src/builders/karma/init_test_bed.js'); + entryPoints.set(mainName, localResolve('./polyfills/init_test_bed.js')); } const instrumentForCoverage = options.codeCoverage @@ -396,21 +408,29 @@ async function initializeApplication( entryPoints, tsConfig: options.tsConfig, outputPath, - aot: false, + aot: options.aot, index: false, outputHashing: OutputHashing.None, optimization: false, - sourceMap: { - scripts: true, - styles: true, - vendor: true, - }, + sourceMap: options.codeCoverage + ? { + scripts: true, + styles: true, + vendor: true, + } + : options.sourceMap, instrumentForCoverage, styles: options.styles, + scripts: options.scripts, polyfills, webWorkerTsConfig: options.webWorkerTsConfig, watch: options.watch ?? !karmaOptions.singleRun, stylePreprocessorOptions: options.stylePreprocessorOptions, + inlineStyleLanguage: options.inlineStyleLanguage, + fileReplacements: options.fileReplacements, + define: options.define, + loader: options.loader, + externalDependencies: options.externalDependencies, }; // Build tests with `application` builder, using test files as entry points. @@ -430,7 +450,8 @@ async function initializeApplication( await writeTestFiles(buildOutput.files, buildOptions.outputPath); // We need to add this to the beginning *after* the testing framework has - // prepended its files. + // prepended its files. The output path is required for each since they are + // added later in the test process via a plugin. const polyfillsFile: FilePattern = { pattern: `${outputPath}/polyfills.js`, included: true, @@ -446,21 +467,33 @@ async function initializeApplication( watched: false, }; + karmaOptions.basePath = outputPath; + karmaOptions.files ??= []; + if (options.scripts?.length) { + // This should be more granular to support named bundles. + // However, it replicates the behavior of the Karma Webpack-based builder. + karmaOptions.files.push({ + pattern: `scripts.js`, + watched: false, + type: 'js', + }); + } + karmaOptions.files.push( // Serve global setup script. - { pattern: `${outputPath}/${mainName}.js`, type: 'module', watched: false }, + { pattern: `${mainName}.js`, type: 'module', watched: false }, // Serve all source maps. - { pattern: `${outputPath}/*.map`, included: false, watched: false }, + { pattern: `*.map`, included: false, watched: false }, // These are the test entrypoints. - { pattern: `${outputPath}/spec-*.js`, type: 'module', watched: false }, + { pattern: `spec-*.js`, type: 'module', watched: false }, ); if (hasChunkOrWorkerFiles(buildOutput.files)) { karmaOptions.files.push( // Allow loading of chunk-* files but don't include them all on load. { - pattern: `${outputPath}/{chunk,worker}-*.js`, + pattern: `{chunk,worker}-*.js`, type: 'module', included: false, watched: false, @@ -470,7 +503,7 @@ async function initializeApplication( if (options.styles?.length) { // Serve CSS outputs on page load, these are the global styles. - karmaOptions.files.push({ pattern: `${outputPath}/*.css`, type: 'css', watched: false }); + karmaOptions.files.push({ pattern: `*.css`, type: 'css', watched: false }); } const parsedKarmaConfig: Config & ConfigOptions = await karma.config.parseConfig( diff --git a/packages/angular_devkit/build_angular/src/builders/karma/find-tests.ts b/packages/angular/build/src/builders/karma/find-tests.ts similarity index 97% rename from packages/angular_devkit/build_angular/src/builders/karma/find-tests.ts rename to packages/angular/build/src/builders/karma/find-tests.ts index 077a938e0df5..ef7fddfd27de 100644 --- a/packages/angular_devkit/build_angular/src/builders/karma/find-tests.ts +++ b/packages/angular/build/src/builders/karma/find-tests.ts @@ -7,8 +7,8 @@ */ import glob, { isDynamicPattern } from 'fast-glob'; -import { PathLike, constants, promises as fs } from 'fs'; -import { basename, dirname, extname, join, relative } from 'path'; +import { PathLike, constants, promises as fs } from 'node:fs'; +import { basename, dirname, extname, join, relative } from 'node:path'; /* Go through all patterns and find unique list of files */ export async function findTests( diff --git a/packages/angular_devkit/build_angular/src/builders/karma/find-tests_spec.ts b/packages/angular/build/src/builders/karma/find-tests_spec.ts similarity index 100% rename from packages/angular_devkit/build_angular/src/builders/karma/find-tests_spec.ts rename to packages/angular/build/src/builders/karma/find-tests_spec.ts diff --git a/packages/angular/build/src/builders/karma/index.ts b/packages/angular/build/src/builders/karma/index.ts new file mode 100644 index 000000000000..ca7ee3ed827e --- /dev/null +++ b/packages/angular/build/src/builders/karma/index.ts @@ -0,0 +1,139 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { + type Builder, + type BuilderContext, + type BuilderOutput, + createBuilder, +} from '@angular-devkit/architect'; +import type { ConfigOptions } from 'karma'; +import { createRequire } from 'node:module'; +import path from 'node:path'; +import type { Schema as KarmaBuilderOptions } from './schema'; + +export type KarmaConfigOptions = ConfigOptions & { + buildWebpack?: unknown; + configFile?: string; +}; + +/** + * @experimental Direct usage of this function is considered experimental. + */ +export async function* execute( + options: KarmaBuilderOptions, + context: BuilderContext, + transforms: { + // The karma options transform cannot be async without a refactor of the builder implementation + karmaOptions?: (options: KarmaConfigOptions) => KarmaConfigOptions; + } = {}, +): AsyncIterable<BuilderOutput> { + const { execute } = await import('./application_builder'); + const karmaOptions = getBaseKarmaOptions(options, context); + + yield* execute(options, context, karmaOptions, transforms); +} + +function getBaseKarmaOptions( + options: KarmaBuilderOptions, + context: BuilderContext, +): KarmaConfigOptions { + let singleRun: boolean | undefined; + if (options.watch !== undefined) { + singleRun = !options.watch; + } + + // Determine project name from builder context target + const projectName = context.target?.project; + if (!projectName) { + throw new Error(`The 'karma' builder requires a target to be specified.`); + } + + const karmaOptions: KarmaConfigOptions = options.karmaConfig + ? {} + : getBuiltInKarmaConfig(context.workspaceRoot, projectName); + + karmaOptions.singleRun = singleRun; + + // Workaround https://github.com/angular/angular-cli/issues/28271, by clearing context by default + // for single run executions. Not clearing context for multi-run (watched) builds allows the + // Jasmine Spec Runner to be visible in the browser after test execution. + karmaOptions.client ??= {}; + karmaOptions.client.clearContext ??= singleRun ?? false; // `singleRun` defaults to `false` per Karma docs. + + // Convert browsers from a string to an array + if (typeof options.browsers === 'string' && options.browsers) { + karmaOptions.browsers = options.browsers.split(','); + } else if (options.browsers === false) { + karmaOptions.browsers = []; + } + + if (options.reporters) { + // Split along commas to make it more natural, and remove empty strings. + const reporters = options.reporters + .reduce<string[]>((acc, curr) => acc.concat(curr.split(',')), []) + .filter((x) => !!x); + + if (reporters.length > 0) { + karmaOptions.reporters = reporters; + } + } + + return karmaOptions; +} + +function getBuiltInKarmaConfig( + workspaceRoot: string, + projectName: string, +): ConfigOptions & Record<string, unknown> { + let coverageFolderName = projectName.charAt(0) === '@' ? projectName.slice(1) : projectName; + coverageFolderName = coverageFolderName.toLowerCase(); + + const workspaceRootRequire = createRequire(workspaceRoot + '/'); + + // Any changes to the config here need to be synced to: packages/schematics/angular/config/files/karma.conf.js.template + return { + basePath: '', + frameworks: ['jasmine'], + plugins: [ + 'karma-jasmine', + 'karma-chrome-launcher', + 'karma-jasmine-html-reporter', + 'karma-coverage', + ].map((p) => workspaceRootRequire(p)), + jasmineHtmlReporter: { + suppressAll: true, // removes the duplicated traces + }, + coverageReporter: { + dir: path.join(workspaceRoot, 'coverage', coverageFolderName), + subdir: '.', + reporters: [{ type: 'html' }, { type: 'text-summary' }], + }, + reporters: ['progress', 'kjhtml'], + browsers: ['Chrome'], + customLaunchers: { + // Chrome configured to run in a bazel sandbox. + // Disable the use of the gpu and `/dev/shm` because it causes Chrome to + // crash on some environments. + // See: + // https://github.com/puppeteer/puppeteer/blob/v1.0.0/docs/troubleshooting.md#tips + // https://stackoverflow.com/questions/50642308/webdriverexception-unknown-error-devtoolsactiveport-file-doesnt-exist-while-t + ChromeHeadlessNoSandbox: { + base: 'ChromeHeadless', + flags: ['--no-sandbox', '--headless', '--disable-gpu', '--disable-dev-shm-usage'], + }, + }, + restartOnFileChange: true, + }; +} + +export type { KarmaBuilderOptions }; + +const builder: Builder<KarmaBuilderOptions> = createBuilder<KarmaBuilderOptions>(execute); + +export default builder; diff --git a/packages/angular/build/src/builders/karma/polyfills/init_sourcemaps.js b/packages/angular/build/src/builders/karma/polyfills/init_sourcemaps.js new file mode 100644 index 000000000000..2f8934ca8b5c --- /dev/null +++ b/packages/angular/build/src/builders/karma/polyfills/init_sourcemaps.js @@ -0,0 +1,10 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +// eslint-disable-next-line no-undef +globalThis.sourceMapSupport?.install(); diff --git a/packages/angular_devkit/build_angular/src/builders/karma/init_test_bed.js b/packages/angular/build/src/builders/karma/polyfills/init_test_bed.js similarity index 100% rename from packages/angular_devkit/build_angular/src/builders/karma/init_test_bed.js rename to packages/angular/build/src/builders/karma/polyfills/init_test_bed.js diff --git a/packages/angular_devkit/build_angular/src/builders/karma/jasmine_global.js b/packages/angular/build/src/builders/karma/polyfills/jasmine_global.js similarity index 100% rename from packages/angular_devkit/build_angular/src/builders/karma/jasmine_global.js rename to packages/angular/build/src/builders/karma/polyfills/jasmine_global.js diff --git a/packages/angular_devkit/build_angular/src/builders/karma/jasmine_global_cleanup.js b/packages/angular/build/src/builders/karma/polyfills/jasmine_global_cleanup.js similarity index 100% rename from packages/angular_devkit/build_angular/src/builders/karma/jasmine_global_cleanup.js rename to packages/angular/build/src/builders/karma/polyfills/jasmine_global_cleanup.js diff --git a/packages/angular/build/src/builders/karma/schema.json b/packages/angular/build/src/builders/karma/schema.json new file mode 100644 index 000000000000..cf7125217846 --- /dev/null +++ b/packages/angular/build/src/builders/karma/schema.json @@ -0,0 +1,347 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "title": "Karma Target", + "description": "Karma target options for Build Facade.", + "type": "object", + "properties": { + "main": { + "type": "string", + "description": "The name of the main entry-point file." + }, + "tsConfig": { + "type": "string", + "description": "The name of the TypeScript configuration file." + }, + "karmaConfig": { + "type": "string", + "description": "The name of the Karma configuration file." + }, + "polyfills": { + "description": "A list of polyfills to include in the build. Can be a full path for a file, relative to the current workspace or module specifier. Example: 'zone.js'.", + "type": "array", + "items": { + "type": "string", + "uniqueItems": true + }, + "default": [] + }, + "assets": { + "type": "array", + "description": "List of static application assets.", + "default": [], + "items": { + "$ref": "#/definitions/assetPattern" + } + }, + "scripts": { + "description": "Global scripts to be included in the build.", + "type": "array", + "default": [], + "items": { + "oneOf": [ + { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "The file to include.", + "pattern": "\\.[cm]?jsx?$" + }, + "bundleName": { + "type": "string", + "pattern": "^[\\w\\-.]*$", + "description": "The bundle name for this extra entry point." + }, + "inject": { + "type": "boolean", + "description": "If the bundle will be referenced in the HTML file.", + "default": true + } + }, + "additionalProperties": false, + "required": ["input"] + }, + { + "type": "string", + "description": "The file to include.", + "pattern": "\\.[cm]?jsx?$" + } + ] + } + }, + "styles": { + "description": "Global styles to be included in the build.", + "type": "array", + "default": [], + "items": { + "oneOf": [ + { + "type": "object", + "properties": { + "input": { + "type": "string", + "description": "The file to include.", + "pattern": "\\.(?:css|scss|sass|less)$" + }, + "bundleName": { + "type": "string", + "pattern": "^[\\w\\-.]*$", + "description": "The bundle name for this extra entry point." + }, + "inject": { + "type": "boolean", + "description": "If the bundle will be referenced in the HTML file.", + "default": true + } + }, + "additionalProperties": false, + "required": ["input"] + }, + { + "type": "string", + "description": "The file to include.", + "pattern": "\\.(?:css|scss|sass|less)$" + } + ] + } + }, + "inlineStyleLanguage": { + "description": "The stylesheet language to use for the application's inline component styles.", + "type": "string", + "default": "css", + "enum": ["css", "less", "sass", "scss"] + }, + "stylePreprocessorOptions": { + "description": "Options to pass to style preprocessors.", + "type": "object", + "properties": { + "includePaths": { + "description": "Paths to include. Paths will be resolved to workspace root.", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "sass": { + "description": "Options to pass to the sass preprocessor.", + "type": "object", + "properties": { + "fatalDeprecations": { + "description": "A set of deprecations to treat as fatal. If a deprecation warning of any provided type is encountered during compilation, the compiler will error instead. If a Version is provided, then all deprecations that were active in that compiler version will be treated as fatal.", + "type": "array", + "items": { + "type": "string" + } + }, + "silenceDeprecations": { + "description": " A set of active deprecations to ignore. If a deprecation warning of any provided type is encountered during compilation, the compiler will ignore it instead.", + "type": "array", + "items": { + "type": "string" + } + }, + "futureDeprecations": { + "description": "A set of future deprecations to opt into early. Future deprecations passed here will be treated as active by the compiler, emitting warnings as necessary.", + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "externalDependencies": { + "description": "Exclude the listed external dependencies from being bundled into the bundle. Instead, the created bundle relies on these dependencies to be available during runtime.", + "type": "array", + "items": { + "type": "string" + }, + "default": [] + }, + "loader": { + "description": "Defines the type of loader to use with a specified file extension when used with a JavaScript `import`. `text` inlines the content as a string; `binary` inlines the content as a Uint8Array; `file` emits the file and provides the runtime location of the file; `empty` considers the content to be empty and not include it in bundles.", + "type": "object", + "patternProperties": { + "^\\.\\S+$": { "enum": ["text", "binary", "file", "empty"] } + } + }, + "define": { + "description": "Defines global identifiers that will be replaced with a specified constant value when found in any JavaScript or TypeScript code including libraries. The value will be used directly. String values must be put in quotes. Identifiers within Angular metadata such as Component Decorators will not be replaced.", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "include": { + "type": "array", + "items": { + "type": "string" + }, + "default": ["**/*.spec.ts"], + "description": "Globs of files to include, relative to project root. \nThere are 2 special cases:\n - when a path to directory is provided, all spec files ending \".spec.@(ts|tsx)\" will be included\n - when a path to a file is provided, and a matching spec file exists it will be included instead." + }, + "exclude": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "description": "Globs of files to exclude, relative to the project root." + }, + "sourceMap": { + "description": "Output source maps for scripts and styles. For more information, see https://angular.dev/reference/configs/workspace-config#source-map-configuration.", + "default": true, + "oneOf": [ + { + "type": "object", + "properties": { + "scripts": { + "type": "boolean", + "description": "Output source maps for all scripts.", + "default": true + }, + "styles": { + "type": "boolean", + "description": "Output source maps for all styles.", + "default": true + }, + "vendor": { + "type": "boolean", + "description": "Resolve vendor packages source maps.", + "default": false + } + }, + "additionalProperties": false + }, + { + "type": "boolean" + } + ] + }, + "progress": { + "type": "boolean", + "description": "Log progress to the console while building.", + "default": true + }, + "watch": { + "type": "boolean", + "description": "Run build when files change." + }, + "poll": { + "type": "number", + "description": "Enable and define the file watching poll time period in milliseconds." + }, + "preserveSymlinks": { + "type": "boolean", + "description": "Do not use the real path when resolving modules. If unset then will default to `true` if NodeJS option --preserve-symlinks is set." + }, + "browsers": { + "description": "Override which browsers tests are run against. Set to `false` to not use any browser.", + "oneOf": [ + { + "type": "string", + "description": "A comma seperate list of browsers to run tests against." + }, + { + "const": false, + "type": "boolean", + "description": "Does use run tests against a browser." + } + ] + }, + "codeCoverage": { + "type": "boolean", + "description": "Output a code coverage report.", + "default": false + }, + "codeCoverageExclude": { + "type": "array", + "description": "Globs to exclude from code coverage.", + "items": { + "type": "string" + }, + "default": [] + }, + "fileReplacements": { + "description": "Replace compilation source files with other compilation source files in the build.", + "type": "array", + "items": { + "$ref": "#/definitions/fileReplacement" + }, + "default": [] + }, + "reporters": { + "type": "array", + "description": "Karma reporters to use. Directly passed to the karma runner.", + "items": { + "type": "string" + } + }, + "webWorkerTsConfig": { + "type": "string", + "description": "TypeScript configuration for Web Worker modules." + }, + "aot": { + "type": "boolean", + "description": "Run tests using Ahead of Time compilation.", + "default": false + } + }, + "additionalProperties": false, + "required": ["tsConfig"], + "definitions": { + "assetPattern": { + "oneOf": [ + { + "type": "object", + "properties": { + "glob": { + "type": "string", + "description": "The pattern to match." + }, + "input": { + "type": "string", + "description": "The input directory path in which to apply 'glob'. Defaults to the project root." + }, + "output": { + "type": "string", + "default": "", + "description": "Absolute path within the output." + }, + "ignore": { + "description": "An array of globs to ignore.", + "type": "array", + "items": { + "type": "string" + } + } + }, + "additionalProperties": false, + "required": ["glob", "input"] + }, + { + "type": "string" + } + ] + }, + "fileReplacement": { + "type": "object", + "properties": { + "replace": { + "type": "string", + "pattern": "\\.(([cm]?[jt])sx?|json)$" + }, + "with": { + "type": "string", + "pattern": "\\.(([cm]?[jt])sx?|json)$" + } + }, + "additionalProperties": false, + "required": ["replace", "with"] + } + } +} diff --git a/packages/angular/build/src/builders/karma/tests/behavior/code-coverage_spec.ts b/packages/angular/build/src/builders/karma/tests/behavior/code-coverage_spec.ts new file mode 100644 index 000000000000..835f48724dbe --- /dev/null +++ b/packages/angular/build/src/builders/karma/tests/behavior/code-coverage_spec.ts @@ -0,0 +1,126 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { setTimeout } from 'node:timers/promises'; +import { tags } from '@angular-devkit/core'; +import { last, tap } from 'rxjs'; +import { execute } from '../../index'; +import { BASE_OPTIONS, KARMA_BUILDER_INFO, describeKarmaBuilder } from '../setup'; + +// In each of the test below we'll have to call setTimeout to wait for the coverage +// analysis to be done. This is because karma-coverage performs the analysis +// asynchronously but the promise that it returns is not awaited by Karma. +// Coverage analysis begins when onRunComplete() is invoked, and output files +// are subsequently written to disk. For more information, see +// https://github.com/karma-runner/karma-coverage/blob/32acafa90ed621abd1df730edb44ae55a4009c2c/lib/reporter.js#L221 + +const coveragePath = 'coverage/lcov.info'; + +describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget) => { + describe('Behavior: "codeCoverage"', () => { + beforeEach(async () => { + await setupTarget(harness); + }); + + it('should generate coverage report when file was previously processed by Babel', async () => { + // Force Babel transformation. + await harness.appendToFile('src/app/app.component.ts', '// async'); + + harness.useTarget('test', { + ...BASE_OPTIONS, + codeCoverage: true, + }); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + + await setTimeout(1000); + harness.expectFile(coveragePath).toExist(); + }); + + it('should exit with non-zero code when coverage is below threshold', async () => { + await harness.modifyFile('karma.conf.js', (content) => + content.replace( + 'coverageReporter: {', + `coverageReporter: { + check: { + global: { + statements: 100, + lines: 100, + branches: 100, + functions: 100 + } + }, + `, + ), + ); + + await harness.appendToFile( + 'src/app/app.component.ts', + ` + export function nonCovered(): boolean { + return true; + } + `, + ); + + harness.useTarget('test', { + ...BASE_OPTIONS, + codeCoverage: true, + }); + + await harness + .execute() + .pipe( + // In incremental mode, karma-coverage does not have the ability to mark a + // run as failed if code coverage does not pass. This is because it does + // the coverage asynchoronously and Karma does not await the promise + // returned by the plugin. + + // However the program must exit with non-zero exit code. + // This is a more common use case of coverage testing and must be supported. + last(), + tap((buildEvent) => expect(buildEvent.result?.success).toBeFalse()), + ) + .toPromise(); + }); + + it('should remapped instrumented code back to the original source', async () => { + await harness.modifyFile('karma.conf.js', (content) => content.replace('lcov', 'html')); + + await harness.modifyFile('src/app/app.component.ts', (content) => { + return content.replace( + `title = 'app'`, + tags.stripIndents` + title = 'app'; + + async foo() { + return 'foo'; + } + `, + ); + }); + + harness.useTarget('test', { + ...BASE_OPTIONS, + codeCoverage: true, + }); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + + await setTimeout(1000); + + harness + .expectFile('coverage/app.component.ts.html') + .content.toContain( + '<span class="fstat-no" title="function not covered" >async </span>foo()', + ); + }); + }); +}); diff --git a/packages/angular/build/src/builders/karma/tests/behavior/errors_spec.ts b/packages/angular/build/src/builders/karma/tests/behavior/errors_spec.ts new file mode 100644 index 000000000000..366cc2aa20a1 --- /dev/null +++ b/packages/angular/build/src/builders/karma/tests/behavior/errors_spec.ts @@ -0,0 +1,32 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { execute } from '../../index'; +import { BASE_OPTIONS, KARMA_BUILDER_INFO, describeKarmaBuilder } from '../setup'; + +describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget) => { + describe('Behavior: "Errors"', () => { + beforeEach(async () => { + await setupTarget(harness); + }); + + it('should fail when there is a TypeScript error', async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + }); + + await harness.appendToFile('src/app/app.component.spec.ts', `console.lo('foo')`); + + const { result } = await harness.executeOnce({ + outputLogsOnFailure: false, + }); + + expect(result?.success).toBeFalse(); + }); + }); +}); diff --git a/packages/angular/build/src/builders/karma/tests/behavior/fake-async_spec.ts b/packages/angular/build/src/builders/karma/tests/behavior/fake-async_spec.ts new file mode 100644 index 000000000000..355ddda8ed43 --- /dev/null +++ b/packages/angular/build/src/builders/karma/tests/behavior/fake-async_spec.ts @@ -0,0 +1,78 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { execute } from '../../index'; +import { BASE_OPTIONS, KARMA_BUILDER_INFO, describeKarmaBuilder } from '../setup'; + +describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget) => { + describe('Behavior: "fakeAsync"', () => { + beforeEach(async () => { + await setupTarget(harness); + }); + + it('loads zone.js/testing at the right time', async () => { + await harness.writeFiles({ + './src/app/app.component.ts': ` + import { Component } from '@angular/core'; + + @Component({ + selector: 'app-root', + standalone: false, + template: '<button (click)="changeMessage()" class="change">{{ message }}</button>', + }) + export class AppComponent { + message = 'Initial'; + + changeMessage() { + setTimeout(() => { + this.message = 'Changed'; + }, 1000); + } + }`, + './src/app/app.component.spec.ts': ` + import { TestBed, fakeAsync, tick } from '@angular/core/testing'; + import { By } from '@angular/platform-browser'; + import { AppComponent } from './app.component'; + + describe('AppComponent', () => { + beforeEach(() => TestBed.configureTestingModule({ + declarations: [AppComponent] + })); + + it('allows terrible things that break the most basic assumptions', fakeAsync(() => { + const fixture = TestBed.createComponent(AppComponent); + + const btn = fixture.debugElement + .query(By.css('button.change')); + + fixture.detectChanges(); + expect(btn.nativeElement.innerText).toBe('Initial'); + + btn.triggerEventHandler('click', null); + + // Pre-tick: Still the old value. + fixture.detectChanges(); + expect(btn.nativeElement.innerText).toBe('Initial'); + + tick(1500); + + fixture.detectChanges(); + expect(btn.nativeElement.innerText).toBe('Changed'); + })); + });`, + }); + + harness.useTarget('test', { + ...BASE_OPTIONS, + }); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + }); + }); +}); diff --git a/packages/angular/build/src/builders/karma/tests/behavior/jasmine-clock_spec.ts b/packages/angular/build/src/builders/karma/tests/behavior/jasmine-clock_spec.ts new file mode 100644 index 000000000000..302b549b5d2c --- /dev/null +++ b/packages/angular/build/src/builders/karma/tests/behavior/jasmine-clock_spec.ts @@ -0,0 +1,46 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { execute } from '../../index'; +import { BASE_OPTIONS, KARMA_BUILDER_INFO, describeKarmaBuilder } from '../setup'; + +describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget) => { + describe('Behavior: "jasmine.clock()"', () => { + beforeEach(async () => { + await setupTarget(harness); + }); + + it('can install and uninstall the mock clock', async () => { + await harness.writeFiles({ + './src/app/app.component.spec.ts': ` + import { AppComponent } from './app.component'; + + describe('Using jasmine.clock()', () => { + beforeEach(async () => { + jasmine.clock().install(); + }); + + afterEach(() => { + jasmine.clock().uninstall(); + }); + + it('runs a basic test case', () => { + expect(!!AppComponent).toBe(true); + }); + });`, + }); + + harness.useTarget('test', { + ...BASE_OPTIONS, + }); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + }); + }); +}); diff --git a/packages/angular/build/src/builders/karma/tests/behavior/module-cjs_spec.ts b/packages/angular/build/src/builders/karma/tests/behavior/module-cjs_spec.ts new file mode 100644 index 000000000000..d5c1c7b3d134 --- /dev/null +++ b/packages/angular/build/src/builders/karma/tests/behavior/module-cjs_spec.ts @@ -0,0 +1,35 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { execute } from '../../index'; +import { BASE_OPTIONS, KARMA_BUILDER_INFO, describeKarmaBuilder } from '../setup'; + +describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget) => { + describe('Behavior: "module commonjs"', () => { + beforeEach(async () => { + await setupTarget(harness); + }); + + it('should work when module is commonjs', async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + }); + + await harness.modifyFile('src/tsconfig.spec.json', (content) => { + const tsConfig = JSON.parse(content); + tsConfig.compilerOptions.module = 'commonjs'; + + return JSON.stringify(tsConfig); + }); + + const { result } = await harness.executeOnce(); + + expect(result?.success).toBeTrue(); + }); + }); +}); diff --git a/packages/angular/build/src/builders/karma/tests/behavior/rebuilds_spec.ts b/packages/angular/build/src/builders/karma/tests/behavior/rebuilds_spec.ts new file mode 100644 index 000000000000..e740b7adfcd6 --- /dev/null +++ b/packages/angular/build/src/builders/karma/tests/behavior/rebuilds_spec.ts @@ -0,0 +1,72 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { concatMap, count, debounceTime, distinctUntilChanged, take, timeout } from 'rxjs'; +import { execute } from '../../index'; +import { BASE_OPTIONS, KARMA_BUILDER_INFO, describeKarmaBuilder } from '../setup'; +import { BuilderOutput } from '@angular-devkit/architect'; + +describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget) => { + describe('Behavior: "Rebuilds"', () => { + beforeEach(async () => { + await setupTarget(harness); + }); + + it('recovers from compilation failures in watch mode', async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + watch: true, + }); + + const goodFile = await harness.readFile('src/app/app.component.spec.ts'); + + interface OutputCheck { + (result: BuilderOutput | undefined): Promise<void>; + } + + const expectedSequence: OutputCheck[] = [ + async (result) => { + // Karma run should succeed. + // Add a compilation error. + expect(result?.success).withContext('Initial test run should succeed').toBeTrue(); + // Add an syntax error to a non-main file. + await harness.appendToFile('src/app/app.component.spec.ts', `error`); + }, + async (result) => { + expect(result?.success) + .withContext('Test should fail after build error was introduced') + .toBeFalse(); + await harness.writeFile('src/app/app.component.spec.ts', goodFile); + }, + async (result) => { + expect(result?.success) + .withContext('Test should succeed again after build error was fixed') + .toBeTrue(); + }, + ]; + + const buildCount = await harness + .execute({ outputLogsOnFailure: false }) + .pipe( + timeout(60000), + debounceTime(500), + // There may be a sequence of {success:true} events that should be + // de-duplicated. + distinctUntilChanged((prev, current) => prev.result?.success === current.result?.success), + concatMap(async ({ result }, index) => { + await expectedSequence[index](result); + }), + take(expectedSequence.length), + count(), + ) + .toPromise(); + + expect(buildCount).toBe(expectedSequence.length); + }); + }); +}); diff --git a/packages/angular/build/src/builders/karma/tests/behavior/specs_spec.ts b/packages/angular/build/src/builders/karma/tests/behavior/specs_spec.ts new file mode 100644 index 000000000000..5cb56abe9b9d --- /dev/null +++ b/packages/angular/build/src/builders/karma/tests/behavior/specs_spec.ts @@ -0,0 +1,48 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { execute } from '../../index'; +import { BASE_OPTIONS, KARMA_BUILDER_INFO, describeKarmaBuilder } from '../setup'; + +describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget, isApp) => { + describe('Behavior: "Specs"', () => { + beforeEach(async () => { + await setupTarget(harness); + }); + + it('supports multiple spec files with same basename', async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + }); + + const collidingBasename = 'collision.spec.ts'; + + // src/app/app.component.spec.ts conflicts with this one: + await harness.writeFiles({ + [`src/app/a/foo-bar/${collidingBasename}`]: `/** Success! */`, + [`src/app/a-foo/bar/${collidingBasename}`]: `/** Success! */`, + [`src/app/a-foo-bar/${collidingBasename}`]: `/** Success! */`, + [`src/app/b/${collidingBasename}`]: `/** Success! */`, + }); + + const { result, logs } = await harness.executeOnce(); + + expect(result?.success).toBeTrue(); + + if (isApp) { + const bundleLog = logs.find((log) => + log.message.includes('Application bundle generation complete.'), + ); + expect(bundleLog?.message).toContain('spec-app-a-foo-bar-collision.spec.js'); + expect(bundleLog?.message).toContain('spec-app-a-foo-bar-collision-2.spec.js'); + expect(bundleLog?.message).toContain('spec-app-a-foo-bar-collision-3.spec.js'); + expect(bundleLog?.message).toContain('spec-app-b-collision.spec.js'); + } + }); + }); +}); diff --git a/packages/angular/build/src/builders/karma/tests/options/aot_spec.ts b/packages/angular/build/src/builders/karma/tests/options/aot_spec.ts new file mode 100644 index 000000000000..422e66e200e0 --- /dev/null +++ b/packages/angular/build/src/builders/karma/tests/options/aot_spec.ts @@ -0,0 +1,45 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { execute } from '../../index'; +import { BASE_OPTIONS, KARMA_BUILDER_INFO, describeKarmaBuilder } from '../setup'; + +describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget) => { + describe('Option: "aot"', () => { + it('enables aot', async () => { + await setupTarget(harness); + + await harness.writeFiles({ + 'src/aot.spec.ts': ` + import { Component } from '@angular/core'; + + describe('Hello', () => { + it('should *not* contain jit instructions', () => { + @Component({ + template: 'Hello', + }) + class Hello {} + + expect((Hello as any).ɵcmp.template.toString()).not.toContain('jit'); + }); + }); +`, + }); + + harness.useTarget('test', { + ...BASE_OPTIONS, + aot: true, + /** Cf. {@link ../builder-mode_spec.ts} */ + polyfills: ['zone.js', '@angular/localize/init', 'zone.js/testing'], + }); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + }); + }); +}); diff --git a/packages/angular/build/src/builders/karma/tests/options/assets_spec.ts b/packages/angular/build/src/builders/karma/tests/options/assets_spec.ts new file mode 100644 index 000000000000..b26e30d2daea --- /dev/null +++ b/packages/angular/build/src/builders/karma/tests/options/assets_spec.ts @@ -0,0 +1,101 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { execute } from '../../index'; +import { BASE_OPTIONS, KARMA_BUILDER_INFO, describeKarmaBuilder } from '../setup'; + +describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget) => { + describe('Option: "assets"', () => { + beforeEach(async () => { + await setupTarget(harness); + }); + + it('includes assets', async () => { + await harness.writeFiles({ + './src/string-file-asset.txt': 'string-file-asset.txt', + './src/string-folder-asset/file.txt': 'string-folder-asset.txt', + './src/glob-asset.txt': 'glob-asset.txt', + './src/folder/folder-asset.txt': 'folder-asset.txt', + './src/output-asset.txt': 'output-asset.txt', + './src/app/app.module.ts': ` + import { BrowserModule } from '@angular/platform-browser'; + import { NgModule } from '@angular/core'; + import { HttpClientModule } from '@angular/common/http'; + import { AppComponent } from './app.component'; + + @NgModule({ + declarations: [ + AppComponent + ], + imports: [ + BrowserModule, + HttpClientModule + ], + providers: [], + bootstrap: [AppComponent] + }) + export class AppModule { } + `, + './src/app/app.component.ts': ` + import { Component } from '@angular/core'; + import { HttpClient } from '@angular/common/http'; + + @Component({ + selector: 'app-root', + standalone: false, + template: '<p *ngFor="let asset of assets">{{ asset.content }}</p>' + }) + export class AppComponent { + public assets = [ + { path: './string-file-asset.txt', content: '' }, + { path: './string-folder-asset/file.txt', content: '' }, + { path: './glob-asset.txt', content: '' }, + { path: './folder/folder-asset.txt', content: '' }, + { path: './output-folder/output-asset.txt', content: '' }, + ]; + constructor(private http: HttpClient) { + this.assets.forEach(asset => http.get(asset.path, { responseType: 'text' }) + .subscribe(res => asset.content = res)); + } + }`, + './src/app/app.component.spec.ts': ` + import { TestBed } from '@angular/core/testing'; + import { HttpClientModule } from '@angular/common/http'; + import { AppComponent } from './app.component'; + + describe('AppComponent', () => { + beforeEach(() => TestBed.configureTestingModule({ + imports: [HttpClientModule], + declarations: [AppComponent] + })); + + it('should create the app', async () => { + const fixture = TestBed.createComponent(AppComponent); + await fixture.whenStable(); + const app = fixture.debugElement.componentInstance; + expect(app).toBeTruthy(); + }); + });`, + }); + + harness.useTarget('test', { + ...BASE_OPTIONS, + assets: [ + 'src/string-file-asset.txt', + 'src/string-folder-asset', + { glob: 'glob-asset.txt', input: 'src/', output: '/' }, + { glob: 'output-asset.txt', input: 'src/', output: '/output-folder' }, + { glob: '**/*', input: 'src/folder', output: '/folder' }, + ], + }); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + }); + }); +}); diff --git a/packages/angular/build/src/builders/karma/tests/options/code-coverage-exclude_spec.ts b/packages/angular/build/src/builders/karma/tests/options/code-coverage-exclude_spec.ts new file mode 100644 index 000000000000..082275dfd0b6 --- /dev/null +++ b/packages/angular/build/src/builders/karma/tests/options/code-coverage-exclude_spec.ts @@ -0,0 +1,71 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ +import { setTimeout } from 'node:timers/promises'; +import { execute } from '../../index'; +import { BASE_OPTIONS, KARMA_BUILDER_INFO, describeKarmaBuilder } from '../setup'; + +// In each of the test below we'll have to call setTimeout to wait for the coverage +// analysis to be done. This is because karma-coverage performs the analysis +// asynchronously but the promise that it returns is not awaited by Karma. +// Coverage analysis begins when onRunComplete() is invoked, and output files +// are subsequently written to disk. For more information, see +// https://github.com/karma-runner/karma-coverage/blob/32acafa90ed621abd1df730edb44ae55a4009c2c/lib/reporter.js#L221 + +const coveragePath = 'coverage/lcov.info'; + +describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget) => { + describe('Option: "codeCoverageExclude"', () => { + beforeEach(async () => { + await setupTarget(harness); + }); + + it('should exclude file from coverage when set', async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + codeCoverage: true, + codeCoverageExclude: ['**/app.component.ts'], + }); + + const { result } = await harness.executeOnce(); + + expect(result?.success).toBeTrue(); + + await setTimeout(1000); + harness.expectFile(coveragePath).content.not.toContain('app.component.ts'); + }); + + it('should exclude file from coverage when set when glob starts with a forward slash', async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + codeCoverage: true, + codeCoverageExclude: ['/**/app.component.ts'], + }); + + const { result } = await harness.executeOnce(); + + expect(result?.success).toBeTrue(); + + await setTimeout(1000); + harness.expectFile(coveragePath).content.not.toContain('app.component.ts'); + }); + + it('should not exclude file from coverage when set', async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + codeCoverage: true, + }); + + const { result } = await harness.executeOnce(); + + expect(result?.success).toBeTrue(); + + await setTimeout(1000); + harness.expectFile(coveragePath).content.toContain('app.component.ts'); + }); + }); +}); diff --git a/packages/angular/build/src/builders/karma/tests/options/code-coverage_spec.ts b/packages/angular/build/src/builders/karma/tests/options/code-coverage_spec.ts new file mode 100644 index 000000000000..a8849ba643ef --- /dev/null +++ b/packages/angular/build/src/builders/karma/tests/options/code-coverage_spec.ts @@ -0,0 +1,116 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { setTimeout } from 'node:timers/promises'; +import { execute } from '../../index'; +import { BASE_OPTIONS, KARMA_BUILDER_INFO, describeKarmaBuilder } from '../setup'; + +// In each of the test below we'll have to call setTimeout to wait for the coverage +// analysis to be done. This is because karma-coverage performs the analysis +// asynchronously but the promise that it returns is not awaited by Karma. +// Coverage analysis begins when onRunComplete() is invoked, and output files +// are subsequently written to disk. For more information, see +// https://github.com/karma-runner/karma-coverage/blob/32acafa90ed621abd1df730edb44ae55a4009c2c/lib/reporter.js#L221 + +const coveragePath = 'coverage/lcov.info'; + +describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget) => { + describe('Option: "codeCoverage"', () => { + beforeEach(async () => { + await setupTarget(harness); + }); + + it('should generate coverage report when option is set to true', async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + codeCoverage: true, + }); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + + await setTimeout(1000); + harness.expectFile(coveragePath).toExist(); + }); + + it('should not generate coverage report when option is set to false', async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + codeCoverage: false, + }); + + const { result } = await harness.executeOnce(); + + expect(result?.success).toBeTrue(); + + await setTimeout(1000); + harness.expectFile(coveragePath).toNotExist(); + }); + + it('should not generate coverage report when option is unset', async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + }); + + const { result } = await harness.executeOnce(); + + expect(result?.success).toBeTrue(); + + await setTimeout(1000); + harness.expectFile(coveragePath).toNotExist(); + }); + + it(`should collect coverage from paths in 'sourceRoot'`, async () => { + await harness.writeFiles({ + './dist/my-lib/index.d.ts': ` + export declare const title = 'app'; + `, + './dist/my-lib/index.js': ` + export const title = 'app'; + `, + './src/app/app.component.ts': ` + import { Component } from '@angular/core'; + import { title } from 'my-lib'; + + @Component({ + selector: 'app-root', + standalone: false, + templateUrl: './app.component.html', + styleUrls: ['./app.component.css'] + }) + export class AppComponent { + title = title; + } + `, + }); + await harness.modifyFile('tsconfig.json', (content) => + content.replace( + /"baseUrl": ".\/",/, + ` + "baseUrl": "./", + "paths": { + "my-lib": [ + "./dist/my-lib" + ] + }, + `, + ), + ); + + harness.useTarget('test', { + ...BASE_OPTIONS, + codeCoverage: true, + }); + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + + await setTimeout(1000); + harness.expectFile(coveragePath).content.not.toContain('my-lib'); + }); + }); +}); diff --git a/packages/angular/build/src/builders/karma/tests/options/exclude_spec.ts b/packages/angular/build/src/builders/karma/tests/options/exclude_spec.ts new file mode 100644 index 000000000000..08623b689a7e --- /dev/null +++ b/packages/angular/build/src/builders/karma/tests/options/exclude_spec.ts @@ -0,0 +1,67 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { execute } from '../../index'; +import { BASE_OPTIONS, KARMA_BUILDER_INFO, describeKarmaBuilder } from '../setup'; + +describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget) => { + describe('Option: "exclude"', () => { + beforeEach(async () => { + await setupTarget(harness); + }); + + beforeEach(async () => { + await harness.writeFiles({ + 'src/app/error.spec.ts': ` + describe('Error spec', () => { + it('should error', () => { + expect(false).toBe(true); + }); + });`, + }); + }); + + it(`should not exclude any spec when exclude is not supplied`, async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + }); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeFalse(); + }); + + it(`should exclude spec that matches the 'exclude' glob pattern`, async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + exclude: ['**/error.spec.ts'], + }); + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + }); + + it(`should exclude spec that matches the 'exclude' pattern with a relative project root`, async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + exclude: ['src/app/error.spec.ts'], + }); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + }); + + it(`should exclude spec that matches the 'exclude' pattern prefixed with a slash`, async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + exclude: ['/src/app/error.spec.ts'], + }); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + }); + }); +}); diff --git a/packages/angular/build/src/builders/karma/tests/options/include_spec.ts b/packages/angular/build/src/builders/karma/tests/options/include_spec.ts new file mode 100644 index 000000000000..89ad4e307286 --- /dev/null +++ b/packages/angular/build/src/builders/karma/tests/options/include_spec.ts @@ -0,0 +1,94 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { execute } from '../../index'; +import { BASE_OPTIONS, KARMA_BUILDER_INFO, describeKarmaBuilder } from '../setup'; + +describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget) => { + describe('Option: "include"', () => { + beforeEach(async () => { + await setupTarget(harness); + }); + + it(`should fail when includes doesn't match any files`, async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + include: ['abc.spec.ts', 'def.spec.ts'], + }); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeFalse(); + }); + + [ + { + test: 'relative path from workspace to spec', + input: ['src/app/app.component.spec.ts'], + }, + { + test: 'relative path from workspace to file', + input: ['src/app/app.component.ts'], + }, + { + test: 'relative path from project root to spec', + input: ['app/services/test.service.spec.ts'], + }, + { + test: 'relative path from project root to file', + input: ['app/services/test.service.ts'], + }, + { + test: 'relative path from workspace to directory', + input: ['src/app/services'], + }, + { + test: 'relative path from project root to directory', + input: ['app/services'], + }, + { + test: 'glob with spec suffix', + input: ['**/*.pipe.spec.ts', '**/*.pipe.spec.ts', '**/*test.service.spec.ts'], + }, + { + test: 'glob with forward slash and spec suffix', + input: ['/**/*test.service.spec.ts'], + }, + ].forEach((options, index) => { + it(`should work with ${options.test} (${index})`, async () => { + await harness.writeFiles({ + 'src/app/services/test.service.spec.ts': ` + describe('TestService', () => { + it('should succeed', () => { + expect(true).toBe(true); + }); + });`, + 'src/app/failing.service.spec.ts': ` + describe('FailingService', () => { + it('should be ignored', () => { + expect(true).toBe(false); + }); + });`, + 'src/app/property.pipe.spec.ts': ` + describe('PropertyPipe', () => { + it('should succeed', () => { + expect(true).toBe(true); + }); + });`, + }); + + harness.useTarget('test', { + ...BASE_OPTIONS, + include: options.input, + }); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + }); + }); + }); +}); diff --git a/packages/angular/build/src/builders/karma/tests/options/main_spec.ts b/packages/angular/build/src/builders/karma/tests/options/main_spec.ts new file mode 100644 index 000000000000..104b15cec31c --- /dev/null +++ b/packages/angular/build/src/builders/karma/tests/options/main_spec.ts @@ -0,0 +1,51 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { execute } from '../../index'; +import { BASE_OPTIONS, KARMA_BUILDER_INFO, describeKarmaBuilder } from '../setup'; + +describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget) => { + describe('Option: "main"', () => { + beforeEach(async () => { + await setupTarget(harness); + }); + + beforeEach(async () => { + await harness.writeFiles({ + 'src/magic.ts': `Object.assign(globalThis, {MAGIC_IS_REAL: true});`, + 'src/magic.spec.ts': ` + declare const MAGIC_IS_REAL: boolean; + describe('Magic', () => { + it('can be scientificially proven to be true', () => { + expect(typeof MAGIC_IS_REAL).toBe('boolean'); + }); + });`, + }); + // Remove this test, we don't expect it to pass with our setup script. + await harness.removeFile('src/app/app.component.spec.ts'); + + // Add src/magic.ts to tsconfig. + interface TsConfig { + files: string[]; + } + const tsConfig = JSON.parse(harness.readFile('src/tsconfig.spec.json')) as TsConfig; + tsConfig.files.push('magic.ts'); + await harness.writeFile('src/tsconfig.spec.json', JSON.stringify(tsConfig)); + }); + + it('uses custom setup file', async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + main: './src/magic.ts', + }); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + }); + }); +}); diff --git a/packages/angular/build/src/builders/karma/tests/options/styles_spec.ts b/packages/angular/build/src/builders/karma/tests/options/styles_spec.ts new file mode 100644 index 000000000000..6ede50e6945c --- /dev/null +++ b/packages/angular/build/src/builders/karma/tests/options/styles_spec.ts @@ -0,0 +1,146 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { execute } from '../../index'; +import { BASE_OPTIONS, KARMA_BUILDER_INFO, describeKarmaBuilder } from '../setup'; + +describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget) => { + describe('Option: "styles"', () => { + beforeEach(async () => { + await setupTarget(harness); + }); + + it(`processes 'styles.css' styles`, async () => { + await harness.writeFiles({ + 'src/styles.css': 'p {display: none}', + 'src/app/app.component.ts': ` + import { Component } from '@angular/core'; + + @Component({ + selector: 'app-root', + standalone: false, + template: '<p>Hello World</p>' + }) + export class AppComponent { + } + `, + 'src/app/app.component.spec.ts': ` + import { TestBed } from '@angular/core/testing'; + import { AppComponent } from './app.component'; + + describe('AppComponent', () => { + beforeEach(() => TestBed.configureTestingModule({ + declarations: [AppComponent] + })); + + it('should not contain text that is hidden via css', () => { + const fixture = TestBed.createComponent(AppComponent); + expect(fixture.nativeElement.innerText).not.toContain('Hello World'); + }); + });`, + }); + + harness.useTarget('test', { + ...BASE_OPTIONS, + styles: ['src/styles.css'], + }); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + }); + + it('processes style with bundleName', async () => { + await harness.writeFiles({ + 'src/dark-theme.css': '', + 'src/app/app.module.ts': ` + import { BrowserModule } from '@angular/platform-browser'; + import { NgModule } from '@angular/core'; + import { HttpClientModule } from '@angular/common/http'; + import { AppComponent } from './app.component'; + @NgModule({ + declarations: [ + AppComponent + ], + imports: [ + BrowserModule, + HttpClientModule + ], + providers: [], + bootstrap: [AppComponent] + }) + export class AppModule { } + `, + 'src/app/app.component.ts': ` + import { Component } from '@angular/core'; + import { HttpClient } from '@angular/common/http'; + @Component({ + selector: 'app-root', + standalone: false, + template: '<p *ngFor="let asset of css">{{ asset.content }}</p>' + }) + export class AppComponent { + public assets = [ + { path: './dark-theme.css', content: '' }, + ]; + constructor(private http: HttpClient) { + this.assets.forEach(asset => http.get(asset.path, { responseType: 'text' }) + .subscribe(res => asset.content = res)); + } + }`, + 'src/app/app.component.spec.ts': ` + import { TestBed } from '@angular/core/testing'; + import { HttpClientModule } from '@angular/common/http'; + import { AppComponent } from './app.component'; + describe('AppComponent', () => { + beforeEach(() => TestBed.configureTestingModule({ + imports: [HttpClientModule], + declarations: [AppComponent] + })); + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.debugElement.componentInstance; + expect(app).toBeTruthy(); + }); + });`, + }); + + harness.useTarget('test', { + ...BASE_OPTIONS, + styles: [ + { + inject: false, + input: 'src/dark-theme.css', + bundleName: 'dark-theme', + }, + ], + }); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + }); + + it('fails and shows an error if style does not exist', async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + styles: ['src/test-style-a.css'], + }); + + const { result, logs } = await harness.executeOnce({ outputLogsOnFailure: false }); + + expect(result?.success).toBeFalse(); + expect(logs).toContain( + jasmine.objectContaining({ + level: 'error', + message: jasmine.stringMatching( + /(Can't|Could not) resolve ['"]src\/test-style-a.css['"]/, + ), + }), + ); + }); + }); +}); diff --git a/packages/angular/build/src/builders/karma/tests/options/web-worker-tsconfig_spec.ts b/packages/angular/build/src/builders/karma/tests/options/web-worker-tsconfig_spec.ts new file mode 100644 index 000000000000..9c1d6af166d0 --- /dev/null +++ b/packages/angular/build/src/builders/karma/tests/options/web-worker-tsconfig_spec.ts @@ -0,0 +1,124 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { execute } from '../../index'; +import { BASE_OPTIONS, KARMA_BUILDER_INFO, describeKarmaBuilder } from '../setup'; + +describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget, isApplicationBuilder) => { + describe('Option: "webWorkerTsConfig"', () => { + beforeEach(async () => { + await setupTarget(harness); + }); + + beforeEach(async () => { + await harness.writeFiles({ + 'src/tsconfig.worker.json': ` + { + "extends": "../tsconfig.json", + "compilerOptions": { + "outDir": "../out-tsc/worker", + "lib": [ + "es2018", + "webworker" + ], + "types": [] + }, + "include": [ + "**/*.worker.ts", + ] + }`, + 'src/app/app.worker.ts': ` + /// <reference lib="webworker" /> + + const prefix: string = 'Data: '; + addEventListener('message', ({ data }) => { + postMessage(prefix + data); + }); + `, + 'src/app/app.component.ts': ` + import { Component } from '@angular/core'; + + @Component({ + selector: 'app-root', + standalone: false, + template: '' + }) + export class AppComponent { + worker = new Worker(new URL('./app.worker', import.meta.url)); + } + `, + './src/app/app.component.spec.ts': ` + import { TestBed } from '@angular/core/testing'; + import { AppComponent } from './app.component'; + + describe('AppComponent', () => { + beforeEach(() => TestBed.configureTestingModule({ + declarations: [AppComponent] + })); + + it('worker should be defined', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.debugElement.componentInstance; + expect(app.worker).toBeDefined(); + }); + });`, + }); + }); + + // Web workers work with the application builder _without_ setting webWorkerTsConfig. + if (isApplicationBuilder) { + it(`should parse web workers when "webWorkerTsConfig" is not set or set to undefined.`, async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + webWorkerTsConfig: undefined, + }); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + }); + } else { + it(`should not parse web workers when "webWorkerTsConfig" is not set or set to undefined.`, async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + webWorkerTsConfig: undefined, + }); + + await harness.writeFile( + './src/app/app.component.spec.ts', + ` + import { TestBed } from '@angular/core/testing'; + import { AppComponent } from './app.component'; + + describe('AppComponent', () => { + beforeEach(() => TestBed.configureTestingModule({ + declarations: [AppComponent] + })); + + it('worker should throw', () => { + expect(() => TestBed.createComponent(AppComponent)) + .toThrowError(/Failed to construct 'Worker'/); + }); + });`, + ); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + }); + } + + it(`should parse web workers when "webWorkerTsConfig" is set.`, async () => { + harness.useTarget('test', { + ...BASE_OPTIONS, + webWorkerTsConfig: 'src/tsconfig.worker.json', + }); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + }); + }); +}); diff --git a/packages/angular/build/src/builders/karma/tests/setup.ts b/packages/angular/build/src/builders/karma/tests/setup.ts new file mode 100644 index 000000000000..dd0ad34f314b --- /dev/null +++ b/packages/angular/build/src/builders/karma/tests/setup.ts @@ -0,0 +1,142 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { Schema } from '../schema'; +import { BuilderHandlerFn } from '@angular-devkit/architect'; +import { json } from '@angular-devkit/core'; +import { ApplicationBuilderOptions as ApplicationSchema, buildApplication } from '@angular/build'; +import * as path from 'node:path'; +import { readFileSync } from 'node:fs'; +import { + BuilderHarness, + host, + JasmineBuilderHarness, +} from '../../../../../../../modules/testing/builder/src'; + +// TODO: Consider using package.json imports field instead of relative path +// after the switch to rules_js. +export * from '../../../../../../../modules/testing/builder/src'; + +export const KARMA_BUILDER_INFO = Object.freeze({ + name: '@angular/build:karma', + schemaPath: __dirname + '/../schema.json', +}); + +/** + * Contains all required karma builder fields. + * Also disables progress reporting to minimize logging output. + */ +export const BASE_OPTIONS = Object.freeze<Schema>({ + polyfills: ['./src/polyfills', 'zone.js/testing'], + tsConfig: 'src/tsconfig.spec.json', + karmaConfig: 'karma.conf.js', + browsers: 'ChromeHeadlessCI', + progress: false, + watch: false, +}); + +const optionSchemaCache = new Map<string, json.schema.JsonSchema>(); + +function getCachedSchema(options: { schemaPath: string }): json.schema.JsonSchema { + let optionSchema = optionSchemaCache.get(options.schemaPath); + if (optionSchema === undefined) { + optionSchema = JSON.parse(readFileSync(options.schemaPath, 'utf8')) as json.schema.JsonSchema; + optionSchemaCache.set(options.schemaPath, optionSchema); + } + return optionSchema; +} + +/** + * Contains all required application builder fields. + * Also disables progress reporting to minimize logging output. + */ +export const APPLICATION_BASE_OPTIONS = Object.freeze<ApplicationSchema>({ + index: 'src/index.html', + browser: 'src/main.ts', + outputPath: 'dist', + tsConfig: 'src/tsconfig.app.json', + progress: false, + + // Disable optimizations + optimization: false, + + // Enable polling (if a test enables watch mode). + // This is a workaround for bazel isolation file watch not triggering in tests. + poll: 100, +}); + +// TODO: Remove and use import after Vite-based dev server is moved to new package +export const APPLICATION_BUILDER_INFO = Object.freeze({ + name: '@angular/build:application', + schemaPath: path.join( + path.dirname(require.resolve('@angular/build/package.json')), + 'src/builders/application/schema.json', + ), +}); + +/** + * Adds a `build` target to a builder test harness for the application builder with the base options + * used by the application builder tests. + * + * @param harness The builder harness to use when setting up the application builder target + * @param extraOptions The additional options that should be used when executing the target. + */ +export async function setupApplicationTarget<T>( + harness: BuilderHarness<T>, + extraOptions?: Partial<ApplicationSchema>, +): Promise<void> { + const applicationSchema = getCachedSchema(APPLICATION_BUILDER_INFO); + + harness.withBuilderTarget( + 'build', + buildApplication, + { + ...APPLICATION_BASE_OPTIONS, + ...extraOptions, + }, + { + builderName: APPLICATION_BUILDER_INFO.name, + optionSchema: applicationSchema, + }, + ); + + // For application-builder based targets, the localize polyfill needs to be explicit. + await harness.appendToFile('src/polyfills.ts', `import '@angular/localize/init';`); +} + +/** Runs the test against both an application- and a browser-builder context. */ +export function describeKarmaBuilder<T>( + builderHandler: BuilderHandlerFn<T & json.JsonObject>, + options: { name?: string; schemaPath: string }, + specDefinitions: ( + harness: JasmineBuilderHarness<T>, + setupTarget: typeof setupApplicationTarget, + isApplicationTarget: true, + ) => void, +) { + const optionSchema = getCachedSchema(options); + const harness = new JasmineBuilderHarness<T>(builderHandler, host, { + builderName: options.name, + optionSchema, + }); + + describe(options.name || builderHandler.name, () => { + beforeEach(async () => { + await host.initialize().toPromise(); + + await harness.modifyFile('karma.conf.js', (content) => { + return content + .replace(`, '@angular-devkit/build-angular'`, '') + .replace(`require('@angular-devkit/build-angular/plugins/karma'),`, ''); + }); + }); + afterEach(() => host.restore().toPromise()); + + specDefinitions(harness, setupApplicationTarget, true); + }); +} diff --git a/packages/angular/build/src/builders/ng-packagr/index.ts b/packages/angular/build/src/builders/ng-packagr/index.ts index df32d691aa43..94824ea5ecd8 100644 --- a/packages/angular/build/src/builders/ng-packagr/index.ts +++ b/packages/angular/build/src/builders/ng-packagr/index.ts @@ -6,9 +6,12 @@ * found in the LICENSE file at https://angular.dev/license */ -import { createBuilder } from '@angular-devkit/architect'; +import { Builder, createBuilder } from '@angular-devkit/architect'; import { execute } from './builder'; import type { Schema as NgPackagrBuilderOptions } from './schema'; export { type NgPackagrBuilderOptions, execute }; -export default createBuilder<NgPackagrBuilderOptions>(execute); + +const builder: Builder<NgPackagrBuilderOptions> = createBuilder<NgPackagrBuilderOptions>(execute); + +export default builder; diff --git a/packages/angular/build/src/private.ts b/packages/angular/build/src/private.ts index 069c7f25c868..25eb48f22a86 100644 --- a/packages/angular/build/src/private.ts +++ b/packages/angular/build/src/private.ts @@ -13,6 +13,7 @@ * their existence may change in any future version. */ +import { NoopCompilation, createAngularCompilation } from './tools/angular/compilation'; import { CompilerPluginOptions, createCompilerPlugin as internalCreateCompilerPlugin, @@ -25,6 +26,7 @@ export { buildApplicationInternal } from './builders/application'; export type { ApplicationBuilderInternalOptions } from './builders/application/options'; export { type Result, type ResultFile, ResultKind } from './builders/application/results'; export { serveWithVite } from './builders/dev-server/vite-server'; +export { execute as executeKarmaInternal } from './builders/karma/application_builder'; // Tools export * from './tools/babel/plugins'; @@ -38,11 +40,17 @@ export { createJitResourceTransformer } from './tools/angular/transformers/jit-r export { JavaScriptTransformer } from './tools/esbuild/javascript-transformer'; export function createCompilerPlugin( - pluginOptions: CompilerPluginOptions, + pluginOptions: CompilerPluginOptions & { + browserOnlyBuild?: boolean; + noopTypeScriptCompilation?: boolean; + }, styleOptions: BundleStylesheetOptions & { inlineStyleLanguage: string }, ): import('esbuild').Plugin { return internalCreateCompilerPlugin( pluginOptions, + pluginOptions.noopTypeScriptCompilation + ? new NoopCompilation() + : () => createAngularCompilation(!!pluginOptions.jit, !!pluginOptions.browserOnlyBuild), new ComponentStylesheetBundler( styleOptions, styleOptions.inlineStyleLanguage, @@ -75,3 +83,4 @@ export { augmentAppWithServiceWorker } from './utils/service-worker'; export { type BundleStats, generateBuildStatsTable } from './utils/stats-table'; export { getSupportedBrowsers } from './utils/supported-browsers'; export { assertCompatibleAngularVersion } from './utils/version'; +export { findTests, getTestEntrypoints } from './builders/karma/find-tests'; diff --git a/packages/angular/build/src/tools/angular/angular-host.ts b/packages/angular/build/src/tools/angular/angular-host.ts index 103b3e37ac68..38c096f67674 100644 --- a/packages/angular/build/src/tools/angular/angular-host.ts +++ b/packages/angular/build/src/tools/angular/angular-host.ts @@ -208,6 +208,9 @@ export function createAngularCompilerHost( host.resourceNameToFileName = function (resourceName, containingFile) { const resolvedPath = nodePath.join(nodePath.dirname(containingFile), resourceName); + if (!this.fileExists(resolvedPath)) { + return null; + } // All resource names that have template file extensions are assumed to be templates // TODO: Update compiler to provide the resource type to avoid extension matching here. diff --git a/packages/angular/build/src/tools/angular/compilation/angular-compilation.ts b/packages/angular/build/src/tools/angular/compilation/angular-compilation.ts index 2e44e0bdab33..bea3c65e1b8a 100644 --- a/packages/angular/build/src/tools/angular/compilation/angular-compilation.ts +++ b/packages/angular/build/src/tools/angular/compilation/angular-compilation.ts @@ -63,6 +63,9 @@ export abstract class AngularCompilation { enableResourceInlining: false, supportTestBed: false, supportJitMode: false, + // Disable removing of comments as TS is quite aggressive with these and can + // remove important annotations, such as /* @__PURE__ */ and comments like /* vite-ignore */. + removeComments: false, }), ); } diff --git a/packages/angular/build/src/tools/angular/compilation/aot-compilation.ts b/packages/angular/build/src/tools/angular/compilation/aot-compilation.ts index 6618f00d25f4..adb8988e875b 100644 --- a/packages/angular/build/src/tools/angular/compilation/aot-compilation.ts +++ b/packages/angular/build/src/tools/angular/compilation/aot-compilation.ts @@ -160,7 +160,11 @@ export class AotCompilation extends AngularCompilation { `${host.getCanonicalFileName(relativePath)}@${node.name?.text}`, ); const updateText = angularCompiler.emitHmrUpdateModule(node); - if (updateText === null) { + // If compiler cannot generate an update for the component, prevent template updates. + // Also prevent template updates if $localize is directly present which also currently + // prevents a template update at runtime. + // TODO: Support localized template update modules and remove this check. + if (updateText === null || updateText.includes('$localize')) { // Build is needed if a template cannot be updated templateUpdates = undefined; break; diff --git a/packages/angular/build/src/tools/angular/compilation/hmr-candidates.ts b/packages/angular/build/src/tools/angular/compilation/hmr-candidates.ts index bc271d160cad..e10b935907c0 100644 --- a/packages/angular/build/src/tools/angular/compilation/hmr-candidates.ts +++ b/packages/angular/build/src/tools/angular/compilation/hmr-candidates.ts @@ -176,14 +176,13 @@ function analyzeFileUpdates( } // Compare component meta decorator object literals - if ( - hasUnsupportedMetaUpdates( - staleDecoratorExpression, - stale, - updatedDecoratorExpression, - updated, - ) - ) { + const analysis = analyzeMetaUpdates( + staleDecoratorExpression, + stale, + updatedDecoratorExpression, + updated, + ); + if (analysis === MetaUpdateAnalysis.Unsupported) { return null; } @@ -194,7 +193,9 @@ function analyzeFileUpdates( } // If all previous class checks passed, this class is supported for HMR updates - candidates.push(updatedNode); + if (analysis === MetaUpdateAnalysis.Supported) { + candidates.push(updatedNode); + } continue; } } @@ -213,7 +214,19 @@ function analyzeFileUpdates( /** * The set of Angular component metadata fields that are supported by HMR updates. */ -const SUPPORTED_FIELDS = new Set(['template', 'templateUrl', 'styles', 'styleUrl', 'stylesUrl']); +const SUPPORTED_FIELD_NAMES = new Set([ + 'template', + 'templateUrl', + 'styles', + 'styleUrl', + 'stylesUrl', +]); + +enum MetaUpdateAnalysis { + Supported, + Unsupported, + None, +} /** * Analyzes the metadata fields of a decorator call expression for unsupported HMR updates. @@ -222,31 +235,34 @@ const SUPPORTED_FIELDS = new Set(['template', 'templateUrl', 'styles', 'styleUrl * @param staleSource The source file instance containing the stale call instance. * @param updatedCall A call expression instance. * @param updatedSource The source file instance containing the updated call instance. - * @returns true, if unsupported metadata updates are present; false, otherwise. + * @returns A MetaUpdateAnalysis enum value. */ -function hasUnsupportedMetaUpdates( +function analyzeMetaUpdates( staleCall: ts.CallExpression, staleSource: ts.SourceFile, updatedCall: ts.CallExpression, updatedSource: ts.SourceFile, -): boolean { +): MetaUpdateAnalysis { const staleObject = staleCall.arguments[0]; const updatedObject = updatedCall.arguments[0]; + let hasSupportedUpdate = false; if (!ts.isObjectLiteralExpression(staleObject) || !ts.isObjectLiteralExpression(updatedObject)) { - return true; + return MetaUpdateAnalysis.Unsupported; } + const supportedFields = new Map<string, ts.Node>(); const unsupportedFields: ts.Node[] = []; for (const property of staleObject.properties) { if (!ts.isPropertyAssignment(property) || ts.isComputedPropertyName(property.name)) { // Unsupported object literal property - return true; + return MetaUpdateAnalysis.Unsupported; } const name = property.name.text; - if (SUPPORTED_FIELDS.has(name)) { + if (SUPPORTED_FIELD_NAMES.has(name)) { + supportedFields.set(name, property.initializer); continue; } @@ -257,21 +273,38 @@ function hasUnsupportedMetaUpdates( for (const property of updatedObject.properties) { if (!ts.isPropertyAssignment(property) || ts.isComputedPropertyName(property.name)) { // Unsupported object literal property - return true; + return MetaUpdateAnalysis.Unsupported; } const name = property.name.text; - if (SUPPORTED_FIELDS.has(name)) { + if (SUPPORTED_FIELD_NAMES.has(name)) { + const staleInitializer = supportedFields.get(name); + // If the supported field was added or has its content changed, there has been a supported update + if ( + !staleInitializer || + !equalRangeText(property.initializer, updatedSource, staleInitializer, staleSource) + ) { + hasSupportedUpdate = true; + } + // Remove the field entry to allow tracking removed fields + supportedFields.delete(name); continue; } // Compare in order if (!equalRangeText(property.initializer, updatedSource, unsupportedFields[i++], staleSource)) { - return true; + return MetaUpdateAnalysis.Unsupported; } } - return i !== unsupportedFields.length; + if (i !== unsupportedFields.length) { + return MetaUpdateAnalysis.Unsupported; + } + + // Any remaining supported field indicates a field removal. This is also considered a supported update. + hasSupportedUpdate ||= supportedFields.size > 0; + + return hasSupportedUpdate ? MetaUpdateAnalysis.Supported : MetaUpdateAnalysis.None; } /** diff --git a/packages/angular/build/src/tools/esbuild/angular/compiler-plugin.ts b/packages/angular/build/src/tools/esbuild/angular/compiler-plugin.ts index 740c2d119b5a..97444b7b4e66 100644 --- a/packages/angular/build/src/tools/esbuild/angular/compiler-plugin.ts +++ b/packages/angular/build/src/tools/esbuild/angular/compiler-plugin.ts @@ -21,12 +21,7 @@ import { createHash } from 'node:crypto'; import * as path from 'node:path'; import { maxWorkers, useTypeChecking } from '../../../utils/environment-options'; import { AngularHostOptions } from '../../angular/angular-host'; -import { - AngularCompilation, - DiagnosticModes, - NoopCompilation, - createAngularCompilation, -} from '../../angular/compilation'; +import { AngularCompilation, DiagnosticModes, NoopCompilation } from '../../angular/compilation'; import { JavaScriptTransformer } from '../javascript-transformer'; import { LoadResultCache, createCachedLoad } from '../load-result-cache'; import { logCumulativeDurations, profileAsync, resetCumulativeDurations } from '../profiling'; @@ -40,10 +35,7 @@ export interface CompilerPluginOptions { sourcemap: boolean | 'external'; tsconfig: string; jit?: boolean; - browserOnlyBuild?: boolean; - /** Skip TypeScript compilation setup. This is useful to re-use the TypeScript compilation from another plugin. */ - noopTypeScriptCompilation?: boolean; advancedOptimizations?: boolean; thirdPartySourcemaps?: boolean; fileReplacements?: Record<string, string>; @@ -58,6 +50,7 @@ export interface CompilerPluginOptions { // eslint-disable-next-line max-lines-per-function export function createCompilerPlugin( pluginOptions: CompilerPluginOptions, + compilationOrFactory: AngularCompilation | (() => Promise<AngularCompilation>), stylesheetBundler: ComponentStylesheetBundler, ): Plugin { return { @@ -105,6 +98,13 @@ export function createCompilerPlugin( build.initialOptions.define ??= {}; build.initialOptions.define['ngI18nClosureMode'] ??= 'false'; + // The factory is only relevant for compatibility purposes with the private API. + // TODO: Update private API in the next major to allow compilation function factory removal here. + const compilation = + typeof compilationOrFactory === 'function' + ? await compilationOrFactory() + : compilationOrFactory; + // The in-memory cache of TypeScript file outputs will be used during the build in `onLoad` callbacks for TS files. // A string value indicates direct TS/NG output and a Uint8Array indicates fully transformed code. const typeScriptFileCache = @@ -117,10 +117,6 @@ export function createCompilerPlugin( { outputFiles?: OutputFile[]; metafile?: Metafile; errors?: PartialMessage[] } >(); - // Create new reusable compilation for the appropriate mode based on the `jit` plugin option - const compilation: AngularCompilation = pluginOptions.noopTypeScriptCompilation - ? new NoopCompilation() - : await createAngularCompilation(!!pluginOptions.jit, !!pluginOptions.browserOnlyBuild); // Compilation is initially assumed to have errors until emitted let hasCompilationErrors = true; @@ -153,8 +149,8 @@ export function createCompilerPlugin( // dependencies or web worker processing. let modifiedFiles; if ( - pluginOptions.sourceFileCache?.modifiedFiles.size && - !pluginOptions.noopTypeScriptCompilation + !(compilation instanceof NoopCompilation) && + pluginOptions.sourceFileCache?.modifiedFiles.size ) { // TODO: Differentiate between changed input files and stale output files modifiedFiles = referencedFileTracker.update(pluginOptions.sourceFileCache.modifiedFiles); @@ -168,11 +164,7 @@ export function createCompilerPlugin( modifiedFiles.forEach((file) => additionalResults.delete(file)); } - if ( - !pluginOptions.noopTypeScriptCompilation && - compilation.update && - pluginOptions.sourceFileCache?.modifiedFiles.size - ) { + if (compilation.update && pluginOptions.sourceFileCache?.modifiedFiles.size) { await compilation.update(modifiedFiles ?? pluginOptions.sourceFileCache.modifiedFiles); } @@ -300,6 +292,7 @@ export function createCompilerPlugin( pluginOptions, preserveSymlinks, build.initialOptions.conditions, + build.initialOptions.absWorkingDir, ), ); shouldTsIgnoreJs = !initializationResult.compilerOptions.allowJs; @@ -524,7 +517,7 @@ export function createCompilerPlugin( const replacement = pluginOptions.fileReplacements?.[path.normalize(args.path)]; if (replacement) { return { - contents: await import('fs/promises').then(({ readFile }) => + contents: await import('node:fs/promises').then(({ readFile }) => readFile(path.normalize(replacement)), ), loader: 'json' as const, @@ -630,6 +623,7 @@ function createCompilerOptionsTransformer( pluginOptions: CompilerPluginOptions, preserveSymlinks: boolean | undefined, customConditions: string[] | undefined, + absWorkingDir: string | undefined, ): Parameters<AngularCompilation['initialize']>[2] { return (compilerOptions) => { // target of 9 is ES2022 (using the number avoids an expensive import of typescript just for an enum) @@ -689,6 +683,20 @@ function createCompilerOptionsTransformer( }); } + if (compilerOptions.isolatedModules && compilerOptions.emitDecoratorMetadata) { + setupWarnings?.push({ + text: `TypeScript compiler option 'isolatedModules' may prevent the 'emitDecoratorMetadata' option from emitting all metadata.`, + location: null, + notes: [ + { + text: + `The 'emitDecoratorMetadata' option is not required by Angular` + + 'and can be removed if not explictly required by the project.', + }, + ], + }); + } + // Synchronize custom resolve conditions. // Set if using the supported bundler resolution mode (bundler is the default in new projects) if (compilerOptions.moduleResolution === 100 /* ModuleResolutionKind.Bundler */) { diff --git a/packages/angular/build/src/tools/esbuild/angular/jit-plugin-callbacks.ts b/packages/angular/build/src/tools/esbuild/angular/jit-plugin-callbacks.ts index 2be8670f61b6..6b99b92dd1fa 100644 --- a/packages/angular/build/src/tools/esbuild/angular/jit-plugin-callbacks.ts +++ b/packages/angular/build/src/tools/esbuild/angular/jit-plugin-callbacks.ts @@ -34,23 +34,21 @@ async function loadEntry( root: string, skipRead?: boolean, ): Promise<{ path: string; contents?: string }> { - if (entry.startsWith('file:')) { - const specifier = join(root, entry.slice(5)); - - return { - path: specifier, - contents: skipRead ? undefined : await readFile(specifier, 'utf-8'), - }; - } else if (entry.startsWith('inline:')) { + if (entry.startsWith('inline:')) { const [importer, data] = entry.slice(7).split(';', 2); return { path: join(root, importer), contents: Buffer.from(data, 'base64').toString(), }; - } else { - throw new Error('Invalid data for Angular JIT entry.'); } + + const path = join(root, entry); + + return { + path, + contents: skipRead ? undefined : await readFile(path, 'utf-8'), + }; } /** @@ -85,7 +83,7 @@ export function setupJitPluginCallbacks( return { // Use a relative path to prevent fully resolved paths in the metafile (JSON stats file). // This is only necessary for custom namespaces. esbuild will handle the file namespace. - path: 'file:' + relative(root, join(dirname(args.importer), specifier)), + path: relative(root, join(dirname(args.importer), specifier)), namespace, }; } else { diff --git a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts index 34d3d8aab915..df7371e3a4da 100644 --- a/packages/angular/build/src/tools/esbuild/application-code-bundle.ts +++ b/packages/angular/build/src/tools/esbuild/application-code-bundle.ts @@ -17,6 +17,7 @@ import { SERVER_APP_ENGINE_MANIFEST_FILENAME, SERVER_APP_MANIFEST_FILENAME, } from '../../utils/server-rendering/manifest'; +import { AngularCompilation, NoopCompilation } from '../angular/compilation'; import { createCompilerPlugin } from './angular/compiler-plugin'; import { ComponentStylesheetBundler } from './angular/component-stylesheets'; import { SourceFileCache } from './angular/source-file-cache'; @@ -39,6 +40,7 @@ export function createBrowserCodeBundleOptions( target: string[], sourceFileCache: SourceFileCache, stylesheetBundler: ComponentStylesheetBundler, + angularCompilation: AngularCompilation, templateUpdates: Map<string, string> | undefined, ): BundlerOptionsFactory { return (loadCache) => { @@ -73,6 +75,7 @@ export function createBrowserCodeBundleOptions( createCompilerPlugin( // JS/TS options pluginOptions, + angularCompilation, // Component stylesheet bundler stylesheetBundler, ), @@ -83,24 +86,7 @@ export function createBrowserCodeBundleOptions( buildOptions.plugins?.push(...options.plugins); } - if (options.externalPackages) { - // Package files affected by a customized loader should not be implicitly marked as external - if ( - options.loaderExtensions || - options.plugins || - typeof options.externalPackages === 'object' - ) { - // Plugin must be added after custom plugins to ensure any added loader options are considered - buildOptions.plugins?.push( - createExternalPackagesPlugin( - options.externalPackages !== true ? options.externalPackages : undefined, - ), - ); - } else { - // Safe to use the packages external option directly - buildOptions.packages = 'external'; - } - } + appendOptionsForExternalPackages(options, buildOptions); return buildOptions; }; @@ -152,7 +138,9 @@ export function createBrowserPolyfillBundleOptions( buildOptions.plugins.push( createCompilerPlugin( // JS/TS options - { ...pluginOptions, noopTypeScriptCompilation: true }, + pluginOptions, + // Browser compilation handles the actual Angular code compilation + new NoopCompilation(), // Component stylesheet options are unused for polyfills but required by the plugin stylesheetBundler, ), @@ -293,7 +281,9 @@ export function createServerMainCodeBundleOptions( createAngularLocalizeInitWarningPlugin(), createCompilerPlugin( // JS/TS options - { ...pluginOptions, noopTypeScriptCompilation: true }, + pluginOptions, + // Browser compilation handles the actual Angular code compilation + new NoopCompilation(), // Component stylesheet bundler stylesheetBundler, ), @@ -302,9 +292,7 @@ export function createServerMainCodeBundleOptions( buildOptions.plugins ??= []; - if (externalPackages) { - buildOptions.packages = 'external'; - } else { + if (!externalPackages) { buildOptions.plugins.push(createRxjsEsmResolutionPlugin()); } @@ -381,6 +369,8 @@ export function createServerMainCodeBundleOptions( buildOptions.plugins.push(...options.plugins); } + appendOptionsForExternalPackages(options, buildOptions); + return buildOptions; }; } @@ -433,7 +423,9 @@ export function createSsrEntryCodeBundleOptions( createAngularLocalizeInitWarningPlugin(), createCompilerPlugin( // JS/TS options - { ...pluginOptions, noopTypeScriptCompilation: true }, + pluginOptions, + // Browser compilation handles the actual Angular code compilation + new NoopCompilation(), // Component stylesheet bundler stylesheetBundler, ), @@ -442,9 +434,7 @@ export function createSsrEntryCodeBundleOptions( buildOptions.plugins ??= []; - if (externalPackages) { - buildOptions.packages = 'external'; - } else { + if (!externalPackages) { buildOptions.plugins.push(createRxjsEsmResolutionPlugin()); } @@ -516,6 +506,8 @@ export function createSsrEntryCodeBundleOptions( buildOptions.plugins.push(...options.plugins); } + appendOptionsForExternalPackages(options, buildOptions); + return buildOptions; }; } @@ -608,6 +600,7 @@ function getEsBuildCommonOptions(options: NormalizedApplicationBuildOptions): Bu ...(optimizationOptions.scripts ? { 'ngDevMode': 'false' } : undefined), 'ngJitMode': jit ? 'true' : 'false', 'ngServerMode': 'false', + 'ngHmrMode': options.templateUpdates ? 'true' : 'false', }, loader: loaderExtensions, footer, @@ -721,3 +714,29 @@ function entryFileToWorkspaceRelative(workspaceRoot: string, entryFile: string): .replace(/\\/g, '/') ); } + +function appendOptionsForExternalPackages( + options: NormalizedApplicationBuildOptions, + buildOptions: BuildOptions, +): void { + if (!options.externalPackages) { + return; + } + + buildOptions.plugins ??= []; + + // Package files affected by a customized loader should not be implicitly marked as external + if (options.loaderExtensions || options.plugins || typeof options.externalPackages === 'object') { + // Plugin must be added after custom plugins to ensure any added loader options are considered + buildOptions.plugins.push( + createExternalPackagesPlugin( + options.externalPackages !== true ? options.externalPackages : undefined, + ), + ); + + buildOptions.packages = undefined; + } else { + // Safe to use the packages external option directly + buildOptions.packages = 'external'; + } +} diff --git a/packages/angular/build/src/tools/esbuild/bundler-context.ts b/packages/angular/build/src/tools/esbuild/bundler-context.ts index fe28009f078b..a551ae4defba 100644 --- a/packages/angular/build/src/tools/esbuild/bundler-context.ts +++ b/packages/angular/build/src/tools/esbuild/bundler-context.ts @@ -359,17 +359,16 @@ export class BundlerContext { // Collect all external package names const externalImports = new Set<string>(); for (const { imports } of Object.values(result.metafile.outputs)) { - for (const importData of imports) { + for (const { external, kind, path } of imports) { if ( - !importData.external || - SERVER_GENERATED_EXTERNALS.has(importData.path) || - (importData.kind !== 'import-statement' && - importData.kind !== 'dynamic-import' && - importData.kind !== 'require-call') + !external || + SERVER_GENERATED_EXTERNALS.has(path) || + (kind !== 'import-statement' && kind !== 'dynamic-import' && kind !== 'require-call') ) { continue; } - externalImports.add(importData.path); + + externalImports.add(path); } } diff --git a/packages/angular/build/src/tools/esbuild/bundler-execution-result.ts b/packages/angular/build/src/tools/esbuild/bundler-execution-result.ts index 60fe2966c5c7..1ba176287450 100644 --- a/packages/angular/build/src/tools/esbuild/bundler-execution-result.ts +++ b/packages/angular/build/src/tools/esbuild/bundler-execution-result.ts @@ -27,7 +27,8 @@ export interface RebuildState { componentStyleBundler: ComponentStylesheetBundler; codeBundleCache?: SourceFileCache; fileChanges: ChangedFiles; - previousOutputInfo: Map<string, { hash: string; type: BuildOutputFileType }>; + previousOutputInfo: ReadonlyMap<string, { hash: string; type: BuildOutputFileType }>; + previousAssetsInfo: ReadonlyMap<string, string>; templateUpdates?: Map<string, string>; } @@ -126,9 +127,9 @@ export class ExecutionResult { setExternalMetadata( implicitBrowser: string[], implicitServer: string[], - explicit: string[] | undefined, + explicit: string[], ): void { - this.externalMetadata = { implicitBrowser, implicitServer, explicit: explicit ?? [] }; + this.externalMetadata = { implicitBrowser, implicitServer, explicit }; } get output() { @@ -172,12 +173,15 @@ export class ExecutionResult { previousOutputInfo: new Map( this.outputFiles.map(({ path, hash, type }) => [path, { hash, type }]), ), + previousAssetsInfo: new Map( + this.assetFiles.map(({ source, destination }) => [source, destination]), + ), templateUpdates: this.templateUpdates, }; } findChangedFiles( - previousOutputHashes: Map<string, { hash: string; type: BuildOutputFileType }>, + previousOutputHashes: ReadonlyMap<string, { hash: string; type: BuildOutputFileType }>, ): Set<string> { const changed = new Set<string>(); for (const file of this.outputFiles) { diff --git a/packages/angular/build/src/tools/esbuild/compiler-plugin-options.ts b/packages/angular/build/src/tools/esbuild/compiler-plugin-options.ts index 93a92fa7e9a1..355bbad228ff 100644 --- a/packages/angular/build/src/tools/esbuild/compiler-plugin-options.ts +++ b/packages/angular/build/src/tools/esbuild/compiler-plugin-options.ts @@ -31,7 +31,6 @@ export function createCompilerPluginOptions( const incremental = !!options.watch; return { - browserOnlyBuild: !options.serverEntryPoint, sourcemap: !!sourcemapOptions.scripts && (sourcemapOptions.hidden ? 'external' : true), thirdPartySourcemaps: sourcemapOptions.vendor, tsconfig, diff --git a/packages/angular/build/src/tools/esbuild/external-packages-plugin.ts b/packages/angular/build/src/tools/esbuild/external-packages-plugin.ts index 03808579dd33..b968493005ac 100644 --- a/packages/angular/build/src/tools/esbuild/external-packages-plugin.ts +++ b/packages/angular/build/src/tools/esbuild/external-packages-plugin.ts @@ -19,7 +19,14 @@ const EXTERNAL_PACKAGE_RESOLUTION = Symbol('EXTERNAL_PACKAGE_RESOLUTION'); * @returns An esbuild plugin. */ export function createExternalPackagesPlugin(options?: { exclude?: string[] }): Plugin { - const exclusions = options?.exclude?.length ? new Set(options.exclude) : undefined; + const exclusions = new Set<string>(options?.exclude); + // Similar to esbuild, --external:@foo/bar automatically implies --external:@foo/bar/*, + // which matches import paths like @foo/bar/baz. + // This means all paths within the @foo/bar package are also marked as external. + const exclusionsPrefixes = options?.exclude?.map((exclusion) => exclusion + '/') ?? []; + const seenExclusions: Set<string> = new Set(); + const seenExternals = new Set<string>(); + const seenNonExclusions: Set<string> = new Set(); return { name: 'angular-external-packages', @@ -33,7 +40,7 @@ export function createExternalPackagesPlugin(options?: { exclude?: string[] }): .map(([key]) => key); // Safe to use native packages external option if no loader options or exclusions present - if (!exclusions && !loaderOptionKeys?.length) { + if (!exclusions.size && !loaderOptionKeys?.length) { build.initialOptions.packages = 'external'; return; @@ -47,10 +54,26 @@ export function createExternalPackagesPlugin(options?: { exclude?: string[] }): return null; } - if (exclusions?.has(args.path)) { + if (seenExternals.has(args.path)) { + return { external: true }; + } + + if (exclusions.has(args.path) || seenExclusions.has(args.path)) { return null; } + if (!seenNonExclusions.has(args.path)) { + for (const exclusion of exclusionsPrefixes) { + if (args.path.startsWith(exclusion)) { + seenExclusions.add(args.path); + + return null; + } + } + + seenNonExclusions.add(args.path); + } + const { importer, kind, resolveDir, namespace, pluginData = {} } = args; pluginData[EXTERNAL_PACKAGE_RESOLUTION] = true; @@ -62,11 +85,18 @@ export function createExternalPackagesPlugin(options?: { exclude?: string[] }): resolveDir, }); - // Return result if unable to resolve or explicitly marked external (externalDependencies option) - if (!result.path || result.external) { + // Return result if unable to resolve + if (!result.path) { return result; } + // Return if explicitly marked external (externalDependencies option) + if (result.external) { + seenExternals.add(args.path); + + return { external: true }; + } + // Allow customized loaders to run against configured paths regardless of location if (loaderFileExtensions.has(extname(result.path))) { return result; @@ -74,10 +104,9 @@ export function createExternalPackagesPlugin(options?: { exclude?: string[] }): // Mark paths from a node modules directory as external if (/[\\/]node_modules[\\/]/.test(result.path)) { - return { - path: args.path, - external: true, - }; + seenExternals.add(args.path); + + return { external: true }; } // Otherwise return original result diff --git a/packages/angular/build/src/tools/esbuild/i18n-inliner.ts b/packages/angular/build/src/tools/esbuild/i18n-inliner.ts index 2fcb8e6dbd55..e2fac79709b7 100644 --- a/packages/angular/build/src/tools/esbuild/i18n-inliner.ts +++ b/packages/angular/build/src/tools/esbuild/i18n-inliner.ts @@ -7,8 +7,11 @@ */ import assert from 'node:assert'; +import { createHash } from 'node:crypto'; +import { extname, join } from 'node:path'; import { WorkerPool } from '../../utils/worker-pool'; import { BuildOutputFile, BuildOutputFileType } from './bundler-context'; +import type { LmbdCacheStore } from './lmdb-cache-store'; import { createOutputFile } from './utils'; /** @@ -24,6 +27,7 @@ export interface I18nInlinerOptions { missingTranslation: 'error' | 'warning' | 'ignore'; outputFiles: BuildOutputFile[]; shouldOptimize?: boolean; + persistentCachePath?: string; } /** @@ -33,26 +37,30 @@ export interface I18nInlinerOptions { * localize function (`$localize`). */ export class I18nInliner { + #cacheInitFailed = false; #workerPool: WorkerPool; - readonly #localizeFiles: ReadonlyMap<string, Blob>; + #cache: LmbdCacheStore | undefined; + readonly #localizeFiles: ReadonlyMap<string, BuildOutputFile>; readonly #unmodifiedFiles: Array<BuildOutputFile>; - readonly #fileToType = new Map<string, BuildOutputFileType>(); - constructor(options: I18nInlinerOptions, maxThreads?: number) { + constructor( + private readonly options: I18nInlinerOptions, + maxThreads?: number, + ) { this.#unmodifiedFiles = []; + const { outputFiles, shouldOptimize, missingTranslation } = options; + const files = new Map<string, BuildOutputFile>(); - const files = new Map<string, Blob>(); const pendingMaps = []; - for (const file of options.outputFiles) { + for (const file of outputFiles) { if (file.type === BuildOutputFileType.Root || file.type === BuildOutputFileType.ServerRoot) { // Skip also the server entry-point. // Skip stats and similar files. continue; } - this.#fileToType.set(file.path, file.type); - - if (file.path.endsWith('.js') || file.path.endsWith('.mjs')) { + const fileExtension = extname(file.path); + if (fileExtension === '.js' || fileExtension === '.mjs') { // Check if localizations are present const contentBuffer = Buffer.isBuffer(file.contents) ? file.contents @@ -60,15 +68,11 @@ export class I18nInliner { const hasLocalize = contentBuffer.includes(LOCALIZE_KEYWORD); if (hasLocalize) { - // A Blob is an immutable data structure that allows sharing the data between workers - // without copying until the data is actually used within a Worker. This is useful here - // since each file may not actually be processed in each Worker and the Blob avoids - // unneeded repeat copying of potentially large JavaScript files. - files.set(file.path, new Blob([file.contents])); + files.set(file.path, file); continue; } - } else if (file.path.endsWith('.js.map')) { + } else if (fileExtension === '.map') { // The related JS file may not have been checked yet. To ensure that map files are not // missed, store any pending map files and check them after all output files. pendingMaps.push(file); @@ -81,7 +85,7 @@ export class I18nInliner { // Check if any pending map files should be processed by checking if the parent JS file is present for (const file of pendingMaps) { if (files.has(file.path.slice(0, -4))) { - files.set(file.path, new Blob([file.contents])); + files.set(file.path, file); } else { this.#unmodifiedFiles.push(file); } @@ -94,9 +98,15 @@ export class I18nInliner { maxThreads, // Extract options to ensure only the named options are serialized and sent to the worker workerData: { - missingTranslation: options.missingTranslation, - shouldOptimize: options.shouldOptimize, - files, + missingTranslation, + shouldOptimize, + // A Blob is an immutable data structure that allows sharing the data between workers + // without copying until the data is actually used within a Worker. This is useful here + // since each file may not actually be processed in each Worker and the Blob avoids + // unneeded repeat copying of potentially large JavaScript files. + files: new Map<string, Blob>( + Array.from(files, ([name, file]) => [name, new Blob([file.contents])]), + ), }, }); } @@ -113,19 +123,54 @@ export class I18nInliner { locale: string, translation: Record<string, unknown> | undefined, ): Promise<{ outputFiles: BuildOutputFile[]; errors: string[]; warnings: string[] }> { + await this.initCache(); + + const { shouldOptimize, missingTranslation } = this.options; // Request inlining for each file that contains localize calls const requests = []; - for (const filename of this.#localizeFiles.keys()) { + + let fileCacheKeyBase: Uint8Array | undefined; + + for (const [filename, file] of this.#localizeFiles) { + let cacheKey: string | undefined; if (filename.endsWith('.map')) { continue; } - const fileRequest = this.#workerPool.run({ - filename, - locale, - translation, + let cacheResultPromise = Promise.resolve(null); + if (this.#cache) { + fileCacheKeyBase ??= Buffer.from( + JSON.stringify({ locale, translation, missingTranslation, shouldOptimize }), + 'utf-8', + ); + + // NOTE: If additional options are added, this may need to be updated. + // TODO: Consider xxhash or similar instead of SHA256 + cacheKey = createHash('sha256') + .update(file.hash) + .update(filename) + .update(fileCacheKeyBase) + .digest('hex'); + + // Failure to get the value should not fail the transform + cacheResultPromise = this.#cache.get(cacheKey).catch(() => null); + } + + const fileResult = cacheResultPromise.then(async (cachedResult) => { + if (cachedResult) { + return cachedResult; + } + + const result = await this.#workerPool.run({ filename, locale, translation }); + if (this.#cache && cacheKey) { + // Failure to set the value should not fail the transform + await this.#cache.set(cacheKey, result).catch(() => {}); + } + + return result; }); - requests.push(fileRequest); + + requests.push(fileResult); } // Wait for all file requests to complete @@ -136,7 +181,7 @@ export class I18nInliner { const warnings: string[] = []; const outputFiles = [ ...rawResults.flatMap(({ file, code, map, messages }) => { - const type = this.#fileToType.get(file); + const type = this.#localizeFiles.get(file)?.type; assert(type !== undefined, 'localized file should always have a type' + file); const resultFiles = [createOutputFile(file, code, type)]; @@ -171,4 +216,37 @@ export class I18nInliner { close(): Promise<void> { return this.#workerPool.destroy(); } + + /** + * Initializes the cache for storing translated bundles. + * If the cache is already initialized, it does nothing. + * + * @returns A promise that resolves once the cache initialization process is complete. + */ + private async initCache(): Promise<void> { + if (this.#cache || this.#cacheInitFailed) { + return; + } + + const { persistentCachePath } = this.options; + // Webcontainers currently do not support this persistent cache store. + if (!persistentCachePath || process.versions.webcontainer) { + return; + } + + // Initialize a persistent cache for i18n transformations. + try { + const { LmbdCacheStore } = await import('./lmdb-cache-store'); + + this.#cache = new LmbdCacheStore(join(persistentCachePath, 'angular-i18n.db')); + } catch { + this.#cacheInitFailed = true; + + // eslint-disable-next-line no-console + console.warn( + 'Unable to initialize JavaScript cache storage.\n' + + 'This will not affect the build output content but may result in slower builds.', + ); + } + } } diff --git a/packages/angular/build/src/tools/esbuild/index-html-generator.ts b/packages/angular/build/src/tools/esbuild/index-html-generator.ts index 4d11ed4fa45a..4ccd48f2b595 100644 --- a/packages/angular/build/src/tools/esbuild/index-html-generator.ts +++ b/packages/angular/build/src/tools/esbuild/index-html-generator.ts @@ -80,15 +80,6 @@ export async function generateIndexHtml( throw new Error(`Output file does not exist: ${relativefilePath}`); }; - // Read the Auto CSP options. - const autoCsp = buildOptions.security?.autoCsp; - const autoCspOptions = - autoCsp === true - ? { unsafeEval: false } - : autoCsp - ? { unsafeEval: !!autoCsp.unsafeEval } - : undefined; - // Create an index HTML generator that reads from the in-memory output files const indexHtmlGenerator = new IndexHtmlGenerator({ indexPath: indexHtmlOptions.input, @@ -103,7 +94,7 @@ export async function generateIndexHtml( buildOptions.prerenderOptions || buildOptions.appShellOptions ), - autoCsp: autoCspOptions, + autoCsp: buildOptions.security.autoCsp, }); indexHtmlGenerator.readAsset = readAsset; diff --git a/packages/angular/build/src/tools/esbuild/stylesheets/less-language.ts b/packages/angular/build/src/tools/esbuild/stylesheets/less-language.ts index d911416f26ca..1f6d8f2b7c26 100644 --- a/packages/angular/build/src/tools/esbuild/stylesheets/less-language.ts +++ b/packages/angular/build/src/tools/esbuild/stylesheets/less-language.ts @@ -113,7 +113,7 @@ async function compileString( }; try { - const result = await less.render(data, { + const { imports, css } = await less.render(data, { filename, paths: options.includePaths, plugins: [resolverPlugin], @@ -128,9 +128,9 @@ async function compileString( } as Less.Options); return { - contents: result.css, + contents: css, loader: 'css', - watchFiles: [filename, ...result.imports], + watchFiles: [filename, ...imports], }; } catch (error) { if (isLessException(error)) { diff --git a/packages/angular/build/src/tools/esbuild/stylesheets/sass-language.ts b/packages/angular/build/src/tools/esbuild/stylesheets/sass-language.ts index bb50543360d0..b3972ac407f4 100644 --- a/packages/angular/build/src/tools/esbuild/stylesheets/sass-language.ts +++ b/packages/angular/build/src/tools/esbuild/stylesheets/sass-language.ts @@ -7,7 +7,7 @@ */ import type { OnLoadResult, PartialMessage, PartialNote, ResolveResult } from 'esbuild'; -import { dirname, join, relative } from 'node:path'; +import { dirname, join } from 'node:path'; import { fileURLToPath, pathToFileURL } from 'node:url'; import type { CanonicalizeContext, CompileResult, Exception, Syntax } from 'sass'; import type { SassWorkerImplementation } from '../../sass/sass-service'; @@ -170,7 +170,7 @@ async function compileString( return { loader: 'css', - contents: sourceMap ? `${css}\n${sourceMapToUrlComment(sourceMap, dirname(filePath))}` : css, + contents: sourceMap ? `${css}\n${sourceMapToUrlComment(sourceMap)}` : css, watchFiles: loadedUrls.map((url) => fileURLToPath(url)), warnings, }; @@ -199,14 +199,7 @@ async function compileString( } } -function sourceMapToUrlComment( - sourceMap: Exclude<CompileResult['sourceMap'], undefined>, - root: string, -): string { - // Remove `file` protocol from all sourcemap sources and adjust to be relative to the input file. - // This allows esbuild to correctly process the paths. - sourceMap.sources = sourceMap.sources.map((source) => relative(root, fileURLToPath(source))); - +function sourceMapToUrlComment(sourceMap: Exclude<CompileResult['sourceMap'], undefined>): string { const urlSourceMap = Buffer.from(JSON.stringify(sourceMap), 'utf-8').toString('base64'); return `/*# sourceMappingURL=data:application/json;charset=utf-8;base64,${urlSourceMap} */`; diff --git a/packages/angular/build/src/tools/esbuild/stylesheets/stylesheet-plugin-factory.ts b/packages/angular/build/src/tools/esbuild/stylesheets/stylesheet-plugin-factory.ts index ac03c602e658..cb10e65892f8 100644 --- a/packages/angular/build/src/tools/esbuild/stylesheets/stylesheet-plugin-factory.ts +++ b/packages/angular/build/src/tools/esbuild/stylesheets/stylesheet-plugin-factory.ts @@ -12,6 +12,7 @@ import assert from 'node:assert'; import { readFile } from 'node:fs/promises'; import { extname } from 'node:path'; import type { Options } from 'sass'; +import { assertIsError } from '../../../utils/error'; import type { PostcssConfiguration } from '../../../utils/postcss-configuration'; import { LoadResultCache, createCachedLoad } from '../load-result-cache'; @@ -422,8 +423,16 @@ async function compileString( }, ], }; - } + } else { + assertIsError(error); - throw error; + return { + errors: [ + { + text: error.message, + }, + ], + }; + } } } diff --git a/packages/angular/build/src/tools/esbuild/utils.ts b/packages/angular/build/src/tools/esbuild/utils.ts index 3e62c6e7bb1a..6b8e44def11d 100644 --- a/packages/angular/build/src/tools/esbuild/utils.ts +++ b/packages/angular/build/src/tools/esbuild/utils.ts @@ -40,6 +40,11 @@ export function logBuildStats( ssrOutputEnabled?: boolean, verbose?: boolean, ): string { + // Remove the i18n subpath in case the build is using i18n. + // en-US/main.js -> main.js + const normalizedChangedFiles: Set<string> = new Set( + [...(changedFiles ?? [])].map((f) => basename(f)), + ); const browserStats: BundleStats[] = []; const serverStats: BundleStats[] = []; let unchangedCount = 0; @@ -52,7 +57,7 @@ export function logBuildStats( } // Show only changed files if a changed list is provided - if (changedFiles && !changedFiles.has(file)) { + if (normalizedChangedFiles.size && !normalizedChangedFiles.has(file)) { ++unchangedCount; continue; } diff --git a/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts b/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts index b712744e8f33..963fca654d37 100644 --- a/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts +++ b/packages/angular/build/src/tools/vite/middlewares/assets-middleware.ts @@ -9,7 +9,7 @@ import { lookup as lookupMimeType } from 'mrmime'; import { extname } from 'node:path'; import type { Connect, ViteDevServer } from 'vite'; -import { AngularMemoryOutputFiles, pathnameWithoutBasePath } from '../utils'; +import { AngularMemoryOutputFiles, AngularOutputAssets, pathnameWithoutBasePath } from '../utils'; export interface ComponentStyleRecord { rawContent: Uint8Array; @@ -19,7 +19,7 @@ export interface ComponentStyleRecord { export function createAngularAssetsMiddleware( server: ViteDevServer, - assets: Map<string, string>, + assets: AngularOutputAssets, outputFiles: AngularMemoryOutputFiles, componentStyles: Map<string, ComponentStyleRecord>, encapsulateStyle: (style: Uint8Array, componentId: string) => string, @@ -36,8 +36,8 @@ export function createAngularAssetsMiddleware( const pathnameHasTrailingSlash = pathname[pathname.length - 1] === '/'; // Rewrite all build assets to a vite raw fs URL - const assetSourcePath = assets.get(pathname); - if (assetSourcePath !== undefined) { + const asset = assets.get(pathname); + if (asset) { // Workaround to disable Vite transformer middleware. // See: https://github.com/vitejs/vite/blob/746a1daab0395f98f0afbdee8f364cb6cf2f3b3f/packages/vite/src/node/server/middlewares/transform.ts#L201 and // https://github.com/vitejs/vite/blob/746a1daab0395f98f0afbdee8f364cb6cf2f3b3f/packages/vite/src/node/server/transformRequest.ts#L204-L206 @@ -45,7 +45,7 @@ export function createAngularAssetsMiddleware( // The encoding needs to match what happens in the vite static middleware. // ref: https://github.com/vitejs/vite/blob/d4f13bd81468961c8c926438e815ab6b1c82735e/packages/vite/src/node/server/middlewares/static.ts#L163 - req.url = `${server.config.base}@fs/${encodeURI(assetSourcePath)}`; + req.url = `${server.config.base}@fs/${encodeURI(asset.source)}`; next(); return; @@ -61,7 +61,7 @@ export function createAngularAssetsMiddleware( assets.get(pathname + '.html'); if (htmlAssetSourcePath) { - req.url = `${server.config.base}@fs/${encodeURI(htmlAssetSourcePath)}`; + req.url = `${server.config.base}@fs/${encodeURI(htmlAssetSourcePath.source)}`; next(); return; diff --git a/packages/angular/build/src/tools/vite/middlewares/component-middleware.ts b/packages/angular/build/src/tools/vite/middlewares/component-middleware.ts index 6110316773b3..0e02616cb384 100644 --- a/packages/angular/build/src/tools/vite/middlewares/component-middleware.ts +++ b/packages/angular/build/src/tools/vite/middlewares/component-middleware.ts @@ -6,11 +6,13 @@ * found in the LICENSE file at https://angular.dev/license */ -import type { Connect } from 'vite'; +import type { Connect, ViteDevServer } from 'vite'; +import { pathnameWithoutBasePath } from '../utils'; const ANGULAR_COMPONENT_PREFIX = '/@ng/component'; export function createAngularComponentMiddleware( + server: ViteDevServer, templateUpdates: ReadonlyMap<string, string>, ): Connect.NextHandleFunction { return function angularComponentMiddleware(req, res, next) { @@ -18,7 +20,8 @@ export function createAngularComponentMiddleware( return; } - if (!req.url.startsWith(ANGULAR_COMPONENT_PREFIX)) { + const pathname = pathnameWithoutBasePath(req.url, server.config.base); + if (!pathname.includes(ANGULAR_COMPONENT_PREFIX)) { next(); return; diff --git a/packages/angular/build/src/tools/vite/middlewares/html-fallback-middleware.ts b/packages/angular/build/src/tools/vite/middlewares/html-fallback-middleware.ts index 395368be0c00..cd52b8a7904f 100644 --- a/packages/angular/build/src/tools/vite/middlewares/html-fallback-middleware.ts +++ b/packages/angular/build/src/tools/vite/middlewares/html-fallback-middleware.ts @@ -28,7 +28,10 @@ export function angularHtmlFallbackMiddleware( if (req.url) { const mimeType = lookupMimeTypeFromRequest(req.url); - if (mimeType === 'text/html' || mimeType === 'application/xhtml+xml') { + if ( + (mimeType === 'text/html' || mimeType === 'application/xhtml+xml') && + !/^\/index\.(?:csr\.)?html/.test(req.url) + ) { // eslint-disable-next-line no-console console.warn( `Request for HTML file "${req.url}" was received but no asset found. Asset may be missing from build.`, diff --git a/packages/angular/build/src/tools/vite/middlewares/index-html-middleware.ts b/packages/angular/build/src/tools/vite/middlewares/index-html-middleware.ts index 67331ac46250..7959ccb7ec03 100644 --- a/packages/angular/build/src/tools/vite/middlewares/index-html-middleware.ts +++ b/packages/angular/build/src/tools/vite/middlewares/index-html-middleware.ts @@ -13,6 +13,7 @@ import { AngularMemoryOutputFiles, pathnameWithoutBasePath } from '../utils'; export function createAngularIndexHtmlMiddleware( server: ViteDevServer, outputFiles: AngularMemoryOutputFiles, + resetComponentUpdates: () => void, indexHtmlTransformer: ((content: string) => Promise<string>) | undefined, ): Connect.NextHandleFunction { return function angularIndexHtmlMiddleware(req, res, next) { @@ -39,6 +40,9 @@ export function createAngularIndexHtmlMiddleware( return; } + // A request for the index indicates a full page reload request. + resetComponentUpdates(); + server .transformIndexHtml(req.url, Buffer.from(rawHtml).toString('utf-8')) .then(async (processedHtml) => { diff --git a/packages/angular/build/src/tools/vite/middlewares/ssr-middleware.ts b/packages/angular/build/src/tools/vite/middlewares/ssr-middleware.ts index 91fafc2deb17..387a94a2ba53 100644 --- a/packages/angular/build/src/tools/vite/middlewares/ssr-middleware.ts +++ b/packages/angular/build/src/tools/vite/middlewares/ssr-middleware.ts @@ -44,6 +44,12 @@ export function createAngularSsrInternalMiddleware( ɵgetOrCreateAngularServerApp: typeof getOrCreateAngularServerApp; }; + // `ɵgetOrCreateAngularServerApp` can be undefined right after an error. + // See: https://github.com/angular/angular-cli/issues/29907 + if (!ɵgetOrCreateAngularServerApp) { + return next(); + } + const angularServerApp = ɵgetOrCreateAngularServerApp({ allowStaticRouteRender: true, }); diff --git a/packages/angular/build/src/tools/vite/plugins/angular-memory-plugin.ts b/packages/angular/build/src/tools/vite/plugins/angular-memory-plugin.ts index 734b3bc7e60e..036d2c400b2a 100644 --- a/packages/angular/build/src/tools/vite/plugins/angular-memory-plugin.ts +++ b/packages/angular/build/src/tools/vite/plugins/angular-memory-plugin.ts @@ -8,7 +8,8 @@ import assert from 'node:assert'; import { readFile } from 'node:fs/promises'; -import { basename, dirname, join, relative } from 'node:path'; +import { dirname, join, relative } from 'node:path'; +import { fileURLToPath } from 'node:url'; import type { Plugin } from 'vite'; import { loadEsmModule } from '../../../utils/load-esm'; import { AngularMemoryOutputFiles } from '../utils'; @@ -18,11 +19,12 @@ interface AngularMemoryPluginOptions { outputFiles: AngularMemoryOutputFiles; templateUpdates?: ReadonlyMap<string, string>; external?: string[]; - skipViteClient?: boolean; + disableViteTransport?: boolean; } const ANGULAR_PREFIX = '/@ng/'; const VITE_FS_PREFIX = '/@fs/'; +const FILE_PROTOCOL = 'file:'; export async function createAngularMemoryPlugin( options: AngularMemoryPluginOptions, @@ -40,8 +42,17 @@ export async function createAngularMemoryPlugin( } // For SSR with component HMR, pass through as a virtual module - if (ssr && source.startsWith(ANGULAR_PREFIX)) { - return '\0' + source; + if (ssr && source.startsWith(FILE_PROTOCOL) && source.includes(ANGULAR_PREFIX)) { + // Vite will resolve these these files example: + // `file:///@ng/component?c=src%2Fapp%2Fapp.component.ts%40AppComponent&t=1737017253850` + const sourcePath = fileURLToPath(source); + const sourceWithoutRoot = normalizePath('/' + relative(virtualProjectRoot, sourcePath)); + + if (sourceWithoutRoot.startsWith(ANGULAR_PREFIX)) { + const [, query] = source.split('?', 2); + + return `\0${sourceWithoutRoot}?${query}`; + } } // Prevent vite from resolving an explicit external dependency (`externalDependencies` option) @@ -51,24 +62,12 @@ export async function createAngularMemoryPlugin( return source; } - if (importer) { + if (importer && source[0] === '.') { const normalizedImporter = normalizePath(importer); - if (source[0] === '.' && normalizedImporter.startsWith(virtualProjectRoot)) { + if (normalizedImporter.startsWith(virtualProjectRoot)) { // Remove query if present const [importerFile] = normalizedImporter.split('?', 1); source = '/' + join(dirname(relative(virtualProjectRoot, importerFile)), source); - } else if ( - !ssr && - source[0] === '/' && - importer.endsWith('index.html') && - normalizedImporter.startsWith(virtualProjectRoot) - ) { - // This is only needed when using SSR and `angularSsrMiddleware` (old style) to correctly resolve - // .js files when using lazy-loading. - // Remove query if present - const [importerFile] = normalizedImporter.split('?', 1); - source = - '/' + join(dirname(relative(virtualProjectRoot, importerFile)), basename(source)); } } @@ -92,7 +91,7 @@ export async function createAngularMemoryPlugin( const codeContents = outputFiles.get(relativeFile)?.contents; if (codeContents === undefined) { if (relativeFile.endsWith('/node_modules/vite/dist/client/client.mjs')) { - return options.skipViteClient ? '' : loadViteClientCode(file); + return loadViteClientCode(file, options.disableViteTransport); } return undefined; @@ -119,9 +118,9 @@ export async function createAngularMemoryPlugin( * @param file The absolute path to the Vite client code. * @returns */ -async function loadViteClientCode(file: string): Promise<string> { +async function loadViteClientCode(file: string, disableViteTransport = false): Promise<string> { const originalContents = await readFile(file, 'utf-8'); - const updatedContents = originalContents.replace( + let updatedContents = originalContents.replace( `"You can also disable this overlay by setting ", h("code", { part: "config-option-name" }, "server.hmr.overlay"), " to ", @@ -134,5 +133,17 @@ async function loadViteClientCode(file: string): Promise<string> { assert(originalContents !== updatedContents, 'Failed to update Vite client error overlay text.'); + if (disableViteTransport) { + const previousUpdatedContents = updatedContents; + + updatedContents = updatedContents.replace('transport.connect(handleMessage)', ''); + assert( + previousUpdatedContents !== updatedContents, + 'Failed to update Vite client WebSocket disable.', + ); + + updatedContents = updatedContents.replace('console.debug("[vite] connecting...")', ''); + } + return updatedContents; } diff --git a/packages/angular/build/src/tools/vite/plugins/id-prefix-plugin.ts b/packages/angular/build/src/tools/vite/plugins/id-prefix-plugin.ts index e4e4620baa1e..5e543734b863 100644 --- a/packages/angular/build/src/tools/vite/plugins/id-prefix-plugin.ts +++ b/packages/angular/build/src/tools/vite/plugins/id-prefix-plugin.ts @@ -27,7 +27,7 @@ export function createRemoveIdPrefixPlugin(externals: string[]): Plugin { return; } - const escapedExternals = externals.map(escapeRegexSpecialChars); + const escapedExternals = externals.map((e) => escapeRegexSpecialChars(e) + '(?:/.+)?'); const prefixedExternalRegex = new RegExp( `${resolvedConfig.base}${VITE_ID_PREFIX}(${escapedExternals.join('|')})`, 'g', diff --git a/packages/angular/build/src/tools/vite/plugins/setup-middlewares-plugin.ts b/packages/angular/build/src/tools/vite/plugins/setup-middlewares-plugin.ts index 1118cf3ac797..2e251285e989 100644 --- a/packages/angular/build/src/tools/vite/plugins/setup-middlewares-plugin.ts +++ b/packages/angular/build/src/tools/vite/plugins/setup-middlewares-plugin.ts @@ -18,7 +18,7 @@ import { createAngularSsrExternalMiddleware, createAngularSsrInternalMiddleware, } from '../middlewares'; -import { AngularMemoryOutputFiles } from '../utils'; +import { AngularMemoryOutputFiles, AngularOutputAssets } from '../utils'; export enum ServerSsrMode { /** @@ -47,12 +47,13 @@ export enum ServerSsrMode { interface AngularSetupMiddlewaresPluginOptions { outputFiles: AngularMemoryOutputFiles; - assets: Map<string, string>; + assets: AngularOutputAssets; extensionMiddleware?: Connect.NextHandleFunction[]; indexHtmlTransformer?: (content: string) => Promise<string>; componentStyles: Map<string, ComponentStyleRecord>; templateUpdates: Map<string, string>; ssrMode: ServerSsrMode; + resetComponentUpdates: () => void; } async function createEncapsulateStyle(): Promise< @@ -82,11 +83,12 @@ export function createAngularSetupMiddlewaresPlugin( componentStyles, templateUpdates, ssrMode, + resetComponentUpdates, } = options; // Headers, assets and resources get handled first server.middlewares.use(createAngularHeadersMiddleware(server)); - server.middlewares.use(createAngularComponentMiddleware(templateUpdates)); + server.middlewares.use(createAngularComponentMiddleware(server, templateUpdates)); server.middlewares.use( createAngularAssetsMiddleware( server, @@ -117,7 +119,12 @@ export function createAngularSetupMiddlewaresPlugin( server.middlewares.use(angularHtmlFallbackMiddleware); server.middlewares.use( - createAngularIndexHtmlMiddleware(server, outputFiles, indexHtmlTransformer), + createAngularIndexHtmlMiddleware( + server, + outputFiles, + resetComponentUpdates, + indexHtmlTransformer, + ), ); }; }, diff --git a/packages/angular/build/src/tools/vite/utils.ts b/packages/angular/build/src/tools/vite/utils.ts index fc0d82c2ce62..2b39235dc212 100644 --- a/packages/angular/build/src/tools/vite/utils.ts +++ b/packages/angular/build/src/tools/vite/utils.ts @@ -18,6 +18,8 @@ export type AngularMemoryOutputFiles = Map< { contents: Uint8Array; hash: string; servable: boolean } >; +export type AngularOutputAssets = Map<string, { source: string }>; + export function pathnameWithoutBasePath(url: string, basePath: string): string { const parsedUrl = new URL(url, 'http://localhost'); const pathname = decodeURIComponent(parsedUrl.pathname); diff --git a/packages/angular/build/src/utils/bundle-calculator.ts b/packages/angular/build/src/utils/bundle-calculator.ts index 46558484e39a..3349a8a40830 100644 --- a/packages/angular/build/src/utils/bundle-calculator.ts +++ b/packages/angular/build/src/utils/bundle-calculator.ts @@ -241,7 +241,7 @@ class AllScriptCalculator extends Calculator { class AllCalculator extends Calculator { calculate() { const size = this.assets - .filter((asset) => !asset.name.endsWith('.map')) + .filter((asset) => !asset.name.endsWith('.map') && !asset.componentStyle) .map((asset) => this.getAssetSize(asset)) .reduce((total: number, size: number) => total + size, 0); @@ -269,7 +269,7 @@ class AnyScriptCalculator extends Calculator { class AnyCalculator extends Calculator { calculate() { return this.assets - .filter((asset) => !asset.name.endsWith('.map')) + .filter((asset) => !asset.name.endsWith('.map') && !asset.componentStyle) .map((asset) => ({ size: this.getAssetSize(asset), label: asset.name, diff --git a/packages/angular/build/src/utils/environment-options.ts b/packages/angular/build/src/utils/environment-options.ts index 63abd82af46e..ea06fea2d09f 100644 --- a/packages/angular/build/src/utils/environment-options.ts +++ b/packages/angular/build/src/utils/environment-options.ts @@ -103,7 +103,7 @@ export const shouldOptimizeChunks = const hmrComponentStylesVariable = process.env['NG_HMR_CSTYLES']; export const useComponentStyleHmr = - !isPresent(hmrComponentStylesVariable) || !isDisabled(hmrComponentStylesVariable); + isPresent(hmrComponentStylesVariable) && isEnabled(hmrComponentStylesVariable); const hmrComponentTemplateVariable = process.env['NG_HMR_TEMPLATES']; export const useComponentTemplateHmr = diff --git a/packages/angular/build/src/utils/error.ts b/packages/angular/build/src/utils/error.ts index c00e13e79726..0ca77c331d2d 100644 --- a/packages/angular/build/src/utils/error.ts +++ b/packages/angular/build/src/utils/error.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import assert from 'assert'; +import assert from 'node:assert'; export function assertIsError(value: unknown): asserts value is Error & { code?: string } { const isError = diff --git a/packages/angular/build/src/utils/i18n-options.ts b/packages/angular/build/src/utils/i18n-options.ts index 2482729e7813..53e5aca4d540 100644 --- a/packages/angular/build/src/utils/i18n-options.ts +++ b/packages/angular/build/src/utils/i18n-options.ts @@ -6,6 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ +import { DiagnosticHandlingStrategy } from '@angular/localize/tools'; import path from 'node:path'; import type { TranslationLoader } from './load-translations'; @@ -28,6 +29,7 @@ export interface I18nOptions { flatOutput?: boolean; readonly shouldInline: boolean; hasDefinedSourceLocale?: boolean; + i18nDuplicateTranslation?: DiagnosticHandlingStrategy; } function normalizeTranslationFileOption( @@ -65,7 +67,7 @@ function ensureString(value: unknown, name: string): asserts value is string { } } -function ensureValidsubPath(value: unknown, name: string): asserts value is string { +function ensureValidSubPath(value: unknown, name: string): asserts value is string { ensureString(value, name); if (!/^[\w-]*$/.test(value)) { @@ -80,6 +82,7 @@ export function createI18nOptions( logger?: { warn(message: string): void; }, + ssrEnabled?: boolean, ): I18nOptions { const { i18n: metadata = {} } = projectMetadata; @@ -110,18 +113,20 @@ export function createI18nOptions( if (metadata.sourceLocale.baseHref !== undefined) { ensureString(metadata.sourceLocale.baseHref, 'i18n.sourceLocale.baseHref'); - logger?.warn( - `The 'baseHref' field under 'i18n.sourceLocale' is deprecated and will be removed in future versions. ` + - `Please use 'subPath' instead.\nNote: 'subPath' defines the URL segment for the locale, acting ` + - `as both the HTML base HREF and the directory name for output.\nBy default, ` + - `if not specified, 'subPath' uses the locale code.`, - ); + if (ssrEnabled) { + logger?.warn( + `'baseHref' in 'i18n.sourceLocale' may lead to undefined behavior when used with SSR. ` + + `Consider using 'subPath' instead.\n\n` + + `Note: 'subPath' specifies the URL segment for the locale, serving as both the HTML base HREF ` + + `and the output directory name.\nBy default, if not explicitly set, 'subPath' defaults to the locale code.`, + ); + } rawSourceLocaleBaseHref = metadata.sourceLocale.baseHref; } if (metadata.sourceLocale.subPath !== undefined) { - ensureValidsubPath(metadata.sourceLocale.subPath, 'i18n.sourceLocale.subPath'); + ensureValidSubPath(metadata.sourceLocale.subPath, 'i18n.sourceLocale.subPath'); rawsubPath = metadata.sourceLocale.subPath; } @@ -156,17 +161,20 @@ export function createI18nOptions( if ('baseHref' in options) { ensureString(options.baseHref, `i18n.locales.${locale}.baseHref`); - logger?.warn( - `The 'baseHref' field under 'i18n.locales.${locale}' is deprecated and will be removed in future versions. ` + - `Please use 'subPath' instead.\nNote: 'subPath' defines the URL segment for the locale, acting ` + - `as both the HTML base HREF and the directory name for output.\nBy default, ` + - `if not specified, 'subPath' uses the locale code.`, - ); + + if (ssrEnabled) { + logger?.warn( + `'baseHref' in 'i18n.locales.${locale}' may lead to undefined behavior when used with SSR. ` + + `Consider using 'subPath' instead.\n\n` + + `Note: 'subPath' specifies the URL segment for the locale, serving as both the HTML base HREF ` + + `and the output directory name.\nBy default, if not explicitly set, 'subPath' defaults to the locale code.`, + ); + } baseHref = options.baseHref; } if ('subPath' in options) { - ensureString(options.subPath, `i18n.locales.${locale}.subPath`); + ensureValidSubPath(options.subPath, `i18n.locales.${locale}.subPath`); subPath = options.subPath; } @@ -193,8 +201,24 @@ export function createI18nOptions( } } - // Check that subPaths are unique. - const localesData = Object.entries(i18n.locales); + if (inline === true) { + i18n.inlineLocales.add(i18n.sourceLocale); + Object.keys(i18n.locales).forEach((locale) => i18n.inlineLocales.add(locale)); + } else if (inline) { + for (const locale of inline) { + if (!i18n.locales[locale] && i18n.sourceLocale !== locale) { + throw new Error(`Requested locale '${locale}' is not defined for the project.`); + } + + i18n.inlineLocales.add(locale); + } + } + + // Check that subPaths are unique only the locales that we are inlining. + const localesData = Object.entries(i18n.locales).filter(([locale]) => + i18n.inlineLocales.has(locale), + ); + for (let i = 0; i < localesData.length; i++) { const [localeA, { subPath: subPathA }] = localesData[i]; @@ -209,19 +233,6 @@ export function createI18nOptions( } } - if (inline === true) { - i18n.inlineLocales.add(i18n.sourceLocale); - Object.keys(i18n.locales).forEach((locale) => i18n.inlineLocales.add(locale)); - } else if (inline) { - for (const locale of inline) { - if (!i18n.locales[locale] && i18n.sourceLocale !== locale) { - throw new Error(`Requested locale '${locale}' is not defined for the project.`); - } - - i18n.inlineLocales.add(locale); - } - } - return i18n; } diff --git a/packages/angular/build/src/utils/index-file/auto-csp.ts b/packages/angular/build/src/utils/index-file/auto-csp.ts index 8a5e339a9ac4..c50e0bfce3f2 100644 --- a/packages/angular/build/src/utils/index-file/auto-csp.ts +++ b/packages/angular/build/src/utils/index-file/auto-csp.ts @@ -98,7 +98,7 @@ export async function autoCsp(html: string, unsafeEval = false): Promise<string> scriptContent = []; } - rewriter.on('startTag', (tag, html) => { + rewriter.on('startTag', (tag) => { if (tag.tagName === 'script') { openedScriptTag = tag; const src = getScriptAttributeValue(tag, 'src'); diff --git a/packages/angular/build/src/utils/index-file/index-html-generator.ts b/packages/angular/build/src/utils/index-file/index-html-generator.ts index 9bfb929c5d11..52a926ef58eb 100644 --- a/packages/angular/build/src/utils/index-file/index-html-generator.ts +++ b/packages/angular/build/src/utils/index-file/index-html-generator.ts @@ -82,7 +82,7 @@ export class IndexHtmlGenerator { // CSR plugins if (options?.optimization?.styles?.inlineCritical) { - this.csrPlugins.push(inlineCriticalCssPlugin(this)); + this.csrPlugins.push(inlineCriticalCssPlugin(this, !!options.autoCsp)); } this.csrPlugins.push(addNoncePlugin()); @@ -197,11 +197,15 @@ function inlineFontsPlugin({ options }: IndexHtmlGenerator): IndexHtmlGeneratorP return async (html) => inlineFontsProcessor.process(html); } -function inlineCriticalCssPlugin(generator: IndexHtmlGenerator): IndexHtmlGeneratorPlugin { +function inlineCriticalCssPlugin( + generator: IndexHtmlGenerator, + autoCsp: boolean, +): IndexHtmlGeneratorPlugin { const inlineCriticalCssProcessor = new InlineCriticalCssProcessor({ minify: generator.options.optimization?.styles.minify, deployUrl: generator.options.deployUrl, readAsset: (filePath) => generator.readAsset(filePath), + autoCsp, }); return async (html, options) => diff --git a/packages/angular/build/src/utils/index-file/inline-critical-css.ts b/packages/angular/build/src/utils/index-file/inline-critical-css.ts index 47bee2145614..e5106f39cf6b 100644 --- a/packages/angular/build/src/utils/index-file/inline-critical-css.ts +++ b/packages/angular/build/src/utils/index-file/inline-critical-css.ts @@ -68,6 +68,7 @@ export interface InlineCriticalCssProcessorOptions { minify?: boolean; deployUrl?: string; readAsset?: (path: string) => Promise<string>; + autoCsp?: boolean; } /** Partial representation of an `HTMLElement`. */ @@ -163,7 +164,7 @@ class BeastiesExtended extends BeastiesBase { const returnValue = await super.embedLinkedStylesheet(link, document); const cspNonce = this.findCspNonce(document); - if (cspNonce) { + if (cspNonce || this.optionsExtended.autoCsp) { const beastiesMedia = link.getAttribute('onload')?.match(MEDIA_SET_HANDLER_PATTERN); if (beastiesMedia) { @@ -180,11 +181,13 @@ class BeastiesExtended extends BeastiesBase { // a way of doing that at the moment so we fall back to doing it any time a `link` tag is // inserted. We mitigate it by only iterating the direct children of the `<head>` which // should be pretty shallow. - document.head.children.forEach((child) => { - if (child.tagName === 'style' && !child.hasAttribute('nonce')) { - child.setAttribute('nonce', cspNonce); - } - }); + if (cspNonce) { + document.head.children.forEach((child) => { + if (child.tagName === 'style' && !child.hasAttribute('nonce')) { + child.setAttribute('nonce', cspNonce); + } + }); + } } return returnValue; @@ -215,7 +218,7 @@ class BeastiesExtended extends BeastiesBase { */ private conditionallyInsertCspLoadingScript( document: PartialDocument, - nonce: string, + nonce: string | null, link: PartialHTMLElement, ): void { if (this.addedCspScriptsDocuments.has(document)) { @@ -223,8 +226,11 @@ class BeastiesExtended extends BeastiesBase { } const script = document.createElement('script'); - script.setAttribute('nonce', nonce); script.textContent = LINK_LOAD_SCRIPT_CONTENT; + if (nonce) { + script.setAttribute('nonce', nonce); + } + // Prepend the script to the head since it needs to // run as early as possible, before the `link` tags. document.head.insertBefore(script, link); diff --git a/packages/angular/build/src/utils/index-file/inline-critical-css_spec.ts b/packages/angular/build/src/utils/index-file/inline-critical-css_spec.ts index 4c68304cd9d6..86e38b39f811 100644 --- a/packages/angular/build/src/utils/index-file/inline-critical-css_spec.ts +++ b/packages/angular/build/src/utils/index-file/inline-critical-css_spec.ts @@ -106,6 +106,26 @@ describe('InlineCriticalCssProcessor', () => { expect(content).toContain('<style>body{margin:0}html{color:white}</style>'); }); + it(`should process the inline 'onload' handlers if a 'autoCsp' is true`, async () => { + const inlineCssProcessor = new InlineCriticalCssProcessor({ + readAsset, + autoCsp: true, + }); + + const { content } = await inlineCssProcessor.process(getContent(''), { + outputPath: '/dist/', + }); + + expect(content).toContain( + '<link href="styles.css" rel="stylesheet" media="print" ngCspMedia="all">', + ); + expect(tags.stripIndents`${content}`).toContain(tags.stripIndents` + <style> + body { margin: 0; } + html { color: white; } + </style>`); + }); + it('should process the inline `onload` handlers if a CSP nonce is specified', async () => { const inlineCssProcessor = new InlineCriticalCssProcessor({ readAsset, diff --git a/packages/angular/build/src/utils/load-translations.ts b/packages/angular/build/src/utils/load-translations.ts index c6afe9a1ecd9..eeac280cbf9b 100644 --- a/packages/angular/build/src/utils/load-translations.ts +++ b/packages/angular/build/src/utils/load-translations.ts @@ -7,8 +7,8 @@ */ import type { Diagnostics } from '@angular/localize/tools'; -import { createHash } from 'crypto'; -import * as fs from 'fs'; +import { createHash } from 'node:crypto'; +import * as fs from 'node:fs'; import { loadEsmModule } from './load-esm'; export type TranslationLoader = (path: string) => { diff --git a/packages/angular/build/src/utils/normalize-asset-patterns.ts b/packages/angular/build/src/utils/normalize-asset-patterns.ts index 246b6190fdf8..8a8b2c2cbf1f 100644 --- a/packages/angular/build/src/utils/normalize-asset-patterns.ts +++ b/packages/angular/build/src/utils/normalize-asset-patterns.ts @@ -6,9 +6,9 @@ * found in the LICENSE file at https://angular.dev/license */ -import { statSync } from 'fs'; import assert from 'node:assert'; -import * as path from 'path'; +import { statSync } from 'node:fs'; +import * as path from 'node:path'; import { AssetPattern, AssetPatternClass } from '../builders/application/schema'; export class MissingAssetSourceRootException extends Error { diff --git a/packages/angular/build/src/utils/server-rendering/esm-in-memory-loader/loader-hooks.ts b/packages/angular/build/src/utils/server-rendering/esm-in-memory-loader/loader-hooks.ts index 74a2df7636ec..9e1a657366a0 100644 --- a/packages/angular/build/src/utils/server-rendering/esm-in-memory-loader/loader-hooks.ts +++ b/packages/angular/build/src/utils/server-rendering/esm-in-memory-loader/loader-hooks.ts @@ -9,8 +9,7 @@ import assert from 'node:assert'; import { randomUUID } from 'node:crypto'; import { join } from 'node:path'; -import { pathToFileURL } from 'node:url'; -import { fileURLToPath } from 'url'; +import { fileURLToPath, pathToFileURL } from 'node:url'; import { JavaScriptTransformer } from '../../../tools/esbuild/javascript-transformer'; /** diff --git a/packages/angular/build/src/utils/server-rendering/launch-server.ts b/packages/angular/build/src/utils/server-rendering/launch-server.ts index 4d8f3fbdd259..cfb15b0d979b 100644 --- a/packages/angular/build/src/utils/server-rendering/launch-server.ts +++ b/packages/angular/build/src/utils/server-rendering/launch-server.ts @@ -33,7 +33,7 @@ export async function launchServer(): Promise<URL> { // handle request if (isSsrNodeRequestHandler(reqHandler)) { await reqHandler(req, res, (e) => { - throw e; + throw e ?? new Error(`Unable to handle request: '${req.url}'.`); }); } else { const webRes = await reqHandler(createWebRequestFromNodeRequest(req)); diff --git a/packages/angular/build/src/utils/server-rendering/manifest.ts b/packages/angular/build/src/utils/server-rendering/manifest.ts index a8be8d833efa..4d1459e221c2 100644 --- a/packages/angular/build/src/utils/server-rendering/manifest.ts +++ b/packages/angular/build/src/utils/server-rendering/manifest.ts @@ -8,6 +8,7 @@ import type { Metafile } from 'esbuild'; import { extname } from 'node:path'; +import { runInThisContext } from 'node:vm'; import { NormalizedApplicationBuildOptions } from '../../builders/application/options'; import { type BuildOutputFile, BuildOutputFileType } from '../../tools/esbuild/bundler-context'; import { createOutputFile } from '../../tools/esbuild/utils'; @@ -139,20 +140,27 @@ export function generateAngularServerAppManifest( } { const serverAssetsChunks: BuildOutputFile[] = []; const serverAssets: Record<string, string> = {}; + for (const file of [...additionalHtmlOutputFiles.values(), ...outputFiles]) { const extension = extname(file.path); if (extension === '.html' || (inlineCriticalCss && extension === '.css')) { const jsChunkFilePath = `assets-chunks/${file.path.replace(/[./]/g, '_')}.mjs`; + const escapedContent = escapeUnsafeChars(file.text); + serverAssetsChunks.push( createOutputFile( jsChunkFilePath, - `export default \`${escapeUnsafeChars(file.text)}\`;`, + `export default \`${escapedContent}\`;`, BuildOutputFileType.ServerApplication, ), ); + // This is needed because JavaScript engines script parser convert `\r\n` to `\n` in template literals, + // which can result in an incorrect byte length. + const size = runInThisContext(`new TextEncoder().encode(\`${escapedContent}\`).byteLength`); + serverAssets[file.path] = - `{size: ${file.size}, hash: '${file.hash}', text: () => import('./${jsChunkFilePath}').then(m => m.default)}`; + `{size: ${size}, hash: '${file.hash}', text: () => import('./${jsChunkFilePath}').then(m => m.default)}`; } } diff --git a/packages/angular/build/src/utils/server-rendering/prerender.ts b/packages/angular/build/src/utils/server-rendering/prerender.ts index 93b76bf17dcf..a8a42c7c941a 100644 --- a/packages/angular/build/src/utils/server-rendering/prerender.ts +++ b/packages/angular/build/src/utils/server-rendering/prerender.ts @@ -16,6 +16,7 @@ import { assertIsError } from '../error'; import { urlJoin } from '../url'; import { WorkerPool } from '../worker-pool'; import { IMPORT_EXEC_ARGV } from './esm-in-memory-loader/utils'; +import { SERVER_APP_MANIFEST_FILENAME } from './manifest'; import { RouteRenderMode, RoutersExtractorWorkerResult, @@ -112,7 +113,7 @@ export async function prerenderPages( outputMode, ).catch((err) => { return { - errors: [`An error occurred while extracting routes.\n\n${err.stack ?? err.message ?? err}`], + errors: [`An error occurred while extracting routes.\n\n${err.message ?? err.stack ?? err}`], serializedRouteTree: [], appShellRoute: undefined, }; @@ -156,6 +157,16 @@ export async function prerenderPages( }; } + // Add the extracted routes to the manifest file. + // We could re-generate it from the start, but that would require a number of options to be passed down. + const manifest = outputFilesForWorker[SERVER_APP_MANIFEST_FILENAME]; + if (manifest) { + outputFilesForWorker[SERVER_APP_MANIFEST_FILENAME] = manifest.replace( + 'routes: undefined,', + `routes: ${JSON.stringify(serializableRouteTreeNodeForPrerender, undefined, 2)},`, + ); + } + // Render routes const { errors: renderingErrors, output } = await renderPages( baseHref, @@ -217,12 +228,14 @@ async function renderPages( try { const renderingPromises: Promise<void>[] = []; const appShellRouteWithLeadingSlash = appShellRoute && addLeadingSlash(appShellRoute); - const baseHrefWithLeadingSlash = addLeadingSlash(baseHref); + const baseHrefPathnameWithLeadingSlash = new URL(baseHref, 'http://localhost').pathname; for (const { route, redirectTo } of serializableRouteTreeNode) { // Remove the base href from the file output path. - const routeWithoutBaseHref = addTrailingSlash(route).startsWith(baseHrefWithLeadingSlash) - ? addLeadingSlash(route.slice(baseHrefWithLeadingSlash.length)) + const routeWithoutBaseHref = addTrailingSlash(route).startsWith( + baseHrefPathnameWithLeadingSlash, + ) + ? addLeadingSlash(route.slice(baseHrefPathnameWithLeadingSlash.length)) : route; const outPath = posix.join(removeLeadingSlash(routeWithoutBaseHref), 'index.html'); @@ -245,7 +258,7 @@ async function renderPages( }) .catch((err) => { errors.push( - `An error occurred while prerendering route '${route}'.\n\n${err.stack ?? err.message ?? err.code ?? err}`, + `An error occurred while prerendering route '${route}'.\n\n${err.message ?? err.stack ?? err.code ?? err}`, ); void renderWorker.destroy(); }); @@ -346,7 +359,7 @@ async function getAllRoutes( return { errors: [ - `An error occurred while extracting routes.\n\n${err.stack ?? err.message ?? err.code ?? err}`, + `An error occurred while extracting routes.\n\n${err.message ?? err.stack ?? err.code ?? err}`, ], serializedRouteTree: [], }; diff --git a/packages/angular/build/src/utils/server-rendering/render-worker.ts b/packages/angular/build/src/utils/server-rendering/render-worker.ts index 4b4c1aed0bc4..92fad35df32a 100644 --- a/packages/angular/build/src/utils/server-rendering/render-worker.ts +++ b/packages/angular/build/src/utils/server-rendering/render-worker.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { workerData } from 'worker_threads'; +import { workerData } from 'node:worker_threads'; import type { OutputMode } from '../../builders/application/schema'; import type { ESMInMemoryFileLoaderWorkerData } from './esm-in-memory-loader/loader-hooks'; import { patchFetchToLoadInMemoryAssets } from './fetch-patch'; diff --git a/packages/angular/build/src/utils/server-rendering/routes-extractor-worker.ts b/packages/angular/build/src/utils/server-rendering/routes-extractor-worker.ts index d2029b81ea3c..1487db07e811 100644 --- a/packages/angular/build/src/utils/server-rendering/routes-extractor-worker.ts +++ b/packages/angular/build/src/utils/server-rendering/routes-extractor-worker.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { workerData } from 'worker_threads'; +import { workerData } from 'node:worker_threads'; import { OutputMode } from '../../builders/application/schema'; import { ESMInMemoryFileLoaderWorkerData } from './esm-in-memory-loader/loader-hooks'; import { patchFetchToLoadInMemoryAssets } from './fetch-patch'; diff --git a/packages/angular/build/src/utils/service-worker.ts b/packages/angular/build/src/utils/service-worker.ts index 96447012652f..f9d5c14d27fd 100644 --- a/packages/angular/build/src/utils/service-worker.ts +++ b/packages/angular/build/src/utils/service-worker.ts @@ -7,9 +7,9 @@ */ import type { Config, Filesystem } from '@angular/service-worker/config'; -import * as crypto from 'crypto'; +import * as crypto from 'node:crypto'; import { existsSync, constants as fsConstants, promises as fsPromises } from 'node:fs'; -import * as path from 'path'; +import * as path from 'node:path'; import { BuildOutputFile, BuildOutputFileType } from '../tools/esbuild/bundler-context'; import { BuildOutputAsset } from '../tools/esbuild/bundler-execution-result'; import { assertIsError } from './error'; @@ -126,7 +126,7 @@ export async function augmentAppWithServiceWorker( outputPath: string, baseHref: string, ngswConfigPath?: string, - inputputFileSystem = fsPromises, + inputFileSystem = fsPromises, outputFileSystem = fsPromises, ): Promise<void> { // Determine the configuration file path @@ -137,7 +137,7 @@ export async function augmentAppWithServiceWorker( // Read the configuration file let config: Config | undefined; try { - const configurationData = await inputputFileSystem.readFile(configPath, 'utf-8'); + const configurationData = await inputFileSystem.readFile(configPath, 'utf-8'); config = JSON.parse(configurationData) as Config; } catch (error) { assertIsError(error); @@ -161,11 +161,7 @@ export async function augmentAppWithServiceWorker( const copy = async (src: string, dest: string): Promise<void> => { const resolvedDest = path.join(outputPath, dest); - return inputputFileSystem === outputFileSystem - ? // Native FS (Builder). - inputputFileSystem.copyFile(src, resolvedDest, fsConstants.COPYFILE_FICLONE) - : // memfs (Webpack): Read the file from the input FS (disk) and write it to the output FS (memory). - outputFileSystem.writeFile(resolvedDest, await inputputFileSystem.readFile(src)); + return outputFileSystem.writeFile(resolvedDest, await inputFileSystem.readFile(src)); }; await outputFileSystem.writeFile(path.join(outputPath, 'ngsw.json'), result.manifest); diff --git a/packages/angular/build/src/utils/version.ts b/packages/angular/build/src/utils/version.ts index 80c531336bcb..51f493bfe993 100644 --- a/packages/angular/build/src/utils/version.ts +++ b/packages/angular/build/src/utils/version.ts @@ -12,7 +12,6 @@ import { createRequire } from 'node:module'; import { SemVer, satisfies } from 'semver'; export function assertCompatibleAngularVersion(projectRoot: string): void | never { - let angularCliPkgJson; let angularPkgJson; // Create a custom require function for ESM compliance. @@ -20,59 +19,36 @@ export function assertCompatibleAngularVersion(projectRoot: string): void | neve const projectRequire = createRequire(projectRoot + '/'); try { - const angularPackagePath = projectRequire.resolve('@angular/core/package.json'); - - angularPkgJson = projectRequire(angularPackagePath); + angularPkgJson = projectRequire('@angular/core/package.json'); } catch { - console.error('You seem to not be depending on "@angular/core". This is an error.'); + console.error( + 'Error: It appears that "@angular/core" is missing as a dependency. Please ensure it is included in your project.', + ); process.exit(2); } - if (!(angularPkgJson && angularPkgJson['version'])) { + if (!angularPkgJson?.['version']) { console.error( - 'Cannot determine versions of "@angular/core".\n' + - 'This likely means your local installation is broken. Please reinstall your packages.', + 'Error: Unable to determine the versions of "@angular/core".\n' + + 'This likely indicates a corrupted local installation. Please try reinstalling your packages.', ); process.exit(2); } - try { - const angularCliPkgPath = projectRequire.resolve('@angular/cli/package.json'); - angularCliPkgJson = projectRequire(angularCliPkgPath); - if (!(angularCliPkgJson && angularCliPkgJson['version'])) { - return; - } - } catch { - // Not using @angular-devkit/build-angular with @angular/cli is ok too. - // In this case we don't provide as many version checks. - return; - } - - if (angularCliPkgJson['version'] === '0.0.0' || angularPkgJson['version'] === '0.0.0') { - // Internal CLI testing version or integration testing in the angular/angular - // repository with the generated development @angular/core npm package which is versioned "0.0.0". + const supportedAngularSemver = '0.0.0-ANGULAR-FW-PEER-DEP'; + if (angularPkgJson['version'] === '0.0.0' || supportedAngularSemver.startsWith('0.0.0')) { + // Internal CLI and FW testing version. return; } - let supportedAngularSemver; - try { - supportedAngularSemver = projectRequire('@angular/build/package.json')['peerDependencies'][ - '@angular/compiler-cli' - ]; - } catch { - supportedAngularSemver = projectRequire('@angular-devkit/build-angular/package.json')[ - 'peerDependencies' - ]['@angular/compiler-cli']; - } - const angularVersion = new SemVer(angularPkgJson['version']); if (!satisfies(angularVersion, supportedAngularSemver, { includePrerelease: true })) { console.error( - `This version of CLI is only compatible with Angular versions ${supportedAngularSemver},\n` + - `but Angular version ${angularVersion} was found instead.\n` + + `Error: The current version of "@angular/build" supports Angular versions ${supportedAngularSemver},\n` + + `but detected Angular version ${angularVersion} instead.\n` + 'Please visit the link below to find instructions on how to update Angular.\nhttps://update.angular.dev/', ); diff --git a/packages/angular/cli/BUILD.bazel b/packages/angular/cli/BUILD.bazel index abee3d62b711..d8f6620d5b09 100644 --- a/packages/angular/cli/BUILD.bazel +++ b/packages/angular/cli/BUILD.bazel @@ -3,9 +3,8 @@ # Use of this source code is governed by an MIT-style license that can be # found in the LICENSE file at https://angular.dev/license -load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") -load("//tools:defaults.bzl", "pkg_npm") -load("//tools:interop.bzl", "ts_project") +load("@npm2//:defs.bzl", "npm_link_all_packages") +load("//tools:defaults2.bzl", "jasmine_test", "npm_package", "ts_project") load("//tools:ng_cli_schema_generator.bzl", "cli_json_schema") load("//tools:ts_json_schema.bzl", "ts_json_schema") @@ -13,6 +12,21 @@ licenses(["notice"]) package(default_visibility = ["//visibility:public"]) +npm_link_all_packages() + +RUNTIME_ASSETS = glob( + include = [ + "bin/**/*", + "src/**/*.md", + "src/**/*.json", + ], + exclude = [ + "lib/config/workspace-schema.json", + ], +) + [ + "//packages/angular/cli:lib/config/schema.json", +] + ts_project( name = "angular-cli", srcs = glob( @@ -28,87 +42,41 @@ ts_project( "//packages/angular/cli:lib/config/workspace-schema.ts", "//packages/angular/cli:src/commands/update/schematic/schema.ts", ], - data = glob( - include = [ - "bin/**/*", - "src/**/*.md", - "src/**/*.json", - ], - exclude = [ - "lib/config/workspace-schema.json", - ], - ) + [ - "//packages/angular/cli:lib/config/schema.json", - ], - interop_deps = [ - "//packages/angular_devkit/schematics", - "//packages/angular_devkit/schematics/tasks", - "//packages/angular_devkit/schematics/tools", - ], + data = RUNTIME_ASSETS, module_name = "@angular/cli", deps = [ - "//:root_modules/@angular/core", - "//:root_modules/@inquirer/prompts", - "//:root_modules/@listr2/prompt-adapter-inquirer", - "//:root_modules/@types/ini", - "//:root_modules/@types/node", - "//:root_modules/@types/npm-package-arg", - "//:root_modules/@types/pacote", - "//:root_modules/@types/resolve", - "//:root_modules/@types/semver", - "//:root_modules/@types/yargs", - "//:root_modules/@types/yarnpkg__lockfile", - "//:root_modules/@yarnpkg/lockfile", - "//:root_modules/ini", - "//:root_modules/jsonc-parser", - "//:root_modules/listr2", - "//:root_modules/npm-package-arg", - "//:root_modules/npm-pick-manifest", - "//:root_modules/pacote", - "//:root_modules/semver", - "//:root_modules/yargs", - "//packages/angular_devkit/architect:architect_rjs", - "//packages/angular_devkit/architect/node:node_rjs", - "//packages/angular_devkit/core:core_rjs", - "//packages/angular_devkit/core/node:node_rjs", + ":node_modules/@angular-devkit/architect", + ":node_modules/@angular-devkit/core", + ":node_modules/@angular-devkit/schematics", + ":node_modules/resolve", + "//:node_modules/@angular/core", + "//:node_modules/@inquirer/prompts", + "//:node_modules/@listr2/prompt-adapter-inquirer", + "//:node_modules/@types/ini", + "//:node_modules/@types/node", + "//:node_modules/@types/npm-package-arg", + "//:node_modules/@types/pacote", + "//:node_modules/@types/resolve", + "//:node_modules/@types/semver", + "//:node_modules/@types/yargs", + "//:node_modules/@types/yarnpkg__lockfile", + "//:node_modules/@yarnpkg/lockfile", + "//:node_modules/ini", + "//:node_modules/jsonc-parser", + "//:node_modules/listr2", + "//:node_modules/npm-package-arg", + "//:node_modules/npm-pick-manifest", + "//:node_modules/pacote", + "//:node_modules/semver", + "//:node_modules/symbol-observable", + "//:node_modules/yargs", ], ) CLI_SCHEMA_DATA = [ - "//packages/angular/build:src/builders/application/schema.json", - "//packages/angular/build:src/builders/dev-server/schema.json", - "//packages/angular/build:src/builders/extract-i18n/schema.json", - "//packages/angular/build:src/builders/ng-packagr/schema.json", - "//packages/angular_devkit/build_angular:src/builders/app-shell/schema.json", - "//packages/angular_devkit/build_angular:src/builders/browser/schema.json", - "//packages/angular_devkit/build_angular:src/builders/browser-esbuild/schema.json", - "//packages/angular_devkit/build_angular:src/builders/dev-server/schema.json", - "//packages/angular_devkit/build_angular:src/builders/extract-i18n/schema.json", - "//packages/angular_devkit/build_angular:src/builders/jest/schema.json", - "//packages/angular_devkit/build_angular:src/builders/web-test-runner/schema.json", - "//packages/angular_devkit/build_angular:src/builders/karma/schema.json", - "//packages/angular_devkit/build_angular:src/builders/ng-packagr/schema.json", - "//packages/angular_devkit/build_angular:src/builders/prerender/schema.json", - "//packages/angular_devkit/build_angular:src/builders/ssr-dev-server/schema.json", - "//packages/angular_devkit/build_angular:src/builders/protractor/schema.json", - "//packages/angular_devkit/build_angular:src/builders/server/schema.json", - "//packages/schematics/angular:app-shell/schema.json", - "//packages/schematics/angular:application/schema.json", - "//packages/schematics/angular:class/schema.json", - "//packages/schematics/angular:component/schema.json", - "//packages/schematics/angular:directive/schema.json", - "//packages/schematics/angular:enum/schema.json", - "//packages/schematics/angular:guard/schema.json", - "//packages/schematics/angular:interceptor/schema.json", - "//packages/schematics/angular:interface/schema.json", - "//packages/schematics/angular:library/schema.json", - "//packages/schematics/angular:module/schema.json", - "//packages/schematics/angular:ng-new/schema.json", - "//packages/schematics/angular:pipe/schema.json", - "//packages/schematics/angular:resolver/schema.json", - "//packages/schematics/angular:service/schema.json", - "//packages/schematics/angular:service-worker/schema.json", - "//packages/schematics/angular:web-worker/schema.json", + "//packages/angular/build:schemas", + "//packages/angular_devkit/build_angular:schemas", + "//packages/schematics/angular:schemas", ] cli_json_schema( @@ -139,21 +107,21 @@ ts_project( "node_modules/**", ], ), - interop_deps = [ - "//packages/angular_devkit/schematics", - "//packages/angular_devkit/schematics/testing", - ], + # TODO: Fix strict_deps failure + ignore_strict_deps = True, deps = [ - ":angular-cli_rjs", - "//:root_modules/@types/semver", - "//:root_modules/@types/yargs", - "//packages/angular_devkit/core:core_rjs", + ":angular-cli", + "//:node_modules/@types/semver", + "//:node_modules/@types/yargs", + "//packages/angular_devkit/core:core", + "//packages/angular_devkit/schematics:schematics", + "//packages/angular_devkit/schematics/testing:testing", ], ) -jasmine_node_test( +jasmine_test( name = "angular-cli_test", - srcs = [":angular-cli_test_lib"], + data = [":angular-cli_test_lib"], ) genrule( @@ -163,8 +131,8 @@ genrule( cmd = "cp $(execpath //:LICENSE) $@", ) -pkg_npm( - name = "npm_package", +npm_package( + name = "pkg", pkg_deps = [ "//packages/angular_devkit/architect:package.json", "//packages/angular_devkit/build_angular:package.json", @@ -173,12 +141,13 @@ pkg_npm( "//packages/angular_devkit/schematics:package.json", "//packages/schematics/angular:package.json", ], + stamp_files = [ + "src/utilities/version.js", + ], tags = ["release-package"], - deps = [ + deps = RUNTIME_ASSETS + [ ":README.md", ":angular-cli", ":license", - ":src/commands/update/schematic/collection.json", - ":src/commands/update/schematic/schema.json", ], ) diff --git a/packages/angular/cli/README.md b/packages/angular/cli/README.md index 07b498c785dc..4fa87391f04c 100644 --- a/packages/angular/cli/README.md +++ b/packages/angular/cli/README.md @@ -2,4 +2,4 @@ The sources for this package are in the [Angular CLI](https://github.com/angular/angular-cli) repository. Please file issues and pull requests against that repository. -Usage information and reference details can be found in repository [README](../../../README.md) file. +Usage information and reference details can be found in repository [README](https://github.com/angular/angular-cli/blob/main/README.md) file. diff --git a/packages/angular/cli/lib/config/workspace-schema.json b/packages/angular/cli/lib/config/workspace-schema.json index edffabf285ef..0fdf0b19c41e 100644 --- a/packages/angular/cli/lib/config/workspace-schema.json +++ b/packages/angular/cli/lib/config/workspace-schema.json @@ -284,7 +284,6 @@ }, "baseHref": { "type": "string", - "deprecated": true, "description": "Specifies the HTML base HREF for the locale. Defaults to the locale code if not provided." }, "subPath": { @@ -356,7 +355,6 @@ }, "baseHref": { "type": "string", - "deprecated": true, "description": "Specifies the HTML base HREF for the locale. Defaults to the locale code if not provided." }, "subPath": { @@ -407,6 +405,7 @@ "@angular/build:application", "@angular/build:dev-server", "@angular/build:extract-i18n", + "@angular/build:karma", "@angular/build:ng-packagr", "@angular-devkit/build-angular:application", "@angular-devkit/build-angular:app-shell", @@ -640,6 +639,28 @@ } } }, + { + "type": "object", + "additionalProperties": false, + "properties": { + "builder": { + "const": "@angular/build:karma" + }, + "defaultConfiguration": { + "type": "string", + "description": "A default named configuration to use when a target configuration is not provided." + }, + "options": { + "$ref": "../../../../angular/build/src/builders/karma/schema.json" + }, + "configurations": { + "type": "object", + "additionalProperties": { + "$ref": "../../../../angular/build/src/builders/karma/schema.json" + } + } + } + }, { "type": "object", "additionalProperties": false, diff --git a/packages/angular/cli/lib/init.ts b/packages/angular/cli/lib/init.ts index dc3d54ab1ded..181166d621c4 100644 --- a/packages/angular/cli/lib/init.ts +++ b/packages/angular/cli/lib/init.ts @@ -8,9 +8,9 @@ import 'symbol-observable'; // symbol polyfill must go first -import { promises as fs } from 'fs'; -import { createRequire } from 'module'; -import * as path from 'path'; +import { promises as fs } from 'node:fs'; +import { createRequire } from 'node:module'; +import * as path from 'node:path'; import { SemVer, major } from 'semver'; import { colors } from '../src/utilities/color'; import { isWarningEnabled } from '../src/utilities/config'; diff --git a/packages/angular/cli/package.json b/packages/angular/cli/package.json index 73d8eabb6795..6d4bbdb266a0 100644 --- a/packages/angular/cli/package.json +++ b/packages/angular/cli/package.json @@ -22,21 +22,21 @@ }, "homepage": "https://github.com/angular/angular-cli", "dependencies": { - "@angular-devkit/architect": "0.0.0-EXPERIMENTAL-PLACEHOLDER", - "@angular-devkit/core": "0.0.0-PLACEHOLDER", - "@angular-devkit/schematics": "0.0.0-PLACEHOLDER", - "@inquirer/prompts": "7.2.1", + "@angular-devkit/architect": "workspace:0.0.0-EXPERIMENTAL-PLACEHOLDER", + "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", + "@angular-devkit/schematics": "workspace:0.0.0-PLACEHOLDER", + "@inquirer/prompts": "7.3.2", "@listr2/prompt-adapter-inquirer": "2.0.18", - "@schematics/angular": "0.0.0-PLACEHOLDER", + "@schematics/angular": "workspace:0.0.0-PLACEHOLDER", "@yarnpkg/lockfile": "1.1.0", "ini": "5.0.0", "jsonc-parser": "3.3.1", "listr2": "8.2.5", - "npm-package-arg": "12.0.1", + "npm-package-arg": "12.0.2", "npm-pick-manifest": "10.0.0", "pacote": "20.0.0", "resolve": "1.22.10", - "semver": "7.6.3", + "semver": "7.7.1", "symbol-observable": "4.0.0", "yargs": "17.7.2" }, diff --git a/packages/angular/cli/src/analytics/analytics-collector.ts b/packages/angular/cli/src/analytics/analytics-collector.ts index 379006bef2b9..052bc5cbe74c 100644 --- a/packages/angular/cli/src/analytics/analytics-collector.ts +++ b/packages/angular/cli/src/analytics/analytics-collector.ts @@ -6,10 +6,10 @@ * found in the LICENSE file at https://angular.dev/license */ -import { randomUUID } from 'crypto'; -import * as https from 'https'; -import * as os from 'os'; -import * as querystring from 'querystring'; +import { randomUUID } from 'node:crypto'; +import * as https from 'node:https'; +import * as os from 'node:os'; +import * as querystring from 'node:querystring'; import * as semver from 'semver'; import type { CommandContext } from '../command-builder/command-module'; import { ngDebug } from '../utilities/environment-options'; diff --git a/packages/angular/cli/src/analytics/analytics.ts b/packages/angular/cli/src/analytics/analytics.ts index f107f6f5ca22..752b0dfca88a 100644 --- a/packages/angular/cli/src/analytics/analytics.ts +++ b/packages/angular/cli/src/analytics/analytics.ts @@ -7,7 +7,7 @@ */ import { json, tags } from '@angular-devkit/core'; -import { randomUUID } from 'crypto'; +import { randomUUID } from 'node:crypto'; import type { CommandContext } from '../command-builder/command-module'; import { colors } from '../utilities/color'; import { getWorkspace } from '../utilities/config'; diff --git a/packages/angular/cli/src/command-builder/command-module.ts b/packages/angular/cli/src/command-builder/command-module.ts index 59987ed34679..a97815eec027 100644 --- a/packages/angular/cli/src/command-builder/command-module.ts +++ b/packages/angular/cli/src/command-builder/command-module.ts @@ -7,8 +7,8 @@ */ import { logging, schema } from '@angular-devkit/core'; -import { readFileSync } from 'fs'; -import * as path from 'path'; +import { readFileSync } from 'node:fs'; +import * as path from 'node:path'; import yargs, { ArgumentsCamelCase, Argv, diff --git a/packages/angular/cli/src/command-builder/schematics-command-module.ts b/packages/angular/cli/src/command-builder/schematics-command-module.ts index 80d3fa367496..738fd497382b 100644 --- a/packages/angular/cli/src/command-builder/schematics-command-module.ts +++ b/packages/angular/cli/src/command-builder/schematics-command-module.ts @@ -13,7 +13,7 @@ import { FileSystemSchematicDescription, NodeWorkflow, } from '@angular-devkit/schematics/tools'; -import { relative, resolve } from 'path'; +import { relative } from 'node:path'; import { Argv } from 'yargs'; import { isPackageNameSafeForAnalytics } from '../analytics/analytics'; import { EventCustomDimension } from '../analytics/analytics-parameters'; @@ -143,27 +143,21 @@ export abstract class SchematicsCommandModule workingDir === '' ? undefined : workingDir, ); - let shouldReportAnalytics = true; workflow.engineHost.registerOptionsTransform(async (schematic, options) => { - // Report analytics - if (shouldReportAnalytics) { - shouldReportAnalytics = false; - - const { - collection: { name: collectionName }, - name: schematicName, - } = schematic; - - const analytics = isPackageNameSafeForAnalytics(collectionName) - ? await this.getAnalytics() - : undefined; - - analytics?.reportSchematicRunEvent({ - [EventCustomDimension.SchematicCollectionName]: collectionName, - [EventCustomDimension.SchematicName]: schematicName, - ...this.getAnalyticsParameters(options as unknown as {}), - }); - } + const { + collection: { name: collectionName }, + name: schematicName, + } = schematic; + + const analytics = isPackageNameSafeForAnalytics(collectionName) + ? await this.getAnalytics() + : undefined; + + analytics?.reportSchematicRunEvent({ + [EventCustomDimension.SchematicCollectionName]: collectionName, + [EventCustomDimension.SchematicName]: schematicName, + ...this.getAnalyticsParameters(options as unknown as {}), + }); return options; }); @@ -277,12 +271,6 @@ export abstract class SchematicsCommandModule @memoize protected async getSchematicCollections(): Promise<Set<string>> { - // Resolve relative collections from the location of `angular.json` - const resolveRelativeCollection = (collectionName: string) => - collectionName.charAt(0) === '.' - ? resolve(this.context.root, collectionName) - : collectionName; - const getSchematicCollections = ( configSection: Record<string, unknown> | undefined, ): Set<string> | undefined => { @@ -292,7 +280,7 @@ export abstract class SchematicsCommandModule const { schematicCollections } = configSection; if (Array.isArray(schematicCollections)) { - return new Set(schematicCollections.map((c) => resolveRelativeCollection(c))); + return new Set(schematicCollections); } return undefined; @@ -399,6 +387,10 @@ export abstract class SchematicsCommandModule private getResolvePaths(collectionName: string): string[] { const { workspace, root } = this.context; + if (collectionName[0] === '.') { + // Resolve relative collections from the location of `angular.json` + return [root]; + } return workspace ? // Workspace diff --git a/packages/angular/cli/src/command-builder/utilities/schematic-engine-host.ts b/packages/angular/cli/src/command-builder/utilities/schematic-engine-host.ts index ed17f97af942..e4b805f1a367 100644 --- a/packages/angular/cli/src/command-builder/utilities/schematic-engine-host.ts +++ b/packages/angular/cli/src/command-builder/utilities/schematic-engine-host.ts @@ -8,11 +8,11 @@ import { RuleFactory, SchematicsException, Tree } from '@angular-devkit/schematics'; import { FileSystemCollectionDesc, NodeModulesEngineHost } from '@angular-devkit/schematics/tools'; -import { readFileSync } from 'fs'; import { parse as parseJson } from 'jsonc-parser'; -import { Module, createRequire } from 'module'; -import { dirname, resolve } from 'path'; -import { Script } from 'vm'; +import { readFileSync } from 'node:fs'; +import { Module, createRequire } from 'node:module'; +import { dirname, resolve } from 'node:path'; +import { Script } from 'node:vm'; import { assertIsError } from '../../utilities/error'; /** diff --git a/packages/angular/cli/src/commands/add/cli.ts b/packages/angular/cli/src/commands/add/cli.ts index c280ba1af067..adaf980cd4b3 100644 --- a/packages/angular/cli/src/commands/add/cli.ts +++ b/packages/angular/cli/src/commands/add/cli.ts @@ -8,10 +8,10 @@ import { NodePackageDoesNotSupportSchematics } from '@angular-devkit/schematics/tools'; import { Listr, color, figures } from 'listr2'; -import { createRequire } from 'module'; import assert from 'node:assert'; +import { createRequire } from 'node:module'; +import { dirname, join } from 'node:path'; import npa from 'npm-package-arg'; -import { dirname, join } from 'path'; import { Range, compare, intersects, prerelease, satisfies, valid } from 'semver'; import { Argv } from 'yargs'; import { PackageManager } from '../../../lib/config/workspace-schema'; @@ -100,7 +100,11 @@ export default class AddCommandModule // `ng add @angular/localize -- --package-options`. .strict(false); - const collectionName = await this.getCollectionName(); + const collectionName = this.getCollectionName(); + if (!collectionName) { + return localYargs; + } + const workflow = this.getOrCreateWorkflowForBuilder(collectionName); try { @@ -401,14 +405,19 @@ export default class AddCommandModule return false; } - private async getCollectionName(): Promise<string> { - let [, collectionName] = this.context.args.positional; + private getCollectionName(): string | undefined { + const [, collectionName] = this.context.args.positional; + if (!collectionName) { + return undefined; + } // The CLI argument may specify also a version, like `ng add @my/lib@13.0.0`, - // but here we need only the name of the package, like `@my/lib` + // but here we need only the name of the package, like `@my/lib`. try { - const packageIdentifier = npa(collectionName); - collectionName = packageIdentifier.name ?? collectionName; + const packageName = npa(collectionName).name; + if (packageName) { + return packageName; + } } catch (e) { assertIsError(e); this.context.logger.error(e.message); diff --git a/packages/angular/cli/src/commands/build/cli.ts b/packages/angular/cli/src/commands/build/cli.ts index b98fc46c48e7..365420ca3734 100644 --- a/packages/angular/cli/src/commands/build/cli.ts +++ b/packages/angular/cli/src/commands/build/cli.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { join } from 'path'; +import { join } from 'node:path'; import { ArchitectCommandModule } from '../../command-builder/architect-command-module'; import { CommandModuleImplementation } from '../../command-builder/command-module'; import { RootCommands } from '../command-config'; diff --git a/packages/angular/cli/src/commands/cache/clean/cli.ts b/packages/angular/cli/src/commands/cache/clean/cli.ts index 4ede8b0a60a2..e037503846b6 100644 --- a/packages/angular/cli/src/commands/cache/clean/cli.ts +++ b/packages/angular/cli/src/commands/cache/clean/cli.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { promises as fs } from 'fs'; +import { promises as fs } from 'node:fs'; import { Argv } from 'yargs'; import { CommandModule, diff --git a/packages/angular/cli/src/commands/cache/cli.ts b/packages/angular/cli/src/commands/cache/cli.ts index 046673995846..97f3ed60f007 100644 --- a/packages/angular/cli/src/commands/cache/cli.ts +++ b/packages/angular/cli/src/commands/cache/cli.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { join } from 'path'; +import { join } from 'node:path'; import { Argv } from 'yargs'; import { CommandModule, diff --git a/packages/angular/cli/src/commands/cache/info/cli.ts b/packages/angular/cli/src/commands/cache/info/cli.ts index ec1802c65695..51fd8ca6bc9e 100644 --- a/packages/angular/cli/src/commands/cache/info/cli.ts +++ b/packages/angular/cli/src/commands/cache/info/cli.ts @@ -7,8 +7,8 @@ */ import { tags } from '@angular-devkit/core'; -import { promises as fs } from 'fs'; -import { join } from 'path'; +import { promises as fs } from 'node:fs'; +import { join } from 'node:path'; import { Argv } from 'yargs'; import { CommandModule, diff --git a/packages/angular/cli/src/commands/cache/utilities.ts b/packages/angular/cli/src/commands/cache/utilities.ts index 3f82b2d3a91e..84e22314763a 100644 --- a/packages/angular/cli/src/commands/cache/utilities.ts +++ b/packages/angular/cli/src/commands/cache/utilities.ts @@ -7,7 +7,7 @@ */ import { isJsonObject } from '@angular-devkit/core'; -import { resolve } from 'path'; +import { resolve } from 'node:path'; import { Cache, Environment } from '../../../lib/config/workspace-schema'; import { AngularWorkspace } from '../../utilities/config'; diff --git a/packages/angular/cli/src/commands/completion/cli.ts b/packages/angular/cli/src/commands/completion/cli.ts index 4cf0ef89bff8..ebbf4ffc992f 100644 --- a/packages/angular/cli/src/commands/completion/cli.ts +++ b/packages/angular/cli/src/commands/completion/cli.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { join } from 'path'; +import { join } from 'node:path'; import yargs, { Argv } from 'yargs'; import { CommandModule, CommandModuleImplementation } from '../../command-builder/command-module'; import { addCommandModuleToYargs } from '../../command-builder/utilities/command'; diff --git a/packages/angular/cli/src/commands/config/cli.ts b/packages/angular/cli/src/commands/config/cli.ts index caa3c2504030..06b253b9a42d 100644 --- a/packages/angular/cli/src/commands/config/cli.ts +++ b/packages/angular/cli/src/commands/config/cli.ts @@ -7,8 +7,8 @@ */ import { JsonValue } from '@angular-devkit/core'; -import { randomUUID } from 'crypto'; -import { join } from 'path'; +import { randomUUID } from 'node:crypto'; +import { join } from 'node:path'; import { Argv } from 'yargs'; import { CommandModule, diff --git a/packages/angular/cli/src/commands/lint/cli.ts b/packages/angular/cli/src/commands/lint/cli.ts index 7790433a746b..9510dd7afe53 100644 --- a/packages/angular/cli/src/commands/lint/cli.ts +++ b/packages/angular/cli/src/commands/lint/cli.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { join } from 'path'; +import { join } from 'node:path'; import { MissingTargetChoice } from '../../command-builder/architect-base-command-module'; import { ArchitectCommandModule } from '../../command-builder/architect-command-module'; import { CommandModuleImplementation } from '../../command-builder/command-module'; diff --git a/packages/angular/cli/src/commands/run/cli.ts b/packages/angular/cli/src/commands/run/cli.ts index bd65dac53fc3..aa12cd0158f7 100644 --- a/packages/angular/cli/src/commands/run/cli.ts +++ b/packages/angular/cli/src/commands/run/cli.ts @@ -7,7 +7,7 @@ */ import { Target } from '@angular-devkit/architect'; -import { join } from 'path'; +import { join } from 'node:path'; import { Argv } from 'yargs'; import { ArchitectBaseCommandModule } from '../../command-builder/architect-base-command-module'; import { diff --git a/packages/angular/cli/src/commands/test/cli.ts b/packages/angular/cli/src/commands/test/cli.ts index fde58fda5d6e..600e9f41f517 100644 --- a/packages/angular/cli/src/commands/test/cli.ts +++ b/packages/angular/cli/src/commands/test/cli.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { join } from 'path'; +import { join } from 'node:path'; import { ArchitectCommandModule } from '../../command-builder/architect-command-module'; import { CommandModuleImplementation } from '../../command-builder/command-module'; import { RootCommands } from '../command-config'; diff --git a/packages/angular/cli/src/commands/update/cli.ts b/packages/angular/cli/src/commands/update/cli.ts index 7ffc7d6c212a..e3b869badff5 100644 --- a/packages/angular/cli/src/commands/update/cli.ts +++ b/packages/angular/cli/src/commands/update/cli.ts @@ -16,10 +16,10 @@ import { Listr } from 'listr2'; import { SpawnSyncReturns, execSync, spawnSync } from 'node:child_process'; import { existsSync, promises as fs } from 'node:fs'; import { createRequire } from 'node:module'; +import * as path from 'node:path'; +import { join, resolve } from 'node:path'; import npa from 'npm-package-arg'; import pickManifest from 'npm-pick-manifest'; -import * as path from 'path'; -import { join, resolve } from 'path'; import * as semver from 'semver'; import { Argv } from 'yargs'; import { PackageManager } from '../../../lib/config/workspace-schema'; diff --git a/packages/angular/cli/src/commands/update/schematic/index.ts b/packages/angular/cli/src/commands/update/schematic/index.ts index 9b56ec01d363..26d2d06836b4 100644 --- a/packages/angular/cli/src/commands/update/schematic/index.ts +++ b/packages/angular/cli/src/commands/update/schematic/index.ts @@ -471,19 +471,24 @@ function _usageMessage( ) .map(({ name, info, version, tag, target }) => { // Look for packageGroup. - const packageGroup = target['ng-update']?.['packageGroup']; + const ngUpdate = target['ng-update']; + const packageGroup = ngUpdate?.['packageGroup']; if (packageGroup) { const packageGroupNames = Array.isArray(packageGroup) ? packageGroup : Object.keys(packageGroup); + const packageGroupName = + ngUpdate?.['packageGroupName'] || packageGroupNames.find((n) => infoMap.has(n)); - const packageGroupName = target['ng-update']?.['packageGroupName'] || packageGroupNames[0]; if (packageGroupName) { if (packageGroups.has(name)) { return null; } - packageGroupNames.forEach((x: string) => packageGroups.set(x, packageGroupName)); + for (const groupName of packageGroupNames) { + packageGroups.set(groupName, packageGroupName); + } + packageGroups.set(packageGroupName, packageGroupName); name = packageGroupName; } diff --git a/packages/angular/cli/src/utilities/completion.ts b/packages/angular/cli/src/utilities/completion.ts index 07483065caed..011968b1a660 100644 --- a/packages/angular/cli/src/utilities/completion.ts +++ b/packages/angular/cli/src/utilities/completion.ts @@ -7,10 +7,10 @@ */ import { json, logging } from '@angular-devkit/core'; -import { execFile } from 'child_process'; -import { promises as fs } from 'fs'; -import * as path from 'path'; -import { env } from 'process'; +import { execFile } from 'node:child_process'; +import { promises as fs } from 'node:fs'; +import * as path from 'node:path'; +import { env } from 'node:process'; import { colors } from '../utilities/color'; import { getWorkspace } from '../utilities/config'; import { forceAutocomplete } from '../utilities/environment-options'; diff --git a/packages/angular/cli/src/utilities/config.ts b/packages/angular/cli/src/utilities/config.ts index af370a164a35..caa1e2a593f2 100644 --- a/packages/angular/cli/src/utilities/config.ts +++ b/packages/angular/cli/src/utilities/config.ts @@ -7,9 +7,9 @@ */ import { json, workspaces } from '@angular-devkit/core'; -import { existsSync, promises as fs } from 'fs'; -import * as os from 'os'; -import * as path from 'path'; +import { existsSync, promises as fs } from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; import { PackageManager } from '../../lib/config/workspace-schema'; import { findUp } from './find-up'; import { JSONFile, readAndParseJson } from './json-file'; diff --git a/packages/angular/cli/src/utilities/error.ts b/packages/angular/cli/src/utilities/error.ts index c00e13e79726..0ca77c331d2d 100644 --- a/packages/angular/cli/src/utilities/error.ts +++ b/packages/angular/cli/src/utilities/error.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import assert from 'assert'; +import assert from 'node:assert'; export function assertIsError(value: unknown): asserts value is Error & { code?: string } { const isError = diff --git a/packages/angular/cli/src/utilities/find-up.ts b/packages/angular/cli/src/utilities/find-up.ts index ed0adb0f78bb..317c8d8497f5 100644 --- a/packages/angular/cli/src/utilities/find-up.ts +++ b/packages/angular/cli/src/utilities/find-up.ts @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ -import { existsSync } from 'fs'; -import * as path from 'path'; +import { existsSync } from 'node:fs'; +import * as path from 'node:path'; export function findUp(names: string | string[], from: string) { if (!Array.isArray(names)) { diff --git a/packages/angular/cli/src/utilities/json-file.ts b/packages/angular/cli/src/utilities/json-file.ts index f960462c4ecf..c0f5fab919e2 100644 --- a/packages/angular/cli/src/utilities/json-file.ts +++ b/packages/angular/cli/src/utilities/json-file.ts @@ -7,7 +7,6 @@ */ import { JsonValue } from '@angular-devkit/core'; -import { readFileSync, writeFileSync } from 'fs'; import { Node, ParseError, @@ -19,6 +18,7 @@ import { parseTree, printParseErrorCode, } from 'jsonc-parser'; +import { readFileSync, writeFileSync } from 'node:fs'; import { getEOL } from './eol'; export type InsertionIndex = (properties: string[]) => number; diff --git a/packages/angular/cli/src/utilities/log-file.ts b/packages/angular/cli/src/utilities/log-file.ts index dbccaaf24879..1731ca95d4e7 100644 --- a/packages/angular/cli/src/utilities/log-file.ts +++ b/packages/angular/cli/src/utilities/log-file.ts @@ -6,9 +6,9 @@ * found in the LICENSE file at https://angular.dev/license */ -import { appendFileSync, mkdtempSync, realpathSync } from 'fs'; -import { tmpdir } from 'os'; -import { normalize } from 'path'; +import { appendFileSync, mkdtempSync, realpathSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { normalize } from 'node:path'; let logPath: string | undefined; diff --git a/packages/angular/cli/src/utilities/package-manager.ts b/packages/angular/cli/src/utilities/package-manager.ts index 28273c698013..1e249a4f13fa 100644 --- a/packages/angular/cli/src/utilities/package-manager.ts +++ b/packages/angular/cli/src/utilities/package-manager.ts @@ -7,10 +7,10 @@ */ import { isJsonObject, json } from '@angular-devkit/core'; -import { execSync, spawn } from 'child_process'; -import { existsSync, promises as fs, realpathSync, rmSync } from 'fs'; -import { tmpdir } from 'os'; -import { join } from 'path'; +import { execSync, spawn } from 'node:child_process'; +import { existsSync, promises as fs, realpathSync, rmSync } from 'node:fs'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; import { PackageManager } from '../../lib/config/workspace-schema'; import { AngularWorkspace, getProjectByCwd } from './config'; import { memoize } from './memoize'; diff --git a/packages/angular/cli/src/utilities/package-metadata.ts b/packages/angular/cli/src/utilities/package-metadata.ts index b10292f93e78..7aa0cb71c8ce 100644 --- a/packages/angular/cli/src/utilities/package-metadata.ts +++ b/packages/angular/cli/src/utilities/package-metadata.ts @@ -8,11 +8,11 @@ import { logging } from '@angular-devkit/core'; import * as lockfile from '@yarnpkg/lockfile'; -import { existsSync, readFileSync } from 'fs'; import * as ini from 'ini'; -import { homedir } from 'os'; +import { existsSync, readFileSync } from 'node:fs'; +import { homedir } from 'node:os'; +import * as path from 'node:path'; import type { Manifest, Packument } from 'pacote'; -import * as path from 'path'; export interface PackageMetadata extends Packument, NgPackageManifestProperties { tags: Record<string, PackageManifest>; diff --git a/packages/angular/cli/src/utilities/package-tree.ts b/packages/angular/cli/src/utilities/package-tree.ts index 923f1c732b4d..14e8a9edd689 100644 --- a/packages/angular/cli/src/utilities/package-tree.ts +++ b/packages/angular/cli/src/utilities/package-tree.ts @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ -import * as fs from 'fs'; -import { dirname, join } from 'path'; +import * as fs from 'node:fs'; +import { dirname, join } from 'node:path'; import * as resolve from 'resolve'; import { NgAddSaveDependency } from './package-metadata'; diff --git a/packages/angular/cli/src/utilities/project.ts b/packages/angular/cli/src/utilities/project.ts index b1c9cb14d458..39ce2e6d3e83 100644 --- a/packages/angular/cli/src/utilities/project.ts +++ b/packages/angular/cli/src/utilities/project.ts @@ -7,9 +7,9 @@ */ import { normalize } from '@angular-devkit/core'; -import * as fs from 'fs'; -import * as os from 'os'; -import * as path from 'path'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; import { findUp } from './find-up'; interface PackageDependencies { diff --git a/packages/angular/cli/src/utilities/version.ts b/packages/angular/cli/src/utilities/version.ts index 71a6f4c70cee..d16feb2d4b15 100644 --- a/packages/angular/cli/src/utilities/version.ts +++ b/packages/angular/cli/src/utilities/version.ts @@ -6,16 +6,13 @@ * found in the LICENSE file at https://angular.dev/license */ -import { readFileSync } from 'fs'; -import { resolve } from 'path'; - // Same structure as used in framework packages class Version { - public readonly major: string; - public readonly minor: string; - public readonly patch: string; + readonly major: string; + readonly minor: string; + readonly patch: string; - constructor(public readonly full: string) { + constructor(readonly full: string) { const [major, minor, patch] = full.split('-', 1)[0].split('.', 3); this.major = major; this.minor = minor; @@ -23,12 +20,4 @@ class Version { } } -// TODO(bazel): Convert this to use build-time version stamping after flipping the build script to use bazel -// export const VERSION = new Version('0.0.0-PLACEHOLDER'); -export const VERSION = new Version( - ( - JSON.parse(readFileSync(resolve(__dirname, '../../package.json'), 'utf-8')) as { - version: string; - } - ).version, -); +export const VERSION = new Version('0.0.0-PLACEHOLDER'); diff --git a/packages/angular/create/BUILD.bazel b/packages/angular/create/BUILD.bazel index 6c8979aaf7ea..fe815b0b75dc 100644 --- a/packages/angular/create/BUILD.bazel +++ b/packages/angular/create/BUILD.bazel @@ -3,17 +3,28 @@ # Use of this source code is governed by an MIT-style license that can be # found in the LICENSE file at https://angular.dev/license -load("//tools:defaults.bzl", "pkg_npm") -load("//tools:interop.bzl", "ts_project") +load("//tools:defaults2.bzl", "npm_package", "ts_project") licenses(["notice"]) +RUNTIME_ASSETS = glob( + include = [ + "src/*.js", + "src/*.mjs", + ], +) + [ + "package.json", +] + ts_project( name = "create", - srcs = ["src/index.ts"], + srcs = glob([ + "src/*.ts", + ]), + data = RUNTIME_ASSETS, module_name = "@angular/create", deps = [ - "//:root_modules/@types/node", + "//:node_modules/@types/node", "//packages/angular/cli:angular-cli", ], ) @@ -25,14 +36,14 @@ genrule( cmd = "cp $(execpath //:LICENSE) $@", ) -pkg_npm( - name = "npm_package", +npm_package( + name = "pkg", pkg_deps = [ "//packages/angular/cli:package.json", ], tags = ["release-package"], visibility = ["//visibility:public"], - deps = [ + deps = RUNTIME_ASSETS + [ ":README.md", ":create", ":license", diff --git a/packages/angular/create/src/index.ts b/packages/angular/create/src/index.ts index 15e521ed964d..47343ae9014d 100644 --- a/packages/angular/create/src/index.ts +++ b/packages/angular/create/src/index.ts @@ -7,8 +7,8 @@ * found in the LICENSE file at https://angular.dev/license */ -import { spawnSync } from 'child_process'; -import { join } from 'path'; +import { spawnSync } from 'node:child_process'; +import { join } from 'node:path'; const binPath = join(require.resolve('@angular/cli/package.json'), '../bin/ng.js'); const args = process.argv.slice(2); diff --git a/packages/angular/pwa/BUILD.bazel b/packages/angular/pwa/BUILD.bazel index 7c3a21974eb1..a11eb2f3a60a 100644 --- a/packages/angular/pwa/BUILD.bazel +++ b/packages/angular/pwa/BUILD.bazel @@ -3,37 +3,41 @@ # Use of this source code is governed by an MIT-style license that can be # found in the LICENSE file at https://angular.dev/license -load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") -load("//tools:defaults.bzl", "pkg_npm") -load("//tools:interop.bzl", "ts_project") +load("@npm2//:defs.bzl", "npm_link_all_packages") +load("//tools:defaults2.bzl", "jasmine_test", "npm_package", "ts_project") load("//tools:ts_json_schema.bzl", "ts_json_schema") licenses(["notice"]) package(default_visibility = ["//visibility:public"]) +npm_link_all_packages() + +RUNTIME_ASSETS = glob( + include = [ + "pwa/*.js", + "pwa/*.mjs", + "pwa/files/**/*", + ], +) + [ + "package.json", + "collection.json", + "pwa/schema.json", +] + ts_project( name = "pwa", srcs = [ "pwa/index.ts", "//packages/angular/pwa:pwa/schema.ts", ], - data = [ - "collection.json", - "pwa/schema.json", - ] + glob( - include = [ - "pwa/files/**/*", - ], - ), - interop_deps = [ - "//packages/angular_devkit/schematics", - ], + data = RUNTIME_ASSETS, module_name = "@angular/pwa", deps = [ - "//:root_modules/@types/node", - "//:root_modules/parse5-html-rewriting-stream", - "//packages/schematics/angular:angular_rjs", + ":node_modules/@angular-devkit/schematics", + ":node_modules/@schematics/angular", + "//:node_modules/@types/node", + "//:node_modules/parse5-html-rewriting-stream", ], ) @@ -46,18 +50,19 @@ ts_project( name = "pwa_test_lib", testonly = True, srcs = glob(["pwa/**/*_spec.ts"]), - interop_deps = [ - "//packages/angular_devkit/schematics/testing", - ], + # TODO: Fix strict_deps failure + ignore_strict_deps = True, deps = [ - ":pwa_rjs", - "//:root_modules/@types/jasmine", + ":pwa", + "//:node_modules/@types/jasmine", + "//:node_modules/@types/node", + "//packages/angular_devkit/schematics/testing:testing", ], ) -jasmine_node_test( +jasmine_test( name = "pwa_test", - srcs = [":pwa_test_lib"], + data = [":pwa_test_lib"], ) genrule( @@ -67,14 +72,14 @@ genrule( cmd = "cp $(execpath //:LICENSE) $@", ) -pkg_npm( - name = "npm_package", +npm_package( + name = "pkg", pkg_deps = [ "//packages/angular_devkit/schematics:package.json", "//packages/schematics/angular:package.json", ], tags = ["release-package"], - deps = [ + deps = RUNTIME_ASSETS + [ ":README.md", ":license", ":pwa", diff --git a/packages/angular/pwa/package.json b/packages/angular/pwa/package.json index aac4c5ddbd9a..070e1c5775b2 100644 --- a/packages/angular/pwa/package.json +++ b/packages/angular/pwa/package.json @@ -12,12 +12,12 @@ "save": false }, "dependencies": { - "@angular-devkit/schematics": "0.0.0-PLACEHOLDER", - "@schematics/angular": "0.0.0-PLACEHOLDER", + "@angular-devkit/schematics": "workspace:0.0.0-PLACEHOLDER", + "@schematics/angular": "workspace:0.0.0-PLACEHOLDER", "parse5-html-rewriting-stream": "7.0.0" }, "peerDependencies": { - "@angular/cli": "^19.0.0 || ^19.1.0-next.0" + "@angular/cli": "workspace:^0.0.0-PLACEHOLDER" }, "peerDependenciesMeta": { "@angular/cli": { diff --git a/packages/angular/pwa/pwa/index.ts b/packages/angular/pwa/pwa/index.ts index 550e359e47f8..28b0bc864522 100644 --- a/packages/angular/pwa/pwa/index.ts +++ b/packages/angular/pwa/pwa/index.ts @@ -19,9 +19,9 @@ import { url, } from '@angular-devkit/schematics'; import { readWorkspace, writeWorkspace } from '@schematics/angular/utility'; -import { posix } from 'path'; -import { Readable } from 'stream'; -import { pipeline } from 'stream/promises'; +import { posix } from 'node:path'; +import { Readable } from 'node:stream'; +import { pipeline } from 'node:stream/promises'; import { Schema as PwaOptions } from './schema'; function updateIndexFile(path: string): Rule { @@ -96,10 +96,14 @@ export default function (options: PwaOptions): Rule { for (const target of project.targets.values()) { if ( target.builder === '@angular-devkit/build-angular:browser' || - target.builder === '@angular-devkit/build-angular:application' + target.builder === '@angular-devkit/build-angular:application' || + target.builder === '@angular/build:application' ) { buildTargets.push(target); - } else if (target.builder === '@angular-devkit/build-angular:karma') { + } else if ( + target.builder === '@angular-devkit/build-angular:karma' || + target.builder === '@angular/build:karma' + ) { testTargets.push(target); } } diff --git a/packages/angular/pwa/pwa/index_spec.ts b/packages/angular/pwa/pwa/index_spec.ts index 3e0216b8cb2b..37677894b446 100644 --- a/packages/angular/pwa/pwa/index_spec.ts +++ b/packages/angular/pwa/pwa/index_spec.ts @@ -7,7 +7,7 @@ */ import { SchematicTestRunner, UnitTestTree } from '@angular-devkit/schematics/testing'; -import * as path from 'path'; +import * as path from 'node:path'; import { Schema as PwaOptions } from './schema'; describe('PWA Schematic', () => { @@ -169,4 +169,44 @@ describe('PWA Schematic', () => { expect(swFlag).toBeTrue(); }); }); + + describe('@angular-devkit/build-angular:application builder', () => { + beforeEach(() => { + const config = JSON.parse(appTree.readContent('/angular.json')); + const build = config.projects.bar.architect.build; + + build.builder = '@angular-devkit/build-angular:application'; + + appTree.overwrite('/angular.json', JSON.stringify(config, undefined, 2)); + }); + + it('should run the service worker schematic', async () => { + const tree = await schematicRunner.runSchematic('ng-add', defaultOptions, appTree); + const configText = tree.readContent('/angular.json'); + const config = JSON.parse(configText); + const swFlag = config.projects.bar.architect.build.configurations.production.serviceWorker; + + expect(swFlag).toBe('projects/bar/ngsw-config.json'); + }); + }); + + describe('@angular/build:application builder', () => { + beforeEach(() => { + const config = JSON.parse(appTree.readContent('/angular.json')); + const build = config.projects.bar.architect.build; + + build.builder = '@angular/build:application'; + + appTree.overwrite('/angular.json', JSON.stringify(config, undefined, 2)); + }); + + it('should run the service worker schematic', async () => { + const tree = await schematicRunner.runSchematic('ng-add', defaultOptions, appTree); + const configText = tree.readContent('/angular.json'); + const config = JSON.parse(configText); + const swFlag = config.projects.bar.architect.build.configurations.production.serviceWorker; + + expect(swFlag).toBe('projects/bar/ngsw-config.json'); + }); + }); }); diff --git a/packages/angular/pwa/pwa/schema.json b/packages/angular/pwa/pwa/schema.json index ff41cebe8335..0fa36696cd5e 100644 --- a/packages/angular/pwa/pwa/schema.json +++ b/packages/angular/pwa/pwa/schema.json @@ -3,22 +3,23 @@ "$id": "SchematicsAngularPWA", "title": "Angular PWA Options Schema", "type": "object", + "description": "Transforms your Angular application into a Progressive Web App (PWA). PWAs provide a native app-like experience, allowing users to install your app on their devices and access it offline. This schematic configures your project for PWA functionality, adding a service worker, a web app manifest, and other necessary features.", "properties": { "project": { "type": "string", - "description": "The name of the project.", + "description": "The name of the project to transform into a PWA. If not specified, the CLI will determine the project from the current directory.", "$default": { "$source": "projectName" } }, "target": { "type": "string", - "description": "The target to apply service worker to.", + "description": "The build target to apply the service worker to. This is typically `build`, indicating that the service worker should be generated during the standard build process.", "default": "build" }, "title": { "type": "string", - "description": "The title of the application." + "description": "The title of the application. This will be used in the web app manifest, which is a JSON file that provides metadata about your PWA (e.g., name, icons, display options)." } }, "required": [] diff --git a/packages/angular/ssr/BUILD.bazel b/packages/angular/ssr/BUILD.bazel index 219efba32c96..fbe46237d063 100644 --- a/packages/angular/ssr/BUILD.bazel +++ b/packages/angular/ssr/BUILD.bazel @@ -1,10 +1,13 @@ -load("@npm//@angular/build-tooling/bazel/api-golden:index.bzl", "api_golden_test_npm_package") +load("@aspect_rules_js//npm:defs.bzl", "npm_package") +load("@devinfra//bazel/api-golden:index_rjs.bzl", "api_golden_test_npm_package") +load("@npm2//:defs.bzl", "npm_link_all_packages") load("@rules_pkg//:pkg.bzl", "pkg_tar") -load("//tools:defaults.bzl", "ng_package") -load("//tools:interop.bzl", "ts_project") +load("//tools:defaults2.bzl", "ng_package", "ts_project") package(default_visibility = ["//visibility:public"]) +npm_link_all_packages() + ts_project( name = "ssr", srcs = glob( @@ -25,19 +28,19 @@ ts_project( ], module_name = "@angular/ssr", source_map = True, - tsconfig = "//:build-tsconfig-angular", + tsconfig = "//:build-tsconfig-esm", deps = [ - "//:root_modules/@angular/common", - "//:root_modules/@angular/core", - "//:root_modules/@angular/platform-server", - "//:root_modules/@angular/router", - "//:root_modules/tslib", + "//:node_modules/@angular/common", + "//:node_modules/@angular/core", + "//:node_modules/@angular/platform-server", + "//:node_modules/@angular/router", + "//:node_modules/tslib", "//packages/angular/ssr/third_party/beasties:beasties_dts", ], ) ng_package( - name = "npm_package", + name = "angular_package", package_name = "@angular/ssr", srcs = [ ":package.json", @@ -49,12 +52,11 @@ ng_package( "../../third_party/beasties", ], nested_packages = [ - "//packages/angular/ssr/schematics:npm_package", + "//packages/angular/ssr/schematics:pkg", ], - tags = ["release-package"], deps = [ - ":ssr", - "//packages/angular/ssr/node", + ":ssr_legacy", + "//packages/angular/ssr/node:node_legacy", ], ) @@ -67,12 +69,27 @@ pkg_tar( tags = ["manual"], ) +# TODO: Replace when `ng_package` creates a valid `rules_js`-compliant npm package. +npm_package( + name = "npm_package", + srcs = [":angular_package"], + replace_prefixes = { + "angular_package/": "", + }, + tags = ["release-package"], +) + +alias( + name = "pkg", + actual = ":npm_package", +) + api_golden_test_npm_package( name = "ssr_api", data = [ ":npm_package", "//goldens:public-api", ], - golden_dir = "angular_cli/goldens/public-api/angular/ssr", - npm_package = "angular_cli/packages/angular/ssr/npm_package", + golden_dir = "goldens/public-api/angular/ssr", + npm_package = "packages/angular/ssr/npm_package", ) diff --git a/packages/angular/ssr/node/BUILD.bazel b/packages/angular/ssr/node/BUILD.bazel index 6623c0b78530..92220e7a00c3 100644 --- a/packages/angular/ssr/node/BUILD.bazel +++ b/packages/angular/ssr/node/BUILD.bazel @@ -14,13 +14,15 @@ ts_project( "--types", "node", ], + # TODO: Fix strict_deps failure + ignore_strict_deps = True, module_name = "@angular/ssr/node", source_map = True, - tsconfig = "//:build-tsconfig-angular", + tsconfig = "//:build-tsconfig-esm", deps = [ - "//:root_modules/@angular/core", - "//:root_modules/@angular/platform-server", - "//:root_modules/@types/node", - "//packages/angular/ssr:ssr_rjs", + "//:node_modules/@angular/core", + "//:node_modules/@angular/platform-server", + "//:node_modules/@types/node", + "//packages/angular/ssr", ], ) diff --git a/packages/angular/ssr/node/src/response.ts b/packages/angular/ssr/node/src/response.ts index c3f397a83bb4..32fec13e0ea8 100644 --- a/packages/angular/ssr/node/src/response.ts +++ b/packages/angular/ssr/node/src/response.ts @@ -71,7 +71,12 @@ export async function writeResponseToNodeResponse( break; } - (destination as ServerResponse).write(value); + const canContinue = (destination as ServerResponse).write(value); + if (canContinue === false) { + // Explicitly check for `false`, as AWS may return `undefined` even though this is not valid. + // See: https://github.com/CodeGenieApp/serverless-express/issues/683 + await new Promise<void>((resolve) => destination.once('drain', resolve)); + } } } catch { destination.end('Internal server error.'); diff --git a/packages/angular/ssr/node/test/BUILD.bazel b/packages/angular/ssr/node/test/BUILD.bazel index 2154a5f22127..9e5448549fe9 100644 --- a/packages/angular/ssr/node/test/BUILD.bazel +++ b/packages/angular/ssr/node/test/BUILD.bazel @@ -1,30 +1,27 @@ -load("@npm//@angular/build-tooling/bazel/spec-bundling:index.bzl", "spec_bundle") -load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") -load("//tools:interop.bzl", "ts_project") +load("@devinfra//bazel/spec-bundling:index_rjs.bzl", "spec_bundle") +load("//tools:defaults2.bzl", "jasmine_test", "ts_project") ts_project( name = "unit_test_lib", testonly = True, srcs = glob(["**/*_spec.ts"]), deps = [ - "//packages/angular/ssr/node:node_rjs", + "//:node_modules/@types/node", + "//packages/angular/ssr/node", ], ) # TODO: Clean this up when this repo runs ESM consistently. spec_bundle( name = "esm_tests_bundled", - downlevel_async_await = False, - platform = "node", - run_angular_linker = False, deps = [ ":unit_test_lib", ], ) -jasmine_node_test( +jasmine_test( name = "test", - deps = [ + data = [ ":esm_tests_bundled", ], ) diff --git a/packages/angular/ssr/package.json b/packages/angular/ssr/package.json index 158dfc453a38..34c342a58167 100644 --- a/packages/angular/ssr/package.json +++ b/packages/angular/ssr/package.json @@ -2,6 +2,7 @@ "name": "@angular/ssr", "version": "0.0.0-PLACEHOLDER", "description": "Angular server side rendering utilities", + "type": "module", "license": "MIT", "homepage": "https://github.com/angular/angular-cli", "keywords": [ @@ -16,10 +17,10 @@ "tslib": "^2.3.0" }, "peerDependencies": { - "@angular/common": "^19.0.0 || ^19.1.0-next.0", - "@angular/core": "^19.0.0 || ^19.1.0-next.0", - "@angular/platform-server": "^19.0.0 || ^19.1.0-next.0", - "@angular/router": "^19.0.0 || ^19.1.0-next.0" + "@angular/common": "0.0.0-ANGULAR-FW-PEER-DEP", + "@angular/core": "0.0.0-ANGULAR-FW-PEER-DEP", + "@angular/platform-server": "0.0.0-ANGULAR-FW-PEER-DEP", + "@angular/router": "0.0.0-ANGULAR-FW-PEER-DEP" }, "peerDependenciesMeta": { "@angular/platform-server": { @@ -27,13 +28,14 @@ } }, "devDependencies": { - "@angular/common": "19.1.0-rc.0", - "@angular/compiler": "19.1.0-rc.0", - "@angular/core": "19.1.0-rc.0", - "@angular/platform-browser": "19.1.0-rc.0", - "@angular/platform-server": "19.1.0-rc.0", - "@angular/router": "19.1.0-rc.0", - "@bazel/runfiles": "^5.8.1" + "@angular-devkit/schematics": "workspace:*", + "@angular/common": "19.2.0-rc.0", + "@angular/compiler": "19.2.0-rc.0", + "@angular/core": "19.2.0-rc.0", + "@angular/platform-browser": "19.2.0-rc.0", + "@angular/platform-server": "19.2.0-rc.0", + "@angular/router": "19.2.0-rc.0", + "@schematics/angular": "workspace:*" }, "sideEffects": false, "schematics": "./schematics/collection.json", diff --git a/packages/angular/ssr/public_api.ts b/packages/angular/ssr/public_api.ts index 8f62f438ea90..5b14de8e346c 100644 --- a/packages/angular/ssr/public_api.ts +++ b/packages/angular/ssr/public_api.ts @@ -16,6 +16,8 @@ export { type ServerRoute, type ServerRoutesConfigOptions, provideServerRoutesConfig, + provideServerRouting, + withAppShell, RenderMode, type ServerRouteClient, type ServerRoutePrerender, diff --git a/packages/angular/ssr/schematics/BUILD.bazel b/packages/angular/ssr/schematics/BUILD.bazel index 4d65b563351f..67164e942e43 100644 --- a/packages/angular/ssr/schematics/BUILD.bazel +++ b/packages/angular/ssr/schematics/BUILD.bazel @@ -3,9 +3,8 @@ # Use of this source code is governed by an MIT-style license that can be # found in the LICENSE file at https://angular.dev/license -load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") -load("//tools:defaults.bzl", "pkg_npm") -load("//tools:interop.bzl", "ts_project") +load("@aspect_rules_js//npm:defs.bzl", "npm_package") +load("//tools:defaults2.bzl", "jasmine_test", "ts_project") load("//tools:ts_json_schema.bzl", "ts_json_schema") licenses(["notice"]) @@ -58,11 +57,10 @@ ts_project( "//packages/angular/ssr/schematics:" + src.replace(".json", ".ts") for (src, _) in ALL_SCHEMA_TARGETS ], - data = [":schematics_assets"], module_name = "@angular/ssr/schematics", deps = [ - "//packages/angular_devkit/schematics:schematics_rjs", - "//packages/schematics/angular:angular_rjs", + "//packages/angular/ssr:node_modules/@angular-devkit/schematics", + "//packages/angular/ssr:node_modules/@schematics/angular", ], ) @@ -79,27 +77,27 @@ ts_project( ], ), deps = [ - ":schematics_rjs", - "//packages/angular_devkit/schematics/testing:testing_rjs", + ":schematics", + "//:node_modules/@types/node", + "//packages/angular/ssr:node_modules/@angular-devkit/schematics", ], ) -jasmine_node_test( +jasmine_test( name = "ssr_schematics_test", - srcs = [":ssr_schematics_test_lib"], - deps = [ - "@npm//jasmine", - "@npm//source-map", - "@npm//typescript", + data = [ + ":schematics_assets", + ":ssr_schematics_test_lib", ], ) # This package is intended to be combined into the main @angular/ssr package as a dep. -pkg_npm( - name = "npm_package", - pkg_json = None, - visibility = ["//packages/angular/ssr:__pkg__"], - deps = [ +npm_package( + name = "pkg", + srcs = [ + "package.json", ":schematics", + ":schematics_assets", ], + visibility = ["//packages/angular/ssr:__pkg__"], ) diff --git a/packages/angular/ssr/schematics/ng-add/schema.json b/packages/angular/ssr/schematics/ng-add/schema.json index 7ae66a1165e8..f82d7373620b 100644 --- a/packages/angular/ssr/schematics/ng-add/schema.json +++ b/packages/angular/ssr/schematics/ng-add/schema.json @@ -3,21 +3,22 @@ "$id": "SchematicsAngularNgAddSSR", "title": "Angular SSR Options Schema", "type": "object", + "description": "Adds Server-Side Rendering (SSR) capabilities to an existing Angular application. SSR allows your app to be rendered on the server, leading to faster initial load times and improved SEO. This schematic modifies your project to enable SSR, sets up the necessary configurations, and installs the required dependencies.", "properties": { "project": { "type": "string", - "description": "The name of the project.", + "description": "The name of the project you want to enable SSR for. If not specified, the CLI will determine the project from the current directory.", "$default": { "$source": "projectName" } }, "skipInstall": { - "description": "Skip installing dependency packages.", + "description": "Skip the automatic installation of packages. You will need to manually install the dependencies later.", "type": "boolean", "default": false }, "serverRouting": { - "description": "Creates a server application using the Server Routing and App Engine APIs (Developer Preview).", + "description": "Configure the server application to use the Angular Server Routing API and App Engine APIs (currently in Developer Preview).", "type": "boolean" } }, diff --git a/packages/angular/ssr/src/app-engine.ts b/packages/angular/ssr/src/app-engine.ts index d8df64fa4bbd..c1e2e7fcd5a4 100644 --- a/packages/angular/ssr/src/app-engine.ts +++ b/packages/angular/ssr/src/app-engine.ts @@ -97,8 +97,8 @@ export class AngularAppEngine { const { basePath, supportedLocales } = this.manifest; // If the request is not for the base path, it's not our responsibility to handle it. - const url = new URL(request.url); - if (url.pathname !== basePath) { + const { pathname } = new URL(request.url); + if (pathname !== basePath) { return null; } @@ -112,12 +112,10 @@ export class AngularAppEngine { if (preferredLocale) { const subPath = supportedLocales[preferredLocale]; if (subPath !== undefined) { - url.pathname = joinUrlParts(url.pathname, subPath); - return new Response(null, { status: 302, // Use a 302 redirect as language preference may change. headers: { - 'Location': url.toString(), + 'Location': joinUrlParts(pathname, subPath), 'Vary': 'Accept-Language', }, }); diff --git a/packages/angular/ssr/src/routes/ng-routes.ts b/packages/angular/ssr/src/routes/ng-routes.ts index 137a14604b18..41e4f62f84f0 100644 --- a/packages/angular/ssr/src/routes/ng-routes.ts +++ b/packages/angular/ssr/src/routes/ng-routes.ts @@ -110,6 +110,108 @@ interface AngularRouterConfigResult { type EntryPointToBrowserMapping = AngularAppManifest['entryPointToBrowserMapping']; +/** + * Handles a single route within the route tree and yields metadata or errors. + * + * @param options - Configuration options for handling the route. + * @returns An async iterable iterator yielding `RouteTreeNodeMetadata` or an error object. + */ +async function* handleRoute(options: { + metadata: ServerConfigRouteTreeNodeMetadata; + currentRoutePath: string; + route: Route; + compiler: Compiler; + parentInjector: Injector; + serverConfigRouteTree?: RouteTree<ServerConfigRouteTreeAdditionalMetadata>; + invokeGetPrerenderParams: boolean; + includePrerenderFallbackRoutes: boolean; + entryPointToBrowserMapping?: EntryPointToBrowserMapping; +}): AsyncIterableIterator<RouteTreeNodeMetadata | { error: string }> { + try { + const { + metadata, + currentRoutePath, + route, + compiler, + parentInjector, + serverConfigRouteTree, + entryPointToBrowserMapping, + invokeGetPrerenderParams, + includePrerenderFallbackRoutes, + } = options; + + const { redirectTo, loadChildren, loadComponent, children, ɵentryName } = route; + if (ɵentryName && loadComponent) { + appendPreloadToMetadata(ɵentryName, entryPointToBrowserMapping, metadata, true); + } + + if (metadata.renderMode === RenderMode.Prerender) { + yield* handleSSGRoute( + serverConfigRouteTree, + typeof redirectTo === 'string' ? redirectTo : undefined, + metadata, + parentInjector, + invokeGetPrerenderParams, + includePrerenderFallbackRoutes, + ); + } else if (typeof redirectTo === 'string') { + if (metadata.status && !VALID_REDIRECT_RESPONSE_CODES.has(metadata.status)) { + yield { + error: + `The '${metadata.status}' status code is not a valid redirect response code. ` + + `Please use one of the following redirect response codes: ${[...VALID_REDIRECT_RESPONSE_CODES.values()].join(', ')}.`, + }; + } else { + yield { ...metadata, redirectTo: resolveRedirectTo(metadata.route, redirectTo) }; + } + } else { + yield metadata; + } + + // Recursively process child routes + if (children?.length) { + yield* traverseRoutesConfig({ + ...options, + routes: children, + parentRoute: currentRoutePath, + parentPreloads: metadata.preload, + }); + } + + // Load and process lazy-loaded child routes + if (loadChildren) { + if (ɵentryName) { + // When using `loadChildren`, the entire feature area (including multiple routes) is loaded. + // As a result, we do not want all dynamic-import dependencies to be preload, because it involves multiple dependencies + // across different child routes. In contrast, `loadComponent` only loads a single component, which allows + // for precise control over preloading, ensuring that the files preloaded are exactly those required for that specific route. + appendPreloadToMetadata(ɵentryName, entryPointToBrowserMapping, metadata, false); + } + + const loadedChildRoutes = await loadChildrenHelper( + route, + compiler, + parentInjector, + ).toPromise(); + + if (loadedChildRoutes) { + const { routes: childRoutes, injector = parentInjector } = loadedChildRoutes; + yield* traverseRoutesConfig({ + ...options, + routes: childRoutes, + parentInjector: injector, + parentRoute: currentRoutePath, + parentPreloads: metadata.preload, + }); + } + } + } catch (error) { + yield { + error: `Error in handleRoute for '${options.currentRoutePath}': ${(error as Error).message}`, + }; + } +} + /** * Traverses an array of route configurations to generate route tree node metadata. * @@ -124,145 +226,91 @@ async function* traverseRoutesConfig(options: { compiler: Compiler; parentInjector: Injector; parentRoute: string; - serverConfigRouteTree: RouteTree<ServerConfigRouteTreeAdditionalMetadata> | undefined; + serverConfigRouteTree?: RouteTree<ServerConfigRouteTreeAdditionalMetadata>; invokeGetPrerenderParams: boolean; includePrerenderFallbackRoutes: boolean; - entryPointToBrowserMapping: EntryPointToBrowserMapping | undefined; + entryPointToBrowserMapping?: EntryPointToBrowserMapping; parentPreloads?: readonly string[]; }): AsyncIterableIterator<RouteTreeNodeMetadata | { error: string }> { - const { - routes, - compiler, - parentInjector, - parentRoute, - serverConfigRouteTree, - entryPointToBrowserMapping, - parentPreloads, - invokeGetPrerenderParams, - includePrerenderFallbackRoutes, - } = options; + const { routes: routeConfigs, parentPreloads, parentRoute, serverConfigRouteTree } = options; - for (const route of routes) { - try { - const { - path = '', - matcher, - redirectTo, - loadChildren, - loadComponent, - children, - ɵentryName, - } = route; - const currentRoutePath = joinUrlParts(parentRoute, path); - - if (matcher) { - yield { - error: `The route '${stripLeadingSlash(currentRoutePath)}' uses a route matcher which is not supported.`, - }; - - continue; - } - - // Get route metadata from the server config route tree, if available - let matchedMetaData: ServerConfigRouteTreeNodeMetadata | undefined; - if (serverConfigRouteTree) { - matchedMetaData = serverConfigRouteTree.match(currentRoutePath); - if (!matchedMetaData) { - yield { - error: - `The '${stripLeadingSlash(currentRoutePath)}' route does not match any route defined in the server routing configuration. ` + - 'Please ensure this route is added to the server routing configuration.', - }; + for (const route of routeConfigs) { + const { matcher, path = matcher ? '**' : '' } = route; + const currentRoutePath = joinUrlParts(parentRoute, path); + if (matcher && serverConfigRouteTree) { + let foundMatch = false; + for (const matchedMetaData of serverConfigRouteTree.traverse()) { + if (!matchedMetaData.route.startsWith(currentRoutePath)) { continue; } + foundMatch = true; matchedMetaData.presentInClientRouter = true; - } - const metadata: ServerConfigRouteTreeNodeMetadata = { - renderMode: RenderMode.Prerender, - ...matchedMetaData, - preload: parentPreloads, - // Match Angular router behavior - // ['one', 'two', ''] -> 'one/two/' - // ['one', 'two', 'three'] -> 'one/two/three' - route: path === '' ? addTrailingSlash(currentRoutePath) : currentRoutePath, - presentInClientRouter: undefined, - }; - - if (ɵentryName && loadComponent) { - appendPreloadToMetadata(ɵentryName, entryPointToBrowserMapping, metadata, true); - } - - if (metadata.renderMode === RenderMode.Prerender) { - // Handle SSG routes - yield* handleSSGRoute( - typeof redirectTo === 'string' ? redirectTo : undefined, - metadata, - parentInjector, - invokeGetPrerenderParams, - includePrerenderFallbackRoutes, - ); - } else if (typeof redirectTo === 'string') { - // Handle redirects - if (metadata.status && !VALID_REDIRECT_RESPONSE_CODES.has(metadata.status)) { + if (matchedMetaData.renderMode === RenderMode.Prerender) { yield { error: - `The '${metadata.status}' status code is not a valid redirect response code. ` + - `Please use one of the following redirect response codes: ${[...VALID_REDIRECT_RESPONSE_CODES.values()].join(', ')}.`, + `The route '${stripLeadingSlash(currentRoutePath)}' is set for prerendering but has a defined matcher. ` + + `Routes with matchers cannot use prerendering. Please specify a different 'renderMode'.`, }; - continue; } - yield { ...metadata, redirectTo: resolveRedirectTo(metadata.route, redirectTo) }; - } else { - yield metadata; - } - - // Recursively process child routes - if (children?.length) { - yield* traverseRoutesConfig({ + yield* handleRoute({ ...options, - routes: children, - parentRoute: currentRoutePath, - parentPreloads: metadata.preload, + currentRoutePath, + route, + metadata: { + ...matchedMetaData, + preload: parentPreloads, + route: matchedMetaData.route, + presentInClientRouter: undefined, + }, }); } - // Load and process lazy-loaded child routes - if (loadChildren) { - if (ɵentryName) { - // When using `loadChildren`, the entire feature area (including multiple routes) is loaded. - // As a result, we do not want all dynamic-import dependencies to be preload, because it involves multiple dependencies - // across different child routes. In contrast, `loadComponent` only loads a single component, which allows - // for precise control over preloading, ensuring that the files preloaded are exactly those required for that specific route. - appendPreloadToMetadata(ɵentryName, entryPointToBrowserMapping, metadata, false); - } + if (!foundMatch) { + yield { + error: + `The route '${stripLeadingSlash(currentRoutePath)}' has a defined matcher but does not ` + + 'match any route in the server routing configuration. Please ensure this route is added to the server routing configuration.', + }; + } - const loadedChildRoutes = await loadChildrenHelper( - route, - compiler, - parentInjector, - ).toPromise(); - - if (loadedChildRoutes) { - const { routes: childRoutes, injector = parentInjector } = loadedChildRoutes; - yield* traverseRoutesConfig({ - ...options, - routes: childRoutes, - parentInjector: injector, - parentRoute: currentRoutePath, - parentPreloads: metadata.preload, - }); - } + continue; + } + + let matchedMetaData: ServerConfigRouteTreeNodeMetadata | undefined; + if (serverConfigRouteTree) { + matchedMetaData = serverConfigRouteTree.match(currentRoutePath); + if (!matchedMetaData) { + yield { + error: + `The '${stripLeadingSlash(currentRoutePath)}' route does not match any route defined in the server routing configuration. ` + + 'Please ensure this route is added to the server routing configuration.', + }; + continue; } - } catch (error) { - yield { - error: `Error processing route '${stripLeadingSlash(route.path ?? '')}': ${(error as Error).message}`, - }; + + matchedMetaData.presentInClientRouter = true; } + + yield* handleRoute({ + ...options, + metadata: { + renderMode: RenderMode.Prerender, + ...matchedMetaData, + preload: parentPreloads, + // Match Angular router behavior + // ['one', 'two', ''] -> 'one/two/' + // ['one', 'two', 'three'] -> 'one/two/three' + route: path === '' ? addTrailingSlash(currentRoutePath) : currentRoutePath, + presentInClientRouter: undefined, + }, + currentRoutePath, + route, + }); } } @@ -279,27 +327,38 @@ function appendPreloadToMetadata( metadata: ServerConfigRouteTreeNodeMetadata, includeDynamicImports: boolean, ): void { - if (!entryPointToBrowserMapping) { + const existingPreloads = metadata.preload ?? []; + if (!entryPointToBrowserMapping || existingPreloads.length >= MODULE_PRELOAD_MAX) { return; } const preload = entryPointToBrowserMapping[entryName]; + if (!preload?.length) { + return; + } - if (preload?.length) { - // Merge existing preloads with new ones, ensuring uniqueness and limiting the total to the maximum allowed. - const preloadPaths = - preload - .filter(({ dynamicImport }) => includeDynamicImports || !dynamicImport) - .map(({ path }) => path) ?? []; - const combinedPreloads = [...(metadata.preload ?? []), ...preloadPaths]; - metadata.preload = Array.from(new Set(combinedPreloads)).slice(0, MODULE_PRELOAD_MAX); + // Merge existing preloads with new ones, ensuring uniqueness and limiting the total to the maximum allowed. + const combinedPreloads: Set<string> = new Set(existingPreloads); + for (const { dynamicImport, path } of preload) { + if (dynamicImport && !includeDynamicImports) { + continue; + } + + combinedPreloads.add(path); + + if (combinedPreloads.size === MODULE_PRELOAD_MAX) { + break; + } } + + metadata.preload = Array.from(combinedPreloads); } /** * Handles SSG (Static Site Generation) routes by invoking `getPrerenderParams` and yielding * all parameterized paths, returning any errors encountered. * + * @param serverConfigRouteTree - The tree representing the server's routing setup. * @param redirectTo - Optional path to redirect to, if specified. * @param metadata - The metadata associated with the route tree node. * @param parentInjector - The dependency injection container for the parent route. @@ -308,6 +367,7 @@ function appendPreloadToMetadata( * @returns An async iterable iterator that yields route tree node metadata for each SSG path or errors. */ async function* handleSSGRoute( + serverConfigRouteTree: RouteTree<ServerConfigRouteTreeAdditionalMetadata> | undefined, redirectTo: string | undefined, metadata: ServerConfigRouteTreeNodeMetadata, parentInjector: Injector, @@ -353,6 +413,19 @@ async function* handleSSGRoute( return; } + if (serverConfigRouteTree) { + // Automatically resolve dynamic parameters for nested routes. + const catchAllRoutePath = joinUrlParts(currentRoutePath, '**'); + const match = serverConfigRouteTree.match(catchAllRoutePath); + if (match && match.renderMode === RenderMode.Prerender && !('getPrerenderParams' in match)) { + serverConfigRouteTree.insert(catchAllRoutePath, { + ...match, + presentInClientRouter: true, + getPrerenderParams, + }); + } + } + const parameters = await runInInjectionContext(parentInjector, () => getPrerenderParams()); try { for (const params of parameters) { @@ -457,6 +530,13 @@ function buildServerConfigRouteTree({ routes, appShellRoute }: ServerRoutesConfi continue; } + if (path.includes('*') && 'getPrerenderParams' in metadata) { + errors.push( + `Invalid '${path}' route configuration: 'getPrerenderParams' cannot be used with a '*' or '**' route.`, + ); + continue; + } + serverConfigRouteTree.insert(path, metadata); } @@ -522,21 +602,23 @@ export async function getRoutesFromAngularRouterConfig( applicationRef = await bootstrap(); } + const injector = applicationRef.injector; + const router = injector.get(Router); + + // Workaround to unblock navigation when `withEnabledBlockingInitialNavigation()` is used. + // This is necessary because route extraction disables component bootstrapping. + // eslint-disable-next-line @typescript-eslint/no-explicit-any + (router as any).navigationTransitions.afterPreactivation()?.next?.(); + // Wait until the application is stable. await applicationRef.whenStable(); - const injector = applicationRef.injector; - const router = injector.get(Router); - const routesResults: RouteTreeNodeMetadata[] = []; const errors: string[] = []; - let baseHref = + const rawBaseHref = injector.get(APP_BASE_HREF, null, { optional: true }) ?? injector.get(PlatformLocation).getBaseHrefFromDOM(); - - if (baseHref.startsWith('./')) { - baseHref = baseHref.slice(2); - } + const { pathname: baseHref } = new URL(rawBaseHref, 'http://localhost'); const compiler = injector.get(Compiler); const serverRoutesConfig = injector.get(SERVER_ROUTES_CONFIG, null, { optional: true }); @@ -551,11 +633,12 @@ export async function getRoutesFromAngularRouterConfig( if (errors.length) { return { baseHref, - routes: routesResults, + routes: [], errors, }; } + const routesResults: RouteTreeNodeMetadata[] = []; if (router.config.length) { // Retrieve all routes from the Angular router configuration. const traverseRoutes = traverseRoutesConfig({ @@ -569,11 +652,19 @@ export async function getRoutesFromAngularRouterConfig( entryPointToBrowserMapping, }); - for await (const result of traverseRoutes) { - if ('error' in result) { - errors.push(result.error); - } else { - routesResults.push(result); + const seenRoutes: Set<string> = new Set(); + for await (const routeMetadata of traverseRoutes) { + if ('error' in routeMetadata) { + errors.push(routeMetadata.error); + continue; + } + + // If a result already exists for the exact same route, subsequent matches should be ignored. + // This aligns with Angular's app router behavior, which prioritizes the first route. + const routePath = routeMetadata.route; + if (!seenRoutes.has(routePath)) { + routesResults.push(routeMetadata); + seenRoutes.add(routePath); } } @@ -583,13 +674,13 @@ export async function getRoutesFromAngularRouterConfig( if (serverConfigRouteTree) { for (const { route, presentInClientRouter } of serverConfigRouteTree.traverse()) { - if (presentInClientRouter || route === '**') { + if (presentInClientRouter || route.endsWith('/**')) { // Skip if matched or it's the catch-all route. continue; } errors.push( - `The '${route}' server route does not match any routes defined in the Angular ` + + `The '${stripLeadingSlash(route)}' server route does not match any routes defined in the Angular ` + `routing configuration (typically provided as a part of the 'provideRouter' call). ` + 'Please make sure that the mentioned server route is present in the Angular routing configuration.', ); diff --git a/packages/angular/ssr/src/routes/route-config.ts b/packages/angular/ssr/src/routes/route-config.ts index b0b85fffbe34..d72602a6d990 100644 --- a/packages/angular/ssr/src/routes/route-config.ts +++ b/packages/angular/ssr/src/routes/route-config.ts @@ -6,11 +6,43 @@ * found in the LICENSE file at https://angular.dev/license */ -import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders } from '@angular/core'; +import { + EnvironmentProviders, + InjectionToken, + Provider, + Type, + makeEnvironmentProviders, +} from '@angular/core'; +import { type DefaultExport, ROUTES, type Route } from '@angular/router'; + +/** + * The internal path used for the app shell route. + * @internal + */ +const APP_SHELL_ROUTE = 'ng-app-shell'; + +/** + * Identifies a particular kind of `ServerRoutesFeatureKind`. + * @see {@link ServerRoutesFeature} + * @developerPreview + */ +enum ServerRoutesFeatureKind { + AppShell, +} + +/** + * Helper type to represent a server routes feature. + * @see {@link ServerRoutesFeatureKind} + * @developerPreview + */ +interface ServerRoutesFeature<FeatureKind extends ServerRoutesFeatureKind> { + ɵkind: FeatureKind; + ɵproviders: Provider[]; +} /** * Different rendering modes for server routes. - * @see {@link provideServerRoutesConfig} + * @see {@link provideServerRouting} * @see {@link ServerRoute} * @developerPreview */ @@ -148,7 +180,7 @@ export interface ServerRouteServer extends ServerRouteCommon { /** * Server route configuration. - * @see {@link provideServerRoutesConfig} + * @see {@link provideServerRouting} * @developerPreview */ export type ServerRoute = @@ -163,8 +195,9 @@ export type ServerRoute = * This interface defines the optional settings available for configuring server routes * in the server-side environment, such as specifying a path to the app shell route. * - * @see {@link provideServerRoutesConfig} - * @developerPreview + * + * @see {@link provideServerRouting} + * @deprecated use `provideServerRouting`. This will be removed in version 20. */ export interface ServerRoutesConfigOptions { @@ -172,8 +205,6 @@ export interface ServerRoutesConfigOptions { * Defines the route to be used as the app shell, which serves as the main entry * point for the application. This route is often used to enable server-side rendering * of the application shell for requests that do not match any specific server route. - * - * @see {@link https://angular.dev/ecosystem/service-workers/app-shell | App shell pattern on Angular.dev} */ appShellRoute?: string; } @@ -182,7 +213,13 @@ export interface ServerRoutesConfigOptions { * Configuration value for server routes configuration. * @internal */ -export interface ServerRoutesConfig extends ServerRoutesConfigOptions { +export interface ServerRoutesConfig { + /** + * Defines the route to be used as the app shell. + */ + appShellRoute?: string; + + /** List of server routes for the application. */ routes: ServerRoute[]; } @@ -204,6 +241,8 @@ export const SERVER_ROUTES_CONFIG = new InjectionToken<ServerRoutesConfig>('SERV * * @see {@link ServerRoute} * @see {@link ServerRoutesConfigOptions} + * @see {@link provideServerRouting} + * @deprecated use `provideServerRouting`. This will be removed in version 20. * @developerPreview */ export function provideServerRoutesConfig( @@ -223,3 +262,83 @@ export function provideServerRoutesConfig( }, ]); } + +/** + * Sets up the necessary providers for configuring server routes. + * This function accepts an array of server routes and optional configuration + * options, returning an `EnvironmentProviders` object that encapsulates + * the server routes and configuration settings. + * + * @param routes - An array of server routes to be provided. + * @param features - (Optional) server routes features. + * @returns An `EnvironmentProviders` instance with the server routes configuration. + * + * @see {@link ServerRoute} + * @see {@link withAppShell} + * @developerPreview + */ +export function provideServerRouting( + routes: ServerRoute[], + ...features: ServerRoutesFeature<ServerRoutesFeatureKind>[] +): EnvironmentProviders { + const config: ServerRoutesConfig = { routes }; + const hasAppShell = features.some((f) => f.ɵkind === ServerRoutesFeatureKind.AppShell); + if (hasAppShell) { + config.appShellRoute = APP_SHELL_ROUTE; + } + + const providers: Provider[] = [ + { + provide: SERVER_ROUTES_CONFIG, + useValue: config, + }, + ]; + + for (const feature of features) { + providers.push(...feature.ɵproviders); + } + + return makeEnvironmentProviders(providers); +} + +/** + * Configures the app shell route with the provided component. + * + * The app shell serves as the main entry point for the application and is commonly used + * to enable server-side rendering (SSR) of the application shell. It handles requests + * that do not match any specific server route, providing a fallback mechanism and improving + * perceived performance during navigation. + * + * This configuration is particularly useful in applications leveraging Progressive Web App (PWA) + * patterns, such as service workers, to deliver a seamless user experience. + * + * @param component The Angular component to render for the app shell route. + * @returns A server routes feature configuration for the app shell. + * + * @see {@link provideServerRouting} + * @see {@link https://angular.dev/ecosystem/service-workers/app-shell | App shell pattern on Angular.dev} + */ +export function withAppShell( + component: Type<unknown> | (() => Promise<Type<unknown> | DefaultExport<Type<unknown>>>), +): ServerRoutesFeature<ServerRoutesFeatureKind.AppShell> { + const routeConfig: Route = { + path: APP_SHELL_ROUTE, + }; + + if ('ɵcmp' in component) { + routeConfig.component = component as Type<unknown>; + } else { + routeConfig.loadComponent = component as () => Promise<Type<unknown>>; + } + + return { + ɵkind: ServerRoutesFeatureKind.AppShell, + ɵproviders: [ + { + provide: ROUTES, + useValue: routeConfig, + multi: true, + }, + ], + }; +} diff --git a/packages/angular/ssr/src/routes/route-tree.ts b/packages/angular/ssr/src/routes/route-tree.ts index ba79688aa3c6..64d9a0fdfef2 100644 --- a/packages/angular/ssr/src/routes/route-tree.ts +++ b/packages/angular/ssr/src/routes/route-tree.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { stripTrailingSlash } from '../utils/url'; +import { addLeadingSlash } from '../utils/url'; import { RenderMode } from './route-config'; /** @@ -78,21 +78,6 @@ export interface RouteTreeNodeMetadata { * The `AdditionalMetadata` type parameter allows for extending the node metadata with custom data. */ interface RouteTreeNode<AdditionalMetadata extends Record<string, unknown>> { - /** - * The segment value associated with this node. - * A segment is a single part of a route path, typically delimited by slashes (`/`). - * For example, in the route `/users/:id/profile`, the segments are `users`, `:id`, and `profile`. - * Segments can also be wildcards (`*`), which match any segment in that position of the route. - */ - segment: string; - - /** - * The index indicating the order in which the route was inserted into the tree. - * This index helps determine the priority of routes during matching, with lower indexes - * indicating earlier inserted routes. - */ - insertionIndex: number; - /** * A map of child nodes, keyed by their corresponding route segment or wildcard. */ @@ -116,14 +101,7 @@ export class RouteTree<AdditionalMetadata extends Record<string, unknown> = {}> * The root node of the route tree. * All routes are stored and accessed relative to this root node. */ - private readonly root = this.createEmptyRouteTreeNode(''); - - /** - * A counter that tracks the order of route insertion. - * This ensures that routes are matched in the order they were defined, - * with earlier routes taking precedence. - */ - private insertionIndexCounter = 0; + private readonly root = this.createEmptyRouteTreeNode(); /** * Inserts a new route into the route tree. @@ -142,9 +120,8 @@ export class RouteTree<AdditionalMetadata extends Record<string, unknown> = {}> // Replace parameterized segments (e.g., :id) with a wildcard (*) for matching const normalizedSegment = segment[0] === ':' ? '*' : segment; let childNode = node.children.get(normalizedSegment); - if (!childNode) { - childNode = this.createEmptyRouteTreeNode(normalizedSegment); + childNode = this.createEmptyRouteTreeNode(); node.children.set(normalizedSegment, childNode); } @@ -155,10 +132,8 @@ export class RouteTree<AdditionalMetadata extends Record<string, unknown> = {}> // At the leaf node, store the full route and its associated metadata node.metadata = { ...metadata, - route: normalizedSegments.join('/'), + route: addLeadingSlash(normalizedSegments.join('/')), }; - - node.insertionIndex = this.insertionIndexCounter++; } /** @@ -230,7 +205,7 @@ export class RouteTree<AdditionalMetadata extends Record<string, unknown> = {}> * @returns An array of path segments. */ private getPathSegments(route: string): string[] { - return stripTrailingSlash(route).split('/'); + return route.split('/').filter(Boolean); } /** @@ -240,91 +215,58 @@ export class RouteTree<AdditionalMetadata extends Record<string, unknown> = {}> * This function prioritizes exact segment matches first, followed by wildcard matches (`*`), * and finally deep wildcard matches (`**`) that consume all segments. * - * @param remainingSegments - The remaining segments of the route path to match. - * @param node - The current node in the route tree to start traversal from. + * @param segments - The array of route path segments to match against the route tree. + * @param node - The current node in the route tree to start traversal from. Defaults to the root node. + * @param currentIndex - The index of the segment in `remainingSegments` currently being matched. + * Defaults to `0` (the first segment). * * @returns The node that best matches the remaining segments or `undefined` if no match is found. */ private traverseBySegments( - remainingSegments: string[] | undefined, + segments: string[], node = this.root, + currentIndex = 0, ): RouteTreeNode<AdditionalMetadata> | undefined { - const { metadata, children } = node; - - // If there are no remaining segments and the node has metadata, return this node - if (!remainingSegments?.length) { - if (metadata) { - return node; - } - - return; + if (currentIndex >= segments.length) { + return node.metadata ? node : node.children.get('**'); } - // If the node has no children, end the traversal - if (!children.size) { - return; + if (!node.children.size) { + return undefined; } - const [segment, ...restSegments] = remainingSegments; - let currentBestMatchNode: RouteTreeNode<AdditionalMetadata> | undefined; - - // 1. Exact segment match - const exactMatchNode = node.children.get(segment); - currentBestMatchNode = this.getHigherPriorityNode( - currentBestMatchNode, - this.traverseBySegments(restSegments, exactMatchNode), - ); - - // 2. Wildcard segment match (`*`) - const wildcardNode = node.children.get('*'); - currentBestMatchNode = this.getHigherPriorityNode( - currentBestMatchNode, - this.traverseBySegments(restSegments, wildcardNode), - ); - - // 3. Deep wildcard segment match (`**`) - const deepWildcardNode = node.children.get('**'); - currentBestMatchNode = this.getHigherPriorityNode(currentBestMatchNode, deepWildcardNode); - - return currentBestMatchNode; - } + const segment = segments[currentIndex]; - /** - * Compares two nodes and returns the node with higher priority based on insertion index. - * A node with a lower insertion index is prioritized as it was defined earlier. - * - * @param currentBestMatchNode - The current best match node. - * @param candidateNode - The node being evaluated for higher priority based on insertion index. - * @returns The node with higher priority (i.e., lower insertion index). If one of the nodes is `undefined`, the other node is returned. - */ - private getHigherPriorityNode( - currentBestMatchNode: RouteTreeNode<AdditionalMetadata> | undefined, - candidateNode: RouteTreeNode<AdditionalMetadata> | undefined, - ): RouteTreeNode<AdditionalMetadata> | undefined { - if (!candidateNode) { - return currentBestMatchNode; + // 1. Attempt exact match with the current segment. + const exactMatch = node.children.get(segment); + if (exactMatch) { + const match = this.traverseBySegments(segments, exactMatch, currentIndex + 1); + if (match) { + return match; + } } - if (!currentBestMatchNode) { - return candidateNode; + // 2. Attempt wildcard match ('*'). + const wildcardMatch = node.children.get('*'); + if (wildcardMatch) { + const match = this.traverseBySegments(segments, wildcardMatch, currentIndex + 1); + if (match) { + return match; + } } - return candidateNode.insertionIndex < currentBestMatchNode.insertionIndex - ? candidateNode - : currentBestMatchNode; + // 3. Attempt double wildcard match ('**'). + return node.children.get('**'); } /** - * Creates an empty route tree node with the specified segment. + * Creates an empty route tree node. * This helper function is used during the tree construction. * - * @param segment - The route segment that this node represents. * @returns A new, empty route tree node. */ - private createEmptyRouteTreeNode(segment: string): RouteTreeNode<AdditionalMetadata> { + private createEmptyRouteTreeNode(): RouteTreeNode<AdditionalMetadata> { return { - segment, - insertionIndex: -1, children: new Map(), }; } diff --git a/packages/angular/ssr/test/BUILD.bazel b/packages/angular/ssr/test/BUILD.bazel index 0d232a66981b..8fad8bd45ca9 100644 --- a/packages/angular/ssr/test/BUILD.bazel +++ b/packages/angular/ssr/test/BUILD.bazel @@ -1,6 +1,5 @@ -load("@npm//@angular/build-tooling/bazel/spec-bundling:index.bzl", "spec_bundle") -load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") -load("//tools:interop.bzl", "ts_project") +load("@devinfra//bazel/spec-bundling:index_rjs.bzl", "spec_bundle") +load("//tools:defaults2.bzl", "jasmine_test", "ts_project") ts_project( name = "unit_test_lib", @@ -8,28 +7,30 @@ ts_project( srcs = glob( include = ["**/*.ts"], ), + tsconfig = "//:test-tsconfig-esm", deps = [ - "//:root_modules/@angular/common", - "//:root_modules/@angular/compiler", - "//:root_modules/@angular/core", - "//:root_modules/@angular/platform-browser", - "//:root_modules/@angular/platform-server", - "//:root_modules/@angular/router", - "//packages/angular/ssr:ssr_rjs", + "//:node_modules/@angular/common", + "//:node_modules/@angular/compiler", + "//:node_modules/@angular/core", + "//:node_modules/@angular/platform-browser", + "//:node_modules/@angular/platform-server", + "//:node_modules/@angular/router", + "//:node_modules/@types/node", + "//packages/angular/ssr", ], ) spec_bundle( name = "esm_tests_bundled", - downlevel_async_await = False, - platform = "node", - run_angular_linker = False, deps = [ ":unit_test_lib", + "//packages/angular/ssr/third_party/beasties:beasties_bundled", ], ) -jasmine_node_test( +jasmine_test( name = "test", - deps = [":esm_tests_bundled"], + data = [ + ":esm_tests_bundled", + ], ) diff --git a/packages/angular/ssr/test/app-engine_spec.ts b/packages/angular/ssr/test/app-engine_spec.ts index 712c39539751..b74244941c95 100644 --- a/packages/angular/ssr/test/app-engine_spec.ts +++ b/packages/angular/ssr/test/app-engine_spec.ts @@ -157,12 +157,12 @@ describe('AngularAppEngine', () => { }); it('should redirect to the highest priority locale when the URL is "/"', async () => { - const request = new Request('https://example.com/', { + const request = new Request('https://example.com', { headers: { 'Accept-Language': 'fr-CH, fr;q=0.9, it;q=0.8, en;q=0.7, *;q=0.5' }, }); const response = await appEngine.handle(request); expect(response?.status).toBe(302); - expect(response?.headers.get('Location')).toBe('https://example.com/it'); + expect(response?.headers.get('Location')).toBe('/it'); expect(response?.headers.get('Vary')).toBe('Accept-Language'); }); diff --git a/packages/angular/ssr/test/npm_package/BUILD.bazel b/packages/angular/ssr/test/npm_package/BUILD.bazel index a30cc33e155a..9111a91325c0 100644 --- a/packages/angular/ssr/test/npm_package/BUILD.bazel +++ b/packages/angular/ssr/test/npm_package/BUILD.bazel @@ -1,21 +1,20 @@ load("@bazel_skylib//rules:diff_test.bzl", "diff_test") load("@bazel_skylib//rules:write_file.bzl", "write_file") -load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") -load("//tools:interop.bzl", "ts_project") +load("//tools:defaults2.bzl", "jasmine_test", "ts_project") ts_project( name = "unit_test_lib", testonly = True, srcs = glob(["**/*.ts"]), deps = [ - "//:root_modules/@bazel/runfiles", + "//:node_modules/@types/node", ], ) -jasmine_node_test( +jasmine_test( name = "test", - srcs = [":unit_test_lib"], data = [ + "unit_test_lib", "//packages/angular/ssr:npm_package", ], ) diff --git a/packages/angular/ssr/test/npm_package/package_spec.ts b/packages/angular/ssr/test/npm_package/package_spec.ts index 39580cce2013..2bd37aeabf5b 100644 --- a/packages/angular/ssr/test/npm_package/package_spec.ts +++ b/packages/angular/ssr/test/npm_package/package_spec.ts @@ -6,17 +6,14 @@ * found in the LICENSE file at https://angular.dev/license */ -import { runfiles } from '@bazel/runfiles'; import { existsSync } from 'node:fs'; import { readFile } from 'node:fs/promises'; -import { dirname, join } from 'node:path'; +import { join, resolve } from 'node:path'; /** * Resolve paths for the Beasties license file and the golden reference file. */ -const ANGULAR_SSR_PACKAGE_PATH = dirname( - runfiles.resolve('angular_cli/packages/angular/ssr/npm_package/package.json'), -); +const ANGULAR_SSR_PACKAGE_PATH = resolve('../../npm_package'); /** * Path to the actual license file for the Beasties library. diff --git a/packages/angular/ssr/test/routes/ng-routes_spec.ts b/packages/angular/ssr/test/routes/ng-routes_spec.ts index ca4b3f757fc7..291ce74708ab 100644 --- a/packages/angular/ssr/test/routes/ng-routes_spec.ts +++ b/packages/angular/ssr/test/routes/ng-routes_spec.ts @@ -12,6 +12,7 @@ import '@angular/compiler'; /* eslint-enable import/no-unassigned-import */ import { Component } from '@angular/core'; +import { Routes, provideRouter, withEnabledBlockingInitialNavigation } from '@angular/router'; import { extractRoutesAndCreateRouteTree } from '../../src/routes/ng-routes'; import { PrerenderFallback, RenderMode } from '../../src/routes/route-config'; import { setAngularAppTestingManifest } from '../testing-utils'; @@ -51,19 +52,139 @@ describe('extractRoutesAndCreateRouteTree', () => { ]); }); - it('should handle invalid route configuration path', async () => { - setAngularAppTestingManifest( - [{ path: 'home', component: DummyComponent }], - [ - // This path starts with a slash, which should trigger an error - { path: '/invalid', renderMode: RenderMode.Client }, - ], - ); + describe('route configuration validation', () => { + it(`should error when a route starts with a '/'`, async () => { + setAngularAppTestingManifest( + [{ path: 'home', component: DummyComponent }], + [ + // This path starts with a slash, which should trigger an error + { path: '/invalid', renderMode: RenderMode.Client }, + ], + ); - const { errors } = await extractRoutesAndCreateRouteTree({ url }); - expect(errors[0]).toContain( - `Invalid '/invalid' route configuration: the path cannot start with a slash.`, - ); + const { errors } = await extractRoutesAndCreateRouteTree({ url }); + expect(errors[0]).toContain( + `Invalid '/invalid' route configuration: the path cannot start with a slash.`, + ); + }); + + it("should error when 'getPrerenderParams' is used with a '**' route", async () => { + setAngularAppTestingManifest( + [{ path: 'home', component: DummyComponent }], + [ + { + path: '**', + renderMode: RenderMode.Prerender, + getPrerenderParams() { + return Promise.resolve([]); + }, + }, + ], + ); + + const { errors } = await extractRoutesAndCreateRouteTree({ url }); + expect(errors[0]).toContain( + "Invalid '**' route configuration: 'getPrerenderParams' cannot be used with a '*' or '**' route.", + ); + }); + + it("should error when 'getPrerenderParams' is used with a '*' route", async () => { + setAngularAppTestingManifest( + [{ path: 'invalid/:id', component: DummyComponent }], + [ + { + path: 'invalid/*', + renderMode: RenderMode.Prerender, + getPrerenderParams() { + return Promise.resolve([]); + }, + }, + ], + ); + + const { errors } = await extractRoutesAndCreateRouteTree({ url }); + expect(errors[0]).toContain( + "Invalid 'invalid/*' route configuration: 'getPrerenderParams' cannot be used with a '*' or '**' route.", + ); + }); + + it(`should not error when a catch-all route didn't match any Angular route.`, async () => { + setAngularAppTestingManifest( + [{ path: 'home', component: DummyComponent }], + [ + { path: 'home', renderMode: RenderMode.Server }, + { path: '**', renderMode: RenderMode.Server }, + ], + ); + + const { errors } = await extractRoutesAndCreateRouteTree({ + url, + invokeGetPrerenderParams: false, + includePrerenderFallbackRoutes: false, + }); + + expect(errors).toHaveSize(0); + }); + + it('should error when a route is not defined in the server routing configuration', async () => { + setAngularAppTestingManifest( + [{ path: 'home', component: DummyComponent }], + [ + { path: 'home', renderMode: RenderMode.Server }, + { path: 'invalid', renderMode: RenderMode.Server }, + ], + ); + + const { errors } = await extractRoutesAndCreateRouteTree({ + url, + invokeGetPrerenderParams: false, + includePrerenderFallbackRoutes: false, + }); + + expect(errors).toHaveSize(1); + expect(errors[0]).toContain( + `The 'invalid' server route does not match any routes defined in the Angular routing configuration`, + ); + }); + + it('should error when a server route is not defined in the Angular routing configuration', async () => { + setAngularAppTestingManifest( + [ + { path: 'home', component: DummyComponent }, + { path: 'invalid', component: DummyComponent }, + ], + [{ path: 'home', renderMode: RenderMode.Server }], + ); + + const { errors } = await extractRoutesAndCreateRouteTree({ + url, + invokeGetPrerenderParams: false, + includePrerenderFallbackRoutes: false, + }); + + expect(errors).toHaveSize(1); + expect(errors[0]).toContain( + `The 'invalid' route does not match any route defined in the server routing configuration`, + ); + }); + + it('should error when a route with a matcher when render mode is Prerender.', async () => { + setAngularAppTestingManifest( + [{ matcher: () => null, component: DummyComponent }], + [ + { + path: '**', + renderMode: RenderMode.Prerender, + }, + ], + ); + + const { errors } = await extractRoutesAndCreateRouteTree({ url }); + expect(errors[0]).toContain( + `The route '**' is set for prerendering but has a defined matcher. ` + + `Routes with matchers cannot use prerendering. Please specify a different 'renderMode'.`, + ); + }); }); describe('when `invokeGetPrerenderParams` is true', () => { @@ -215,6 +336,7 @@ describe('extractRoutesAndCreateRouteTree', () => { invokeGetPrerenderParams: true, includePrerenderFallbackRoutes: true, }); + expect(errors).toHaveSize(0); expect(routeTree.toObject()).toEqual([ { route: '/', renderMode: RenderMode.Prerender, redirectTo: '/some' }, @@ -226,6 +348,54 @@ describe('extractRoutesAndCreateRouteTree', () => { }); }); + it('should extract routes with a route level matcher', async () => { + setAngularAppTestingManifest( + [ + { + path: '', + component: DummyComponent, + }, + { + path: 'product', + component: DummyComponent, + children: [ + { + path: '', + component: DummyComponent, + }, + { + matcher: () => null, + component: DummyComponent, + }, + { + path: 'list', + component: DummyComponent, + }, + ], + }, + ], + [ + { path: '**', renderMode: RenderMode.Client }, + { path: 'product', renderMode: RenderMode.Client }, + { path: 'product/*', renderMode: RenderMode.Client }, + { path: 'product/**/overview/details', renderMode: RenderMode.Server }, + { path: 'product/**/overview', renderMode: RenderMode.Server }, + { path: 'product/**/overview/about', renderMode: RenderMode.Server }, + ], + ); + + const { routeTree, errors } = await extractRoutesAndCreateRouteTree({ url }); + expect(errors).toHaveSize(0); + expect(routeTree.toObject()).toEqual([ + { route: '/', renderMode: RenderMode.Client }, + { route: '/product', renderMode: RenderMode.Client }, + { route: '/product/**/overview', renderMode: RenderMode.Server }, + { route: '/product/**/overview/details', renderMode: RenderMode.Server }, + { route: '/product/**/overview/about', renderMode: RenderMode.Server }, + { route: '/product/list', renderMode: RenderMode.Client }, + ]); + }); + it('should extract nested redirects that are not explicitly defined.', async () => { setAngularAppTestingManifest( [ @@ -317,7 +487,6 @@ describe('extractRoutesAndCreateRouteTree', () => { const { routeTree, errors } = await extractRoutesAndCreateRouteTree({ url, - invokeGetPrerenderParams: true, includePrerenderFallbackRoutes: false, }); @@ -373,86 +542,45 @@ describe('extractRoutesAndCreateRouteTree', () => { ]); }); - it(`should not error when a catch-all route didn't match any Angular route.`, async () => { - setAngularAppTestingManifest( - [{ path: 'home', component: DummyComponent }], - [ - { path: 'home', renderMode: RenderMode.Server }, - { path: '**', renderMode: RenderMode.Server }, - ], - ); + it('should use wildcard configuration when no Angular routes are defined', async () => { + setAngularAppTestingManifest([], [{ path: '**', renderMode: RenderMode.Server, status: 201 }]); - const { errors } = await extractRoutesAndCreateRouteTree({ + const { errors, routeTree } = await extractRoutesAndCreateRouteTree({ url, invokeGetPrerenderParams: false, includePrerenderFallbackRoutes: false, }); expect(errors).toHaveSize(0); + expect(routeTree.toObject()).toEqual([ + { route: '/', renderMode: RenderMode.Server, status: 201 }, + ]); }); - it('should error when a route is not defined in the server routing configuration', async () => { + it(`handles a baseHref starting with a "./" path`, async () => { setAngularAppTestingManifest( [{ path: 'home', component: DummyComponent }], - [ - { path: 'home', renderMode: RenderMode.Server }, - { path: 'invalid', renderMode: RenderMode.Server }, - ], - ); - - const { errors } = await extractRoutesAndCreateRouteTree({ - url, - invokeGetPrerenderParams: false, - includePrerenderFallbackRoutes: false, - }); - - expect(errors).toHaveSize(1); - expect(errors[0]).toContain( - `The 'invalid' server route does not match any routes defined in the Angular routing configuration`, - ); - }); - - it('should error when a server route is not defined in the Angular routing configuration', async () => { - setAngularAppTestingManifest( - [ - { path: 'home', component: DummyComponent }, - { path: 'invalid', component: DummyComponent }, - ], - [{ path: 'home', renderMode: RenderMode.Server }], - ); - - const { errors } = await extractRoutesAndCreateRouteTree({ - url, - invokeGetPrerenderParams: false, - includePrerenderFallbackRoutes: false, - }); - - expect(errors).toHaveSize(1); - expect(errors[0]).toContain( - `The 'invalid' route does not match any route defined in the server routing configuration`, + [{ path: '**', renderMode: RenderMode.Server }], + /** baseHref*/ './example', ); - }); - it('should use wildcard configuration when no Angular routes are defined', async () => { - setAngularAppTestingManifest([], [{ path: '**', renderMode: RenderMode.Server, status: 201 }]); - - const { errors, routeTree } = await extractRoutesAndCreateRouteTree({ + const { routeTree, errors } = await extractRoutesAndCreateRouteTree({ url, - invokeGetPrerenderParams: false, - includePrerenderFallbackRoutes: false, + invokeGetPrerenderParams: true, + includePrerenderFallbackRoutes: true, }); expect(errors).toHaveSize(0); expect(routeTree.toObject()).toEqual([ - { route: '/', renderMode: RenderMode.Server, status: 201 }, + { route: '/example/home', renderMode: RenderMode.Server }, ]); }); - it(`handles a baseHref starting with a "./" path`, async () => { + it('handles a baseHref starting with a protocol', async () => { setAngularAppTestingManifest( [{ path: 'home', component: DummyComponent }], [{ path: '**', renderMode: RenderMode.Server }], - /** baseHref*/ './example', + /** baseHref*/ 'http://foo.com/example/', ); const { routeTree, errors } = await extractRoutesAndCreateRouteTree({ @@ -495,4 +623,70 @@ describe('extractRoutesAndCreateRouteTree', () => { expect(errors).toHaveSize(0); expect(routeTree.toObject()).toHaveSize(2); }); + + it('should not bootstrap the root component when using `withEnabledBlockingInitialNavigation`', async () => { + @Component({ + standalone: true, + selector: 'app-root', + template: '', + }) + class RootComponent { + constructor() { + throw new Error('RootComponent should not be bootstrapped.'); + } + } + + const routes: Routes = [ + { path: '', component: DummyComponent }, + { path: 'home', component: DummyComponent }, + ]; + + setAngularAppTestingManifest( + routes, + [{ path: '**', renderMode: RenderMode.Server }], + undefined, + undefined, + undefined, + RootComponent, + [provideRouter(routes, withEnabledBlockingInitialNavigation())], + ); + + const { routeTree, errors } = await extractRoutesAndCreateRouteTree({ url }); + expect(errors).toHaveSize(0); + expect(routeTree.toObject()).toHaveSize(2); + }); + + it('should give precedence to the first matching route over subsequent ones', async () => { + setAngularAppTestingManifest( + [ + { + path: '', + children: [ + { path: 'home', component: DummyComponent }, + { path: '**', component: DummyComponent }, + ], + }, + // The following routes should be ignored due to Angular's routing behavior: + // - ['', '**'] and ['**'] are equivalent, and the first match takes precedence. + // - ['', 'home'] and ['home'] are equivalent, and the first match takes precedence. + { + path: 'home', + redirectTo: 'never', + }, + { + path: '**', + redirectTo: 'never', + }, + ], + [{ path: '**', renderMode: RenderMode.Server }], + ); + + const { routeTree, errors } = await extractRoutesAndCreateRouteTree({ url }); + expect(errors).toHaveSize(0); + expect(routeTree.toObject()).toEqual([ + { route: '/', renderMode: RenderMode.Server }, + { route: '/home', renderMode: RenderMode.Server }, + { route: '/**', renderMode: RenderMode.Server }, + ]); + }); }); diff --git a/packages/angular/ssr/test/routes/route-tree_spec.ts b/packages/angular/ssr/test/routes/route-tree_spec.ts index fe8097a16c83..fa4e120f6c56 100644 --- a/packages/angular/ssr/test/routes/route-tree_spec.ts +++ b/packages/angular/ssr/test/routes/route-tree_spec.ts @@ -7,7 +7,7 @@ */ import { RenderMode } from '../../src/routes/route-config'; -import { RouteTree } from '../../src/routes/route-tree'; +import { RouteTree, RouteTreeNodeMetadataWithoutRoute } from '../../src/routes/route-tree'; describe('RouteTree', () => { let routeTree: RouteTree; @@ -118,39 +118,12 @@ describe('RouteTree', () => { const newRouteTree = RouteTree.fromObject(routeTreeObj); expect(newRouteTree.match('/any-path')).toBeUndefined(); }); - - it('should preserve insertion order when converting to and from object', () => { - routeTree.insert('/first', { renderMode: RenderMode.Server }); - routeTree.insert('/:id', { renderMode: RenderMode.Server }); - routeTree.insert('/second', { renderMode: RenderMode.Server }); - - const routeTreeObj = routeTree.toObject(); - expect(routeTreeObj).toEqual([ - { route: '/first', renderMode: RenderMode.Server }, - { route: '/*', renderMode: RenderMode.Server }, - { route: '/second', renderMode: RenderMode.Server }, - ]); - - const newRouteTree = RouteTree.fromObject(routeTreeObj); - expect(newRouteTree.match('/first')).toEqual({ - route: '/first', - renderMode: RenderMode.Server, - }); - expect(newRouteTree.match('/second')).toEqual({ - route: '/*', - renderMode: RenderMode.Server, - }); - expect(newRouteTree.match('/third')).toEqual({ - route: '/*', - renderMode: RenderMode.Server, - }); - }); }); describe('match', () => { it('should handle empty routes', () => { routeTree.insert('', { renderMode: RenderMode.Server }); - expect(routeTree.match('')).toEqual({ route: '', renderMode: RenderMode.Server }); + expect(routeTree.match('')).toEqual({ route: '/', renderMode: RenderMode.Server }); }); it('should insert and match basic routes', () => { @@ -204,12 +177,42 @@ describe('RouteTree', () => { }); }); - it('should prioritize earlier insertions in case of conflicts', () => { + it('matches routes correctly with exact, wildcard, and double wildcard patterns', () => { + const meta: RouteTreeNodeMetadataWithoutRoute = { renderMode: RenderMode.Client }; + + // Set up the route tree with various route configurations + routeTree.insert('/', meta); + routeTree.insert('/*', meta); + routeTree.insert('/*/*', meta); + routeTree.insert('/**', meta); + routeTree.insert('/blog', meta); + routeTree.insert('/blog/*', meta); + + // Test route matches for exact routes + expect(routeTree.match('/')?.route).toBe('/'); + expect(routeTree.match('/blog')?.route).toBe('/blog'); + + // Test route matches for single wildcard routes + expect(routeTree.match('/something')?.route).toBe('/*'); + expect(routeTree.match('/blog/article')?.route).toBe('/blog/*'); + + // Test route matches for multiple wildcard routes + expect(routeTree.match('/something/another')?.route).toBe('/*/*'); + + // Additional test for wildcard fallback + expect(routeTree.match('/something')?.route).toBe('/*'); + + // Test route matches for catch all double wildcard routes + expect(routeTree.match('/something/another/nested')?.route).toBe('/**'); + }); + + it('should prefer exact matches in case of conflicts', () => { routeTree.insert('/blog/*', { renderMode: RenderMode.Server }); routeTree.insert('/blog/article', { redirectTo: 'blog', renderMode: RenderMode.Server }); expect(routeTree.match('/blog/article')).toEqual({ - route: '/blog/*', + route: '/blog/article', + redirectTo: 'blog', renderMode: RenderMode.Server, }); }); @@ -274,5 +277,13 @@ describe('RouteTree', () => { renderMode: RenderMode.Server, }); }); + + it('should correctly match catch-all segments with a prefix', () => { + routeTree.insert('/de/**', { renderMode: RenderMode.Server }); + expect(routeTree.match('/de')).toEqual({ + route: '/de/**', + renderMode: RenderMode.Server, + }); + }); }); }); diff --git a/packages/angular/ssr/test/testing-utils.ts b/packages/angular/ssr/test/testing-utils.ts index 4d7e8a1cfb28..b6d01398d7cc 100644 --- a/packages/angular/ssr/test/testing-utils.ts +++ b/packages/angular/ssr/test/testing-utils.ts @@ -6,13 +6,19 @@ * found in the LICENSE file at https://angular.dev/license */ -import { Component, Type, provideExperimentalZonelessChangeDetection } from '@angular/core'; +import { + Component, + EnvironmentProviders, + Provider, + Type, + provideExperimentalZonelessChangeDetection, +} from '@angular/core'; import { bootstrapApplication } from '@angular/platform-browser'; import { provideServerRendering } from '@angular/platform-server'; import { RouterOutlet, Routes, provideRouter } from '@angular/router'; import { destroyAngularServerApp } from '../src/app'; import { ServerAsset, setAngularAppManifest } from '../src/manifest'; -import { ServerRoute, provideServerRoutesConfig } from '../src/routes/route-config'; +import { ServerRoute, provideServerRouting } from '../src/routes/route-config'; @Component({ standalone: true, @@ -35,6 +41,8 @@ class AppComponent {} * where the keys are asset paths and the values are asset details. * @param locale - An optional locale to configure for the application during testing. * @param rootComponent - The root Angular component to bootstrap the application. + * @param extraProviders - An optional array of additional providers that should be available to the + * root component and all its children. */ export function setAngularAppTestingManifest( routes: Routes, @@ -43,6 +51,7 @@ export function setAngularAppTestingManifest( additionalServerAssets: Record<string, ServerAsset> = {}, locale?: string, rootComponent: Type<unknown> = AppComponent, + extraProviders: Array<Provider | EnvironmentProviders> = [], ): void { destroyAngularServerApp(); @@ -88,7 +97,8 @@ export function setAngularAppTestingManifest( provideServerRendering(), provideExperimentalZonelessChangeDetection(), provideRouter(routes), - provideServerRoutesConfig(serverRoutes), + provideServerRouting(serverRoutes), + ...extraProviders, ], }); }, diff --git a/packages/angular/ssr/third_party/beasties/BUILD.bazel b/packages/angular/ssr/third_party/beasties/BUILD.bazel index cebfaffa1639..e54d156866e9 100644 --- a/packages/angular/ssr/third_party/beasties/BUILD.bazel +++ b/packages/angular/ssr/third_party/beasties/BUILD.bazel @@ -1,5 +1,5 @@ load("@aspect_rules_js//js:defs.bzl", "js_library") -load("@npm//@bazel/rollup:index.bzl", "rollup_bundle") +load("@npm2//:rollup/package_json.bzl", rollup = "bin") package(default_visibility = ["//visibility:public"]) @@ -9,59 +9,40 @@ js_library( "index.d.ts", ], deps = [ - "//:root_modules/beasties", + "//:node_modules/beasties", ], ) js_library( name = "beasties_bundled", srcs = [ - ":bundled_beasties_files", - ], - deps = [ - "//:root_modules/beasties", + ":bundled_beasties", ], ) -# Filter out esbuild metadata files and only copy the necessary files -genrule( - name = "bundled_beasties_files", +rollup.rollup( + name = "bundled_beasties", srcs = [ - ":bundled_beasties", + "rollup.config.mjs", + "//:node_modules/@rollup/plugin-alias", + "//:node_modules/@rollup/plugin-commonjs", + "//:node_modules/@rollup/plugin-node-resolve", + "//:node_modules/beasties", + "//:node_modules/rollup-license-plugin", + "//:node_modules/unenv", ], outs = [ + "THIRD_PARTY_LICENSES.txt", "index.js", "index.js.map", - "THIRD_PARTY_LICENSES.txt", ], - cmd = """ - for f in $(locations :bundled_beasties); do - # Only process files inside the bundled_beasties directory - if [[ "$${f}" == *bundled_beasties ]]; then - cp "$${f}/index.js" $(location :index.js) - cp "$${f}/index.js.map" $(location :index.js.map) - cp "$${f}/THIRD_PARTY_LICENSES.txt" $(location :THIRD_PARTY_LICENSES.txt) - fi - done - """, -) - -rollup_bundle( - name = "bundled_beasties", - config_file = ":rollup.config.mjs", - entry_points = { - "@npm//:node_modules/beasties/dist/index.mjs": "index", - }, - format = "esm", - link_workspace_root = True, - output_dir = True, - sourcemap = "true", - deps = [ - "@npm//@rollup/plugin-alias", - "@npm//@rollup/plugin-commonjs", - "@npm//@rollup/plugin-node-resolve", - "@npm//beasties", - "@npm//rollup-license-plugin", - "@npm//unenv", + args = [ + "--format=esm", + "--config=$(rootpath rollup.config.mjs)", + "--input=node_modules/beasties/dist/index.mjs", + "--sourcemap=true", + "--dir=packages/angular/ssr/third_party/beasties", ], + progress_message = "Bundling beasties", + silent_on_success = False, ) diff --git a/packages/angular/ssr/third_party/beasties/rollup.config.mjs b/packages/angular/ssr/third_party/beasties/rollup.config.mjs index e2283403bc1c..c872fd914aba 100644 --- a/packages/angular/ssr/third_party/beasties/rollup.config.mjs +++ b/packages/angular/ssr/third_party/beasties/rollup.config.mjs @@ -28,7 +28,6 @@ export default { nodeResolve({ preferBuiltins: false, browser: true, - jail: process.cwd(), }), commonjs(), alias({ diff --git a/packages/angular_devkit/architect/BUILD.bazel b/packages/angular_devkit/architect/BUILD.bazel index 78418fcbc081..5edb897086a8 100644 --- a/packages/angular_devkit/architect/BUILD.bazel +++ b/packages/angular_devkit/architect/BUILD.bazel @@ -3,17 +3,17 @@ # Use of this source code is governed by an MIT-style license that can be # found in the LICENSE file at https://angular.dev/license -load("@npm//@angular/build-tooling/bazel/api-golden:index.bzl", "api_golden_test_npm_package") -load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") -load("//tools:defaults.bzl", "pkg_npm") -load("//tools:interop.bzl", "ts_project") +load("@devinfra//bazel/api-golden:index_rjs.bzl", "api_golden_test_npm_package") +load("@npm2//:defs.bzl", "npm_link_all_packages") +load("//tools:defaults2.bzl", "jasmine_test", "npm_package", "ts_project") load("//tools:ts_json_schema.bzl", "ts_json_schema") +package(default_visibility = ["//visibility:public"]) + licenses(["notice"]) -package(default_visibility = ["//visibility:public"]) +npm_link_all_packages() -# @external_begin ts_json_schema( name = "builder_input_schema", src = "src/input-schema.json", @@ -38,7 +38,14 @@ ts_json_schema( name = "operator_schema", src = "builders/operator-schema.json", ) -# @external_end + +JSON_FILES = glob( + include = ["**/*.json"], + exclude = [ + # NB: we need to exclude the nested node_modules that is laid out by yarn workspaces + "node_modules/**", + ], +) ts_project( name = "architect", @@ -57,21 +64,13 @@ ts_project( "//packages/angular_devkit/architect:src/progress-schema.ts", "//packages/angular_devkit/architect:builders/operator-schema.ts", ], - data = glob( - include = ["**/*.json"], - exclude = [ - # NB: we need to exclude the nested node_modules that is laid out by yarn workspaces - "node_modules/**", - ], - ), - interop_deps = [ - "//packages/angular_devkit/core", - "//packages/angular_devkit/core/node", - ], + # Ensure tests can execute the output JS, relying on schemas/JSON files. + data = JSON_FILES, module_name = "@angular-devkit/architect", deps = [ - "//:root_modules/@types/node", - "//:root_modules/rxjs", + ":node_modules/@angular-devkit/core", + "//:node_modules/@types/node", + "//:node_modules/rxjs", ], ) @@ -79,20 +78,19 @@ ts_project( name = "architect_test_lib", testonly = True, srcs = glob(["src/**/*_spec.ts"]), - interop_deps = [ - "//packages/angular_devkit/core", - ], deps = [ - ":architect_rjs", - "//:root_modules/@types/jasmine", - "//:root_modules/rxjs", - "//packages/angular_devkit/architect/testing:testing_rjs", + ":architect", + ":node_modules/@angular-devkit/core", + "//:node_modules/@types/jasmine", + "//:node_modules/@types/node", + "//:node_modules/rxjs", + "//packages/angular_devkit/architect/testing", ], ) -jasmine_node_test( +jasmine_test( name = "architect_test", - srcs = [":architect_test_lib"], + data = [":architect_test_lib"], ) # @external_begin @@ -103,14 +101,14 @@ genrule( cmd = "cp $(execpath //:LICENSE) $@", ) -pkg_npm( - name = "npm_package", +npm_package( + name = "pkg", pkg_deps = [ "//packages/angular_devkit/core:package.json", ], tags = ["release-package"], - deps = [ - ":README.md", + deps = JSON_FILES + [ + "README.md", ":architect", ":license", "//packages/angular_devkit/architect/node", @@ -124,7 +122,7 @@ api_golden_test_npm_package( ":npm_package", "//goldens:public-api", ], - golden_dir = "angular_cli/goldens/public-api/angular_devkit/architect", - npm_package = "angular_cli/packages/angular_devkit/architect/npm_package", + golden_dir = "goldens/public-api/angular_devkit/architect", + npm_package = "packages/angular_devkit/architect/npm_package", ) # @external_end diff --git a/packages/angular_devkit/architect/node/BUILD.bazel b/packages/angular_devkit/architect/node/BUILD.bazel index 1dcb60002064..2dbbc9a7c3b4 100644 --- a/packages/angular_devkit/architect/node/BUILD.bazel +++ b/packages/angular_devkit/architect/node/BUILD.bazel @@ -3,8 +3,7 @@ # Use of this source code is governed by an MIT-style license that can be # found in the LICENSE file at https://angular.dev/license -load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") -load("//tools:interop.bzl", "ts_project") +load("//tools:defaults2.bzl", "jasmine_test", "ts_project") licenses(["notice"]) @@ -16,15 +15,12 @@ ts_project( include = ["**/*.ts"], exclude = ["**/*_spec.ts"], ), - interop_deps = [ - "//packages/angular_devkit/core", - "//packages/angular_devkit/core/node", - ], module_name = "@angular-devkit/architect/node", deps = [ - "//:root_modules/@types/node", - "//:root_modules/rxjs", - "//packages/angular_devkit/architect:architect_rjs", + "//:node_modules/@types/node", + "//:node_modules/rxjs", + "//packages/angular_devkit/architect", + "//packages/angular_devkit/architect:node_modules/@angular-devkit/core", ], ) @@ -36,18 +32,17 @@ ts_project( "**/*_spec.ts", ], ), - interop_deps = [ - "//tests/angular_devkit/architect/node/jobs:jobs_test_lib", - ], deps = [ - ":node_rjs", - "//:root_modules/@types/jasmine", - "//:root_modules/rxjs", - "//packages/angular_devkit/architect:architect_rjs", + ":node", + "//:node_modules/@types/jasmine", + "//:node_modules/@types/node", + "//:node_modules/rxjs", + "//packages/angular_devkit/architect", + "//packages/angular_devkit/architect/node/test:test_lib", ], ) -jasmine_node_test( +jasmine_test( name = "node_test", - srcs = [":node_test_lib"], + data = [":node_test_lib"], ) diff --git a/packages/angular_devkit/architect/node/jobs/job-registry.ts b/packages/angular_devkit/architect/node/jobs/job-registry.ts index 4ee9773ba4bf..9237a7238c96 100644 --- a/packages/angular_devkit/architect/node/jobs/job-registry.ts +++ b/packages/angular_devkit/architect/node/jobs/job-registry.ts @@ -6,9 +6,9 @@ * found in the LICENSE file at https://angular.dev/license */ -import { jobs } from '@angular-devkit/architect'; import { JsonValue, schema } from '@angular-devkit/core'; import { Observable, of } from 'rxjs'; +import { jobs } from '../../src'; export class NodeModuleJobRegistry< MinimumArgumentValueT extends JsonValue = JsonValue, diff --git a/packages/angular_devkit/architect/node/jobs/job-registry_spec.ts b/packages/angular_devkit/architect/node/jobs/job-registry_spec.ts index 6b386f36758f..adbf6c1e800f 100644 --- a/packages/angular_devkit/architect/node/jobs/job-registry_spec.ts +++ b/packages/angular_devkit/architect/node/jobs/job-registry_spec.ts @@ -6,12 +6,12 @@ * found in the LICENSE file at https://angular.dev/license */ -import { jobs } from '@angular-devkit/architect'; -import * as path from 'path'; +import * as path from 'node:path'; import { lastValueFrom } from 'rxjs'; +import { jobs } from '../../src'; import { NodeModuleJobRegistry } from './job-registry'; -const root = path.join(__dirname, '../../../../../tests/angular_devkit/architect/node/jobs'); +const root = path.join(__dirname, '../test/jobs'); describe('NodeModuleJobScheduler', () => { it('works', async () => { diff --git a/packages/angular_devkit/architect/node/node-modules-architect-host.ts b/packages/angular_devkit/architect/node/node-modules-architect-host.ts index 232b6503308e..e01394a22d04 100644 --- a/packages/angular_devkit/architect/node/node-modules-architect-host.ts +++ b/packages/angular_devkit/architect/node/node-modules-architect-host.ts @@ -90,7 +90,9 @@ export class WorkspaceNodeModulesArchitectHost implements ArchitectHost<NodeModu } if (!targetDefinition.configurations?.[configuration]) { - throw new Error(`Configuration '${configuration}' is not set in the workspace.`); + throw new Error( + `Configuration '${configuration}' for target '${target}' in project '${project}' is not set in the workspace.`, + ); } return (targetDefinition.configurations?.[configuration] ?? {}) as json.JsonObject; diff --git a/packages/angular_devkit/architect/node/test/BUILD.bazel b/packages/angular_devkit/architect/node/test/BUILD.bazel new file mode 100644 index 000000000000..be851fe1832a --- /dev/null +++ b/packages/angular_devkit/architect/node/test/BUILD.bazel @@ -0,0 +1,11 @@ +load("//tools:interop.bzl", "ts_project") + +ts_project( + name = "test_lib", + srcs = glob(["**/*.ts"]), + visibility = ["//packages/angular_devkit/architect/node:__pkg__"], + deps = [ + "//:node_modules/@types/node", + "//packages/angular_devkit/architect", + ], +) diff --git a/tests/angular_devkit/architect/node/jobs/add.ts b/packages/angular_devkit/architect/node/test/jobs/add.ts similarity index 90% rename from tests/angular_devkit/architect/node/jobs/add.ts rename to packages/angular_devkit/architect/node/test/jobs/add.ts index bcf6b781b190..9760f04c6a01 100644 --- a/tests/angular_devkit/architect/node/jobs/add.ts +++ b/packages/angular_devkit/architect/node/test/jobs/add.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { jobs } from '@angular-devkit/architect'; +import { jobs } from '../../../index'; // Export the job using a createJob. We use our own spec file here to do the job. export default jobs.createJobHandler<number[], null, number>( diff --git a/packages/angular_devkit/architect/package.json b/packages/angular_devkit/architect/package.json index 180978f51d38..fa291726b2c2 100644 --- a/packages/angular_devkit/architect/package.json +++ b/packages/angular_devkit/architect/package.json @@ -6,7 +6,7 @@ "main": "src/index.js", "typings": "src/index.d.ts", "dependencies": { - "@angular-devkit/core": "0.0.0-PLACEHOLDER", + "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", "rxjs": "7.8.1" }, "builders": "./builders/builders.json" diff --git a/packages/angular_devkit/architect/src/create-builder.ts b/packages/angular_devkit/architect/src/create-builder.ts index c98cae63c3f2..d2fc8cfba5eb 100644 --- a/packages/angular_devkit/architect/src/create-builder.ts +++ b/packages/angular_devkit/architect/src/create-builder.ts @@ -37,6 +37,8 @@ import { Builder, BuilderSymbol, BuilderVersionSymbol } from './internal'; import { JobInboundMessageKind, createJobHandler } from './jobs'; import { scheduleByName, scheduleByTarget } from './schedule-by-name'; +export type { Builder }; + // eslint-disable-next-line max-lines-per-function export function createBuilder<OptT = json.JsonObject, OutT extends BuilderOutput = BuilderOutput>( fn: BuilderHandlerFn<OptT>, @@ -252,6 +254,9 @@ export function createBuilder<OptT = json.JsonObject, OutT extends BuilderOutput handler, [BuilderSymbol]: true, [BuilderVersionSymbol]: require('../package.json').version, + // Only needed for type safety around `Builder` types. + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + __OptionT: null!, }; } diff --git a/packages/angular_devkit/architect/src/index.ts b/packages/angular_devkit/architect/src/index.ts index 307a639f5e70..7e3abcfff0b1 100644 --- a/packages/angular_devkit/architect/src/index.ts +++ b/packages/angular_devkit/architect/src/index.ts @@ -10,6 +10,6 @@ import * as jobs from './jobs'; export * from './api'; export { Architect, type ScheduleOptions } from './architect'; -export { createBuilder } from './create-builder'; +export { createBuilder, type Builder } from './create-builder'; export { jobs }; diff --git a/packages/angular_devkit/architect/src/index_spec.ts b/packages/angular_devkit/architect/src/index_spec.ts index eccc760c744b..50d599b30dac 100644 --- a/packages/angular_devkit/architect/src/index_spec.ts +++ b/packages/angular_devkit/architect/src/index_spec.ts @@ -7,8 +7,8 @@ */ import { json, logging, schema } from '@angular-devkit/core'; +import { promisify } from 'node:util'; import { firstValueFrom, lastValueFrom, map, take, tap, timer, toArray } from 'rxjs'; -import { promisify } from 'util'; import { TestingArchitectHost } from '../testing/testing-architect-host'; import { BuilderOutput, BuilderRun } from './api'; import { Architect } from './architect'; diff --git a/packages/angular_devkit/architect/src/internal.ts b/packages/angular_devkit/architect/src/internal.ts index 6cbb42d5d809..8f8154a0bc4d 100644 --- a/packages/angular_devkit/architect/src/internal.ts +++ b/packages/angular_devkit/architect/src/internal.ts @@ -57,6 +57,7 @@ export interface Builder<OptionT extends json.JsonObject = json.JsonObject> { // Metadata associated with this builder. [BuilderSymbol]: true; [BuilderVersionSymbol]: string; + __OptionT: OptionT; } export interface ArchitectHost<BuilderInfoT extends BuilderInfo = BuilderInfo> { diff --git a/packages/angular_devkit/architect/src/jobs/simple-scheduler_spec.ts b/packages/angular_devkit/architect/src/jobs/simple-scheduler_spec.ts index 1c184e6d68b8..a4b1ee75a922 100644 --- a/packages/angular_devkit/architect/src/jobs/simple-scheduler_spec.ts +++ b/packages/angular_devkit/architect/src/jobs/simple-scheduler_spec.ts @@ -7,8 +7,8 @@ */ /* eslint-disable @typescript-eslint/no-non-null-assertion */ +import { promisify } from 'node:util'; import { EMPTY, Observable, lastValueFrom, map, of, take, timer, toArray } from 'rxjs'; -import { promisify } from 'util'; import { JobHandlerContext, JobOutboundMessage, JobOutboundMessageKind, JobState } from './api'; import { createJobHandler } from './create-job-handler'; import { SimpleJobRegistry } from './simple-registry'; diff --git a/packages/angular_devkit/architect/src/jobs/strategy_spec.ts b/packages/angular_devkit/architect/src/jobs/strategy_spec.ts index 4f6ae44b60c1..c73d5dcd8b4a 100644 --- a/packages/angular_devkit/architect/src/jobs/strategy_spec.ts +++ b/packages/angular_devkit/architect/src/jobs/strategy_spec.ts @@ -6,14 +6,14 @@ * found in the LICENSE file at https://angular.dev/license */ -import { promisify } from 'util'; +import timers from 'node:timers/promises'; import { JobState } from './api'; import { createJobHandler } from './create-job-handler'; import { SimpleJobRegistry } from './simple-registry'; import { SimpleScheduler } from './simple-scheduler'; import * as strategy from './strategy'; -const flush = promisify(setImmediate); +const flush = () => timers.setTimeout(1); describe('strategy.serialize()', () => { let registry: SimpleJobRegistry; @@ -37,7 +37,7 @@ describe('strategy.serialize()', () => { setTimeout(() => { finished++; resolve(input.reduce((a, c) => a + c, 0)); - }, 10), + }, 100), ); // eslint-disable-next-line @typescript-eslint/no-explicit-any }) as any, @@ -94,7 +94,7 @@ describe('strategy.serialize()', () => { setTimeout(() => { finished++; resolve(input.reduce((a, c) => a + c, 0)); - }, 10), + }, 100), ); // eslint-disable-next-line @typescript-eslint/no-explicit-any }) as any, @@ -114,7 +114,7 @@ describe('strategy.serialize()', () => { setTimeout(() => { finished++; resolve(input.reduce((a, c) => a + c, 100)); - }, 10), + }, 100), ); // eslint-disable-next-line @typescript-eslint/no-explicit-any }) as any, @@ -179,7 +179,7 @@ describe('strategy.reuse()', () => { setTimeout(() => { finished++; resolve(input.reduce((a, c) => a + c, 0)); - }, 10), + }, 100), ); // eslint-disable-next-line @typescript-eslint/no-explicit-any }) as any, @@ -254,7 +254,7 @@ describe('strategy.memoize()', () => { setTimeout(() => { finished++; resolve(input.reduce((a, c) => a + c, 0)); - }, 10), + }, 100), ); // eslint-disable-next-line @typescript-eslint/no-explicit-any }) as any, diff --git a/packages/angular_devkit/architect/testing/BUILD.bazel b/packages/angular_devkit/architect/testing/BUILD.bazel index aae4a586f472..505337c1248e 100644 --- a/packages/angular_devkit/architect/testing/BUILD.bazel +++ b/packages/angular_devkit/architect/testing/BUILD.bazel @@ -15,14 +15,14 @@ ts_project( include = ["**/*.ts"], exclude = ["**/*_spec.ts"], ), - interop_deps = [ - "//packages/angular_devkit/architect", - "//packages/angular_devkit/core", - "//packages/angular_devkit/core/node", - ], + # TODO: Fix strict_deps failure + ignore_strict_deps = True, module_name = "@angular-devkit/architect/testing", deps = [ - "//:root_modules/@types/node", - "//:root_modules/rxjs", + "//:node_modules/@types/node", + "//:node_modules/rxjs", + "//packages/angular_devkit/architect:architect", + "//packages/angular_devkit/core:core", + "//packages/angular_devkit/core/node:node", ], ) diff --git a/packages/angular_devkit/architect/testing/test-project-host.ts b/packages/angular_devkit/architect/testing/test-project-host.ts index 0f0f91bf174c..ca7aa4fc84be 100644 --- a/packages/angular_devkit/architect/testing/test-project-host.ts +++ b/packages/angular_devkit/architect/testing/test-project-host.ts @@ -17,7 +17,7 @@ import { virtualFs, } from '@angular-devkit/core'; import { NodeJsSyncHost } from '@angular-devkit/core/node'; -import { Stats } from 'fs'; +import { Stats } from 'node:fs'; import { EMPTY, Observable, diff --git a/packages/angular_devkit/architect_cli/BUILD.bazel b/packages/angular_devkit/architect_cli/BUILD.bazel index f5894c1c9ef9..4a8283ec9a26 100644 --- a/packages/angular_devkit/architect_cli/BUILD.bazel +++ b/packages/angular_devkit/architect_cli/BUILD.bazel @@ -1,5 +1,5 @@ -load("//tools:defaults.bzl", "pkg_npm") -load("//tools:interop.bzl", "ts_project") +load("@npm2//:defs.bzl", "npm_link_all_packages") +load("//tools:defaults2.bzl", "npm_package", "ts_project") # Copyright Google Inc. All Rights Reserved. # @@ -9,23 +9,23 @@ licenses(["notice"]) package(default_visibility = ["//visibility:public"]) +npm_link_all_packages() + ts_project( name = "architect_cli", srcs = [ "bin/architect.ts", ] + glob(["src/**/*.ts"]), - interop_deps = [ - "//packages/angular_devkit/core", - "//packages/angular_devkit/core/node", - ], module_name = "@angular-devkit/architect-cli", deps = [ - "//:root_modules/@types/node", - "//:root_modules/@types/progress", - "//:root_modules/@types/yargs-parser", - "//:root_modules/ansi-colors", - "//packages/angular_devkit/architect:architect_rjs", - "//packages/angular_devkit/architect/node:node_rjs", + ":node_modules/@angular-devkit/architect", + ":node_modules/@angular-devkit/core", + ":node_modules/progress", + "//:node_modules/@types/node", + "//:node_modules/@types/progress", + "//:node_modules/@types/yargs-parser", + "//:node_modules/ansi-colors", + "//:node_modules/yargs-parser", ], ) @@ -36,8 +36,8 @@ genrule( cmd = "cp $(execpath //:LICENSE) $@", ) -pkg_npm( - name = "npm_package", +npm_package( + name = "pkg", pkg_deps = [ "//packages/angular_devkit/architect:package.json", "//packages/angular_devkit/core:package.json", diff --git a/packages/angular_devkit/architect_cli/bin/architect.ts b/packages/angular_devkit/architect_cli/bin/architect.ts index df19527e84ff..8cba7b4c11a7 100644 --- a/packages/angular_devkit/architect_cli/bin/architect.ts +++ b/packages/angular_devkit/architect_cli/bin/architect.ts @@ -12,8 +12,8 @@ import { WorkspaceNodeModulesArchitectHost } from '@angular-devkit/architect/nod import { JsonValue, json, logging, schema, tags, workspaces } from '@angular-devkit/core'; import { NodeJsSyncHost, createConsoleLogger } from '@angular-devkit/core/node'; import * as ansiColors from 'ansi-colors'; -import { existsSync } from 'fs'; -import * as path from 'path'; +import { existsSync } from 'node:fs'; +import * as path from 'node:path'; import yargsParser, { camelCase, decamelize } from 'yargs-parser'; import { MultiProgressBar } from '../src/progress'; diff --git a/packages/angular_devkit/architect_cli/package.json b/packages/angular_devkit/architect_cli/package.json index a468830ff5c0..c7ae69c92df6 100644 --- a/packages/angular_devkit/architect_cli/package.json +++ b/packages/angular_devkit/architect_cli/package.json @@ -14,8 +14,8 @@ "tooling" ], "dependencies": { - "@angular-devkit/architect": "0.0.0-EXPERIMENTAL-PLACEHOLDER", - "@angular-devkit/core": "0.0.0-PLACEHOLDER", + "@angular-devkit/architect": "workspace:0.0.0-EXPERIMENTAL-PLACEHOLDER", + "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", "ansi-colors": "4.1.3", "progress": "2.0.3", "symbol-observable": "4.0.0", diff --git a/packages/angular_devkit/architect_cli/src/progress.ts b/packages/angular_devkit/architect_cli/src/progress.ts index ba3f4a0d56f0..e8c74353eb4b 100644 --- a/packages/angular_devkit/architect_cli/src/progress.ts +++ b/packages/angular_devkit/architect_cli/src/progress.ts @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ +import * as readline from 'node:readline'; import ProgressBar from 'progress'; -import * as readline from 'readline'; export class MultiProgressBar<Key, T> { private _bars = new Map<Key, { data: T; bar: ProgressBar }>(); diff --git a/packages/angular_devkit/build_angular/BUILD.bazel b/packages/angular_devkit/build_angular/BUILD.bazel index 04adc5af89be..f7cce221ce6e 100644 --- a/packages/angular_devkit/build_angular/BUILD.bazel +++ b/packages/angular_devkit/build_angular/BUILD.bazel @@ -3,16 +3,17 @@ # Use of this source code is governed by an MIT-style license that can be # found in the LICENSE file at https://angular.dev/license -load("@npm//@angular/build-tooling/bazel/api-golden:index.bzl", "api_golden_test_npm_package") -load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") -load("//tools:defaults.bzl", "pkg_npm") -load("//tools:interop.bzl", "ts_project") +load("@devinfra//bazel/api-golden:index_rjs.bzl", "api_golden_test_npm_package") +load("@npm2//:defs.bzl", "npm_link_all_packages") +load("//tools:defaults2.bzl", "copy_to_bin", "jasmine_test", "npm_package", "ts_project") load("//tools:ts_json_schema.bzl", "ts_json_schema") licenses(["notice"]) package(default_visibility = ["//visibility:public"]) +npm_link_all_packages() + ts_json_schema( name = "app_shell_schema", src = "src/builders/app-shell/schema.json", @@ -78,6 +79,23 @@ ts_json_schema( src = "src/builders/web-test-runner/schema.json", ) +copy_to_bin( + name = "schemas", + srcs = glob(["**/schema.json"]), +) + +RUNTIME_ASSETS = glob( + include = [ + "src/**/schema.json", + "src/**/*.js", + "src/**/*.mjs", + "src/**/*.html", + ], +) + [ + "builders.json", + "package.json", +] + ts_project( name = "build_angular", srcs = glob( @@ -108,100 +126,88 @@ ts_project( "//packages/angular_devkit/build_angular:src/builders/ssr-dev-server/schema.ts", "//packages/angular_devkit/build_angular:src/builders/web-test-runner/schema.ts", ], - data = glob( - include = [ - "src/**/schema.json", - "src/**/*.js", - "src/**/*.mjs", - "src/**/*.html", - ], - ) + [ - "builders.json", - "package.json", - ], - interop_deps = [ - "//packages/angular/ssr", - "//packages/angular_devkit/build_webpack", - "//packages/angular_devkit/core", - "//packages/angular_devkit/core/node", - "//packages/ngtools/webpack", - ], + data = RUNTIME_ASSETS, + # TODO: Fix strict_deps failure + ignore_strict_deps = True, module_name = "@angular-devkit/build-angular", deps = [ - "//:root_modules/@ampproject/remapping", - "//:root_modules/@angular/common", - "//:root_modules/@angular/compiler-cli", - "//:root_modules/@angular/core", - "//:root_modules/@angular/localize", - "//:root_modules/@angular/platform-server", - "//:root_modules/@angular/service-worker", - "//:root_modules/@babel/core", - "//:root_modules/@babel/generator", - "//:root_modules/@babel/helper-annotate-as-pure", - "//:root_modules/@babel/helper-split-export-declaration", - "//:root_modules/@babel/plugin-transform-async-generator-functions", - "//:root_modules/@babel/plugin-transform-async-to-generator", - "//:root_modules/@babel/plugin-transform-runtime", - "//:root_modules/@babel/preset-env", - "//:root_modules/@babel/runtime", - "//:root_modules/@discoveryjs/json-ext", - "//:root_modules/@types/babel__core", - "//:root_modules/@types/babel__generator", - "//:root_modules/@types/browser-sync", - "//:root_modules/@types/karma", - "//:root_modules/@types/less", - "//:root_modules/@types/loader-utils", - "//:root_modules/@types/node", - "//:root_modules/@types/picomatch", - "//:root_modules/@types/semver", - "//:root_modules/@types/watchpack", - "//:root_modules/@vitejs/plugin-basic-ssl", - "//:root_modules/@web/test-runner", - "//:root_modules/ajv", - "//:root_modules/ansi-colors", - "//:root_modules/autoprefixer", - "//:root_modules/babel-loader", - "//:root_modules/browserslist", - "//:root_modules/copy-webpack-plugin", - "//:root_modules/css-loader", - "//:root_modules/esbuild", - "//:root_modules/esbuild-wasm", - "//:root_modules/fast-glob", - "//:root_modules/http-proxy-middleware", - "//:root_modules/istanbul-lib-instrument", - "//:root_modules/jsonc-parser", - "//:root_modules/karma", - "//:root_modules/karma-source-map-support", - "//:root_modules/less", - "//:root_modules/less-loader", - "//:root_modules/license-webpack-plugin", - "//:root_modules/loader-utils", - "//:root_modules/mini-css-extract-plugin", - "//:root_modules/ng-packagr", - "//:root_modules/open", - "//:root_modules/ora", - "//:root_modules/piscina", - "//:root_modules/postcss", - "//:root_modules/postcss-loader", - "//:root_modules/resolve-url-loader", - "//:root_modules/rxjs", - "//:root_modules/sass", - "//:root_modules/sass-loader", - "//:root_modules/semver", - "//:root_modules/source-map-loader", - "//:root_modules/source-map-support", - "//:root_modules/terser", - "//:root_modules/tree-kill", - "//:root_modules/tslib", - "//:root_modules/typescript", - "//:root_modules/webpack", - "//:root_modules/webpack-dev-middleware", - "//:root_modules/webpack-dev-server", - "//:root_modules/webpack-merge", - "//:root_modules/webpack-subresource-integrity", - "//packages/angular/build:build_rjs", - "//packages/angular/build/private:private_rjs", - "//packages/angular_devkit/architect", + ":node_modules/@angular-devkit/architect", + ":node_modules/@angular-devkit/build-webpack", + ":node_modules/@angular-devkit/core", + ":node_modules/@angular/build", + ":node_modules/@angular/ssr", + ":node_modules/@ngtools/webpack", + ":node_modules/@vitejs/plugin-basic-ssl", + "//:node_modules/@ampproject/remapping", + "//:node_modules/@angular/common", + "//:node_modules/@angular/compiler-cli", + "//:node_modules/@angular/core", + "//:node_modules/@angular/localize", + "//:node_modules/@angular/platform-server", + "//:node_modules/@angular/service-worker", + "//:node_modules/@babel/core", + "//:node_modules/@babel/generator", + "//:node_modules/@babel/helper-annotate-as-pure", + "//:node_modules/@babel/helper-split-export-declaration", + "//:node_modules/@babel/plugin-transform-async-generator-functions", + "//:node_modules/@babel/plugin-transform-async-to-generator", + "//:node_modules/@babel/plugin-transform-runtime", + "//:node_modules/@babel/preset-env", + "//:node_modules/@babel/runtime", + "//:node_modules/@discoveryjs/json-ext", + "//:node_modules/@types/babel__core", + "//:node_modules/@types/babel__generator", + "//:node_modules/@types/browser-sync", + "//:node_modules/@types/karma", + "//:node_modules/@types/less", + "//:node_modules/@types/loader-utils", + "//:node_modules/@types/node", + "//:node_modules/@types/picomatch", + "//:node_modules/@types/semver", + "//:node_modules/@types/watchpack", + "//:node_modules/@web/test-runner", + "//:node_modules/ajv", + "//:node_modules/ansi-colors", + "//:node_modules/autoprefixer", + "//:node_modules/babel-loader", + "//:node_modules/browserslist", + "//:node_modules/copy-webpack-plugin", + "//:node_modules/css-loader", + "//:node_modules/esbuild", + "//:node_modules/esbuild-wasm", + "//:node_modules/fast-glob", + "//:node_modules/http-proxy-middleware", + "//:node_modules/istanbul-lib-instrument", + "//:node_modules/jsonc-parser", + "//:node_modules/karma", + "//:node_modules/karma-source-map-support", + "//:node_modules/less", + "//:node_modules/less-loader", + "//:node_modules/license-webpack-plugin", + "//:node_modules/loader-utils", + "//:node_modules/mini-css-extract-plugin", + "//:node_modules/ng-packagr", + "//:node_modules/open", + "//:node_modules/ora", + "//:node_modules/piscina", + "//:node_modules/postcss", + "//:node_modules/postcss-loader", + "//:node_modules/resolve-url-loader", + "//:node_modules/rxjs", + "//:node_modules/sass", + "//:node_modules/sass-loader", + "//:node_modules/semver", + "//:node_modules/source-map-loader", + "//:node_modules/source-map-support", + "//:node_modules/terser", + "//:node_modules/tree-kill", + "//:node_modules/tslib", + "//:node_modules/typescript", + "//:node_modules/webpack", + "//:node_modules/webpack-dev-middleware", + "//:node_modules/webpack-dev-server", + "//:node_modules/webpack-merge", + "//:node_modules/webpack-subresource-integrity", ], ) @@ -216,24 +222,26 @@ ts_project( "src/builders/**/*_spec.ts", ], ), - data = glob(["test/**/*"]), - interop_deps = [ - "//packages/angular_devkit/core", + data = [ + "//packages/angular_devkit/build_angular/test/hello-world-lib", ], + # TODO: Fix strict_deps failure + ignore_strict_deps = True, deps = [ - ":build_angular_rjs", - ":build_angular_test_utils_rjs", - "//:root_modules/fast-glob", - "//:root_modules/prettier", - "//:root_modules/typescript", - "//:root_modules/webpack", - "//packages/angular_devkit/architect/testing:testing_rjs", + ":build_angular", + ":build_angular_test_utils", + "//:node_modules/fast-glob", + "//:node_modules/prettier", + "//:node_modules/typescript", + "//:node_modules/webpack", + "//packages/angular_devkit/architect/testing", + "//packages/angular_devkit/core", ], ) -jasmine_node_test( +jasmine_test( name = "build_angular_test", - srcs = [":build_angular_test_lib"], + data = [":build_angular_test_lib"], ) genrule( @@ -243,8 +251,8 @@ genrule( cmd = "cp $(execpath //:LICENSE) $@", ) -pkg_npm( - name = "npm_package", +npm_package( + name = "pkg", pkg_deps = [ "//packages/angular/build:package.json", "//packages/angular_devkit/architect:package.json", @@ -252,8 +260,11 @@ pkg_npm( "//packages/angular_devkit/core:package.json", "//packages/ngtools/webpack:package.json", ], + stamp_files = [ + "src/utils/normalize-cache.js", + ], tags = ["release-package"], - deps = [ + deps = RUNTIME_ASSETS + [ ":README.md", ":build_angular", ":license", @@ -266,8 +277,8 @@ api_golden_test_npm_package( ":npm_package", "//goldens:public-api", ], - golden_dir = "angular_cli/goldens/public-api/angular_devkit/build_angular", - npm_package = "angular_cli/packages/angular_devkit/build_angular/npm_package", + golden_dir = "goldens/public-api/angular_devkit/build_angular", + npm_package = "packages/angular_devkit/build_angular/npm_package", ) # Large build_angular specs @@ -284,61 +295,72 @@ ts_project( "src/**/*_spec.ts", ], ), - data = glob(["test/**/*"]), - interop_deps = [ - "//modules/testing/builder", - "//packages/angular_devkit/core", - "//packages/angular_devkit/core/node", + data = [ + "//packages/angular_devkit/build_angular/test/hello-world-lib", ], + # TODO: Fix strict_deps failure + ignore_strict_deps = True, deps = [ - ":build_angular_rjs", - "//:root_modules/@types/jasmine", - "//packages/angular/build:build_rjs", - "//packages/angular/build/private:private_rjs", - "//packages/angular_devkit/architect:architect_rjs", - "//packages/angular_devkit/architect/node:node_rjs", - "//packages/angular_devkit/architect/testing:testing_rjs", - "@npm//rxjs", + ":build_angular", + "//:node_modules/@types/jasmine", + "//modules/testing/builder:builder", + "//packages/angular/build:build", + "//packages/angular/build/private:private", + "//packages/angular_devkit/architect:architect", + "//packages/angular_devkit/architect/node:node", + "//packages/angular_devkit/architect/testing:testing", + "//packages/angular_devkit/core:core", + "//packages/angular_devkit/core/node:node", ], ) LARGE_SPECS = { - "app-shell": {}, + "app-shell": { + # TODO: Fix strict_deps failure + "ignore_strict_deps": True, + }, "dev-server": { + # TODO: Fix strict_deps failure + "ignore_strict_deps": True, "shards": 10, "size": "large", "flaky": True, - "extra_interop_deps": [ - "//packages/angular_devkit/build_webpack", - ], "extra_deps": [ - "//:root_modules/@types/http-proxy", - "//:root_modules/http-proxy", - "//:root_modules/puppeteer", - "//:root_modules/undici", + "//packages/angular_devkit/build_webpack:build_webpack", + "//:node_modules/@types/http-proxy", + "//:node_modules/http-proxy", + "//:node_modules/puppeteer", + "//:node_modules/undici", ], }, - "extract-i18n": {}, + "extract-i18n": { + # TODO: Fix strict_deps failure + "ignore_strict_deps": True, + }, "karma": { + # TODO: Fix strict_deps failure + "ignore_strict_deps": True, "shards": 6, "size": "large", "flaky": True, "extra_deps": [ - "//:root_modules/karma", - "//:root_modules/karma-chrome-launcher", - "//:root_modules/karma-coverage", - "//:root_modules/karma-jasmine", - "//:root_modules/karma-jasmine-html-reporter", - "//:root_modules/puppeteer", - "//:root_modules/webpack", + "//:node_modules/karma", + "//:node_modules/karma-chrome-launcher", + "//:node_modules/karma-coverage", + "//:node_modules/karma-jasmine", + "//:node_modules/karma-jasmine-html-reporter", + "//:node_modules/puppeteer", + "//:node_modules/webpack", ], }, "protractor": { + # TODO: Fix strict_deps failure + "ignore_strict_deps": True, "extra_deps": [ - "//:root_modules/jasmine-spec-reporter", - "//:root_modules/protractor", - "//:root_modules/puppeteer", - "//:root_modules/ts-node", + "//:node_modules/jasmine-spec-reporter", + "//:node_modules/protractor", + "//:node_modules/puppeteer", + "//:node_modules/ts-node", ], # NB: does not run on rbe because webdriver manager uses an absolute path to chromedriver "tags": ["no-remote-exec"], @@ -346,32 +368,42 @@ LARGE_SPECS = { "shards": 1, }, "server": { + # TODO: Fix strict_deps failure + "ignore_strict_deps": True, "size": "large", "extra_deps": [ - "//:root_modules/@angular/animations", + "//:node_modules/@angular/animations", ], }, - "ng-packagr": {}, + "ng-packagr": { + # TODO: Fix strict_deps failure + "ignore_strict_deps": True, + }, "browser": { + # TODO: Fix strict_deps failure + "ignore_strict_deps": True, "shards": 10, "size": "large", "flaky": True, "extra_deps": [ - "//:root_modules/@angular/animations", - "//:root_modules/@angular/material", + "//:node_modules/@angular/animations", + "//:node_modules/@angular/material", ], }, - "prerender": {}, + "prerender": { + # TODO: Fix strict_deps failure + "ignore_strict_deps": True, + }, "browser-esbuild": {}, "ssr-dev-server": { - "extra_interop_deps": [ - "//packages/angular/ssr/node", - ], + # TODO: Fix strict_deps failure + "ignore_strict_deps": True, "extra_deps": [ - "//:root_modules/@types/browser-sync", - "//:root_modules/browser-sync", - "//:root_modules/express", - "//:root_modules/undici", + "//packages/angular/ssr/node:node", + "//:node_modules/@types/browser-sync", + "//:node_modules/browser-sync", + "//:node_modules/express", + "//:node_modules/undici", ], }, } @@ -381,45 +413,55 @@ LARGE_SPECS = { name = "build_angular_" + spec + "_test_lib", testonly = True, srcs = glob(["src/builders/" + spec + "/**/*_spec.ts"]), - interop_deps = [ - # Dependencies needed to compile and run the specs themselves. - "//packages/angular_devkit/core", - "//packages/angular_devkit/core/node", - "//modules/testing/builder", - ] + LARGE_SPECS[spec].get("extra_interop_deps", []), + ignore_strict_deps = LARGE_SPECS[spec].get("ignore_strict_deps", False), deps = [ # Dependencies needed to compile and run the specs themselves. - ":build_angular_rjs", - ":build_angular_test_utils_rjs", - "//packages/angular/build:build_rjs", - "//packages/angular/build/private:private_rjs", - "//packages/angular_devkit/architect:architect_rjs", - "//packages/angular_devkit/architect/node:node_rjs", - "//packages/angular_devkit/architect/testing:testing_rjs", + ":build_angular", + "//packages/angular_devkit/core:core", + "//packages/angular_devkit/core/node:node", + "//modules/testing/builder:builder", + ":build_angular_test_utils", + "//packages/angular/build:build", + "//packages/angular/build/private:private", + "//packages/angular_devkit/architect:architect", + "//packages/angular_devkit/architect/node:node", + "//packages/angular_devkit/architect/testing:testing", # Base dependencies for the application in hello-world-app. # Some tests also require extra dependencies. - "//:root_modules/@angular/common", - "//:root_modules/@angular/compiler", - "//:root_modules/@angular/compiler-cli", - "//:root_modules/@angular/core", - "//:root_modules/@angular/platform-browser", - "//:root_modules/@angular/platform-browser-dynamic", - "//:root_modules/@angular/router", - "//:root_modules/rxjs", - "//:root_modules/tslib", - "//:root_modules/typescript", - "//:root_modules/zone.js", - "//:root_modules/@types/jasmine", + "//:node_modules/@angular/common", + "//:node_modules/@angular/compiler", + "//:node_modules/@angular/compiler-cli", + "//:node_modules/@angular/core", + "//:node_modules/@angular/platform-browser", + "//:node_modules/@angular/platform-browser-dynamic", + "//:node_modules/@angular/router", + "//:node_modules/rxjs", + "//:node_modules/tslib", + "//:node_modules/typescript", + "//:node_modules/zone.js", + "//:node_modules/@types/jasmine", ] + LARGE_SPECS[spec].get("extra_deps", []), ) for spec in LARGE_SPECS ] [ - jasmine_node_test( + jasmine_test( name = "build_angular_" + spec + "_test", size = LARGE_SPECS[spec].get("size", "medium"), + data = [ + ":build_angular_" + spec + "_test_lib", + # Helpers for `testing/builder` rely on the npm artifact, so we'll make + # sure it's available during this test. Notably that the package needs to + # available as a parent of `modules/testing/builder` for resolution to work! + "//modules/testing/builder:node_modules/@angular-devkit/build-angular", + ], + env = { + # TODO: Replace Puppeteer downloaded browsers with Bazel-managed browsers, + # or standardize to avoid complex configuration like this! + "PUPPETEER_DOWNLOAD_PATH": "../../../node_modules/puppeteer/downloads", + }, flaky = LARGE_SPECS[spec].get("flaky", False), shard_count = LARGE_SPECS[spec].get("shards", 2), # These tests are resource intensive and should not be over-parallized as they will @@ -428,7 +470,6 @@ LARGE_SPECS = { tags = [ "cpu:2", ] + LARGE_SPECS[spec].get("tags", []), - deps = [":build_angular_" + spec + "_test_lib"], ) for spec in LARGE_SPECS ] diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index a9132d5b1cb1..08d00860a29e 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -7,21 +7,21 @@ "builders": "builders.json", "dependencies": { "@ampproject/remapping": "2.3.0", - "@angular-devkit/architect": "0.0.0-EXPERIMENTAL-PLACEHOLDER", - "@angular-devkit/build-webpack": "0.0.0-EXPERIMENTAL-PLACEHOLDER", - "@angular-devkit/core": "0.0.0-PLACEHOLDER", - "@angular/build": "0.0.0-PLACEHOLDER", - "@babel/core": "7.26.0", - "@babel/generator": "7.26.3", + "@angular-devkit/architect": "workspace:0.0.0-EXPERIMENTAL-PLACEHOLDER", + "@angular-devkit/build-webpack": "workspace:0.0.0-EXPERIMENTAL-PLACEHOLDER", + "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", + "@angular/build": "workspace:0.0.0-PLACEHOLDER", + "@babel/core": "7.26.10", + "@babel/generator": "7.26.10", "@babel/helper-annotate-as-pure": "7.25.9", "@babel/helper-split-export-declaration": "7.24.7", - "@babel/plugin-transform-async-generator-functions": "7.25.9", + "@babel/plugin-transform-async-generator-functions": "7.26.8", "@babel/plugin-transform-async-to-generator": "7.25.9", - "@babel/plugin-transform-runtime": "7.25.9", - "@babel/preset-env": "7.26.0", - "@babel/runtime": "7.26.0", + "@babel/plugin-transform-runtime": "7.26.10", + "@babel/preset-env": "7.26.9", + "@babel/runtime": "7.26.10", "@discoveryjs/json-ext": "0.6.3", - "@ngtools/webpack": "0.0.0-PLACEHOLDER", + "@ngtools/webpack": "workspace:0.0.0-PLACEHOLDER", "@vitejs/plugin-basic-ssl": "1.2.0", "ansi-colors": "4.1.3", "autoprefixer": "10.4.20", @@ -29,13 +29,13 @@ "browserslist": "^4.21.5", "copy-webpack-plugin": "12.0.2", "css-loader": "7.1.2", - "esbuild-wasm": "0.24.2", + "esbuild-wasm": "0.25.1", "fast-glob": "3.3.3", "http-proxy-middleware": "3.0.3", "istanbul-lib-instrument": "6.0.3", "jsonc-parser": "3.3.1", "karma-source-map-support": "1.4.0", - "less": "4.2.1", + "less": "4.2.2", "less-loader": "12.2.0", "license-webpack-plugin": "4.0.2", "loader-utils": "3.3.1", @@ -44,45 +44,46 @@ "ora": "5.4.1", "picomatch": "4.0.2", "piscina": "4.8.0", - "postcss": "8.4.49", + "postcss": "8.5.2", "postcss-loader": "8.1.1", "resolve-url-loader": "5.0.0", "rxjs": "7.8.1", - "sass": "1.83.1", - "sass-loader": "16.0.4", - "semver": "7.6.3", + "sass": "1.85.0", + "sass-loader": "16.0.5", + "semver": "7.7.1", "source-map-loader": "5.0.0", "source-map-support": "0.5.21", - "terser": "5.37.0", + "terser": "5.39.0", "tree-kill": "1.2.2", "tslib": "2.8.1", - "webpack": "5.97.1", + "webpack": "5.98.0", "webpack-dev-middleware": "7.4.2", "webpack-dev-server": "5.2.0", "webpack-merge": "6.0.1", "webpack-subresource-integrity": "5.1.0" }, "optionalDependencies": { - "esbuild": "0.24.2" + "esbuild": "0.25.1" }, "devDependencies": { - "undici": "7.2.0" + "undici": "6.21.1", + "@angular/ssr": "workspace:*" }, "peerDependencies": { - "@angular/compiler-cli": "^19.0.0 || ^19.1.0-next.0", - "@angular/localize": "^19.0.0 || ^19.1.0-next.0", - "@angular/platform-server": "^19.0.0 || ^19.1.0-next.0", - "@angular/service-worker": "^19.0.0 || ^19.1.0-next.0", + "@angular/compiler-cli": "0.0.0-ANGULAR-FW-PEER-DEP", + "@angular/localize": "0.0.0-ANGULAR-FW-PEER-DEP", + "@angular/platform-server": "0.0.0-ANGULAR-FW-PEER-DEP", + "@angular/service-worker": "0.0.0-ANGULAR-FW-PEER-DEP", "@angular/ssr": "^0.0.0-PLACEHOLDER", - "@web/test-runner": "^0.19.0", + "@web/test-runner": "^0.20.0", "browser-sync": "^3.0.2", "jest": "^29.5.0", "jest-environment-jsdom": "^29.5.0", "karma": "^6.3.0", - "ng-packagr": "^19.0.0 || ^19.1.0-next.0", + "ng-packagr": "0.0.0-NG-PACKAGR-PEER-DEP", "protractor": "^7.0.0", - "tailwindcss": "^2.0.0 || ^3.0.0", - "typescript": ">=5.5 <5.8" + "tailwindcss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "typescript": ">=5.5 <5.9" }, "peerDependenciesMeta": { "@angular/localize": { diff --git a/packages/angular_devkit/build_angular/src/builders/app-shell/index.ts b/packages/angular_devkit/build_angular/src/builders/app-shell/index.ts index 7c9efe6a7441..1cdcd213c055 100644 --- a/packages/angular_devkit/build_angular/src/builders/app-shell/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/app-shell/index.ts @@ -14,8 +14,8 @@ import { targetFromTargetString, } from '@angular-devkit/architect'; import { JsonObject } from '@angular-devkit/core'; -import * as fs from 'fs'; -import * as path from 'path'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; import Piscina from 'piscina'; import { normalizeOptimization } from '../../utils'; import { assertIsError } from '../../utils/error'; diff --git a/packages/angular_devkit/build_angular/src/builders/browser/index.ts b/packages/angular_devkit/build_angular/src/builders/browser/index.ts index b3cba62e10c3..1052e2165587 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/index.ts @@ -20,8 +20,8 @@ import { import { BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/architect'; import { EmittedFiles, WebpackLoggingCallback, runWebpack } from '@angular-devkit/build-webpack'; import { imageDomains } from '@ngtools/webpack'; -import * as fs from 'fs'; -import * as path from 'path'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; import { Observable, concatMap, from, map, switchMap } from 'rxjs'; import webpack, { StatsCompilation } from 'webpack'; import { getCommonConfig, getStylesConfig } from '../../tools/webpack/configs'; diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/cross-origin_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/cross-origin_spec.ts index bfcf204dc7d1..8101c325b724 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/cross-origin_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/cross-origin_spec.ts @@ -7,10 +7,11 @@ */ import { Architect } from '@angular-devkit/architect'; -import { BrowserBuilderOutput, CrossOrigin } from '@angular-devkit/build-angular'; import { join, normalize, virtualFs } from '@angular-devkit/core'; import { lastValueFrom } from 'rxjs'; import { createArchitect, host } from '../../../testing/test-utils'; +import { BrowserBuilderOutput } from '../index'; +import { CrossOrigin } from '../schema'; describe('Browser Builder crossOrigin', () => { const targetSpec = { project: 'app', target: 'build' }; diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/lazy-module_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/lazy-module_spec.ts index d970f6ea1465..f280658ac6a6 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/lazy-module_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/lazy-module_spec.ts @@ -149,7 +149,12 @@ describe('Browser Builder lazy modules', () => { 'src/main.ts': `import('./one'); import('./two');`, }); - const { files } = await browserBuild(architect, host, target); + const { files } = await browserBuild(architect, host, target, { + // Preserve symlinks to reliably verify the chunk names. When symlinks + // would be dereferenced, the `@angular/common` file can originate from a + // less predictable path in e.g. node_modules/.pnpm/<...>`. + preserveSymlinks: true, + }); expect(files['src_one_ts.js']).toBeDefined(); expect(files['src_two_ts.js']).toBeDefined(); expect(files['default-node_modules_angular_common_fesm2022_http_mjs.js']).toBeDefined(); diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/output-path_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/output-path_spec.ts index 95e6753cb734..2d10b0afa2da 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/output-path_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/output-path_spec.ts @@ -8,7 +8,7 @@ import { Architect } from '@angular-devkit/architect'; import { getSystemPath, join, virtualFs } from '@angular-devkit/core'; -import * as fs from 'fs'; +import * as fs from 'node:fs'; import { browserBuild, createArchitect, host } from '../../../testing/test-utils'; describe('Browser Builder output path', () => { diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/source-map_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/source-map_spec.ts index ae2b02cb34bc..6acae8d40f16 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/source-map_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/source-map_spec.ts @@ -7,8 +7,8 @@ */ import { Architect } from '@angular-devkit/architect'; -import { OutputHashing } from '@angular-devkit/build-angular'; import { browserBuild, createArchitect, host } from '../../../testing/test-utils'; +import { OutputHashing } from '../schema'; describe('Browser Builder source map', () => { const target = { project: 'app', target: 'build' }; diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/styles_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/styles_spec.ts index 61b1cba0d132..1c1aaaee202a 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/styles_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/styles_spec.ts @@ -8,7 +8,7 @@ import { Architect } from '@angular-devkit/architect'; import { normalize, tags } from '@angular-devkit/core'; -import { dirname } from 'path'; +import { dirname } from 'node:path'; import { browserBuild, createArchitect, host } from '../../../testing/test-utils'; describe('Browser Builder styles', () => { diff --git a/packages/angular_devkit/build_angular/src/builders/browser/specs/vendor-source-map_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/specs/vendor-source-map_spec.ts index 50ebad61e302..e824b04d3406 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/specs/vendor-source-map_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/specs/vendor-source-map_spec.ts @@ -7,7 +7,7 @@ */ import { Architect } from '@angular-devkit/architect'; -import * as path from 'path'; +import * as path from 'node:path'; import { browserBuild, createArchitect, host } from '../../../testing/test-utils'; // Following the naming conventions from diff --git a/packages/angular_devkit/build_angular/src/builders/browser/tests/options/named-chunks_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/tests/options/named-chunks_spec.ts index d2521c71cd98..07d1ff5df2ab 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/tests/options/named-chunks_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/tests/options/named-chunks_spec.ts @@ -11,7 +11,7 @@ import { BASE_OPTIONS, BROWSER_BUILDER_INFO, describeBuilder } from '../setup'; const MAIN_OUTPUT = 'dist/main.js'; const NAMED_LAZY_OUTPUT = 'dist/src_lazy-module_ts.js'; -const UNNAMED_LAZY_OUTPUT = 'dist/358.js'; +const UNNAMED_LAZY_OUTPUT = 'dist/321.js'; describeBuilder(buildWebpackBrowser, BROWSER_BUILDER_INFO, (harness) => { describe('Option: "namedChunks"', () => { diff --git a/packages/angular_devkit/build_angular/src/builders/browser/tests/options/styles_spec.ts b/packages/angular_devkit/build_angular/src/builders/browser/tests/options/styles_spec.ts index 1718b6e5e194..343f024f403a 100644 --- a/packages/angular_devkit/build_angular/src/builders/browser/tests/options/styles_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/browser/tests/options/styles_spec.ts @@ -143,7 +143,7 @@ describeBuilder(buildWebpackBrowser, BROWSER_BUILDER_INFO, (harness) => { expect(result?.success).toBe(true); expect(logs).toContain( - jasmine.objectContaining({ message: jasmine.stringMatching(/styles\.css.+\d+ bytes/) }), + jasmine.objectContaining({ message: jasmine.stringMatching(/styles\.css.+\d+ kB/) }), ); }); }); @@ -410,7 +410,7 @@ describeBuilder(buildWebpackBrowser, BROWSER_BUILDER_INFO, (harness) => { expect(result?.success).toBe(true); expect(logs).toContain( - jasmine.objectContaining({ message: jasmine.stringMatching(/styles\.css.+\d+ bytes/) }), + jasmine.objectContaining({ message: jasmine.stringMatching(/styles\.css.+\d+ kB/) }), ); }); @@ -427,7 +427,7 @@ describeBuilder(buildWebpackBrowser, BROWSER_BUILDER_INFO, (harness) => { expect(result?.success).toBe(true); expect(logs).toContain( - jasmine.objectContaining({ message: jasmine.stringMatching(/extra\.css.+\d+ bytes/) }), + jasmine.objectContaining({ message: jasmine.stringMatching(/extra\.css.+\d+ kB/) }), ); }); }); diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/builder.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/builder.ts index 76f8e282e8e4..aa5b84f324aa 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/builder.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/builder.ts @@ -67,12 +67,6 @@ export function execute( ); } - if (options.allowedHosts?.length) { - context.logger.warn( - `The "allowedHosts" option will not be used because it is not supported by the "${builderName}" builder.`, - ); - } - if (options.publicHost) { context.logger.warn( `The "publicHost" option will not be used because it is not supported by the "${builderName}" builder.`, @@ -88,12 +82,22 @@ export function execute( // New build system defaults hmr option to the value of liveReload normalizedOptions.hmr ??= normalizedOptions.liveReload; + // New build system uses Vite's allowedHost option convention of true for disabling host checks + if (normalizedOptions.disableHostCheck) { + (normalizedOptions as unknown as { allowedHosts: true }).allowedHosts = true; + } else { + normalizedOptions.allowedHosts ??= []; + } + return defer(() => Promise.all([import('@angular/build/private'), import('../browser-esbuild')]), ).pipe( switchMap(([{ serveWithVite, buildApplicationInternal }, { convertBrowserOptions }]) => serveWithVite( - normalizedOptions as typeof normalizedOptions & { hmr: boolean }, + normalizedOptions as typeof normalizedOptions & { + hmr: boolean; + allowedHosts: true | string[]; + }, builderName, (options, context, codePlugins) => { return builderName === '@angular-devkit/build-angular:browser-esbuild' diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/schema.json b/packages/angular_devkit/build_angular/src/builders/dev-server/schema.json index a1001107f86f..495f244b1722 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/schema.json +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/schema.json @@ -67,7 +67,7 @@ }, "allowedHosts": { "type": "array", - "description": "List of hosts that are allowed to access the dev server. This option has no effect when using the 'application' or other esbuild-based builders.", + "description": "List of hosts that are allowed to access the dev server.", "default": [], "items": { "type": "string" @@ -79,7 +79,7 @@ }, "disableHostCheck": { "type": "boolean", - "description": "Don't verify connected clients are part of allowed hosts. This option has no effect when using the 'application' or other esbuild-based builders.", + "description": "Don't verify connected clients are part of allowed hosts.", "default": false }, "hmr": { @@ -108,7 +108,7 @@ }, "forceEsbuild": { "type": "boolean", - "description": "Force the development server to use the 'browser-esbuild' builder when building. This is a developer preview option for the esbuild-based build system.", + "description": "Force the development server to use the 'browser-esbuild' builder when building.", "default": false }, "prebundle": { diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/specs/index_spec.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/specs/index_spec.ts index 2c7d63cf10e7..cfcc01980f78 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/specs/index_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/specs/index_spec.ts @@ -6,9 +6,9 @@ * found in the LICENSE file at https://angular.dev/license */ -import { DevServerBuilderOutput } from '@angular-devkit/build-angular'; import { workspaces } from '@angular-devkit/core'; import { createArchitect, host } from '../../../testing/test-utils'; +import { DevServerBuilderOutput } from '../index'; describe('Dev Server Builder index', () => { const targetSpec = { project: 'app', target: 'serve' }; diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/specs/ssl_spec.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/specs/ssl_spec.ts index 508c0563ac33..1f41eba74279 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/specs/ssl_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/specs/ssl_spec.ts @@ -7,10 +7,10 @@ */ import { Architect, BuilderRun } from '@angular-devkit/architect'; -import { DevServerBuilderOutput } from '@angular-devkit/build-angular'; import { tags } from '@angular-devkit/core'; import { Agent, getGlobalDispatcher, setGlobalDispatcher } from 'undici'; import { createArchitect, host } from '../../../testing/test-utils'; +import { DevServerBuilderOutput } from '../index'; describe('Dev Server Builder ssl', () => { const target = { project: 'app', target: 'serve' }; diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/specs/works_spec.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/specs/works_spec.ts index bec1ad2c1503..e0a442ca38ae 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/specs/works_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/specs/works_spec.ts @@ -7,10 +7,10 @@ */ import { Architect, BuilderRun } from '@angular-devkit/architect'; -import { DevServerBuilderOutput } from '@angular-devkit/build-angular'; import { EmittedFiles } from '@angular-devkit/build-webpack'; import { normalize, virtualFs } from '@angular-devkit/core'; import { createArchitect, host } from '../../../testing/test-utils'; +import { DevServerBuilderOutput } from '../index'; describe('Dev Server Builder', () => { const target = { project: 'app', target: 'serve' }; diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/build_localize_replaced_watch_spec.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/build_localize_replaced_watch_spec.ts index 36906f1358e3..cc68d0d7a189 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/build_localize_replaced_watch_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/build_localize_replaced_watch_spec.ts @@ -8,7 +8,7 @@ /* eslint-disable max-len */ import { concatMap, count, take, timeout } from 'rxjs'; -import { URL } from 'url'; +import { URL } from 'node:url'; import { executeDevServer } from '../../index'; import { describeServeBuilder } from '../jasmine-helpers'; import { BASE_OPTIONS, BUILD_TIMEOUT, DEV_SERVER_BUILDER_INFO } from '../setup'; diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/build_translation_watch_spec.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/build_translation_watch_spec.ts index 7b6e185ec18f..00c652449db2 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/build_translation_watch_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/build_translation_watch_spec.ts @@ -8,7 +8,7 @@ /* eslint-disable max-len */ import { concatMap, count, take, timeout } from 'rxjs'; -import { URL } from 'url'; +import { URL } from 'node:url'; import { executeDevServer } from '../../index'; import { describeServeBuilder } from '../jasmine-helpers'; import { BASE_OPTIONS, BUILD_TIMEOUT, DEV_SERVER_BUILDER_INFO } from '../setup'; diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts index bea7278f8e9e..7617e31b45af 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/behavior/serve-live-reload-proxies_spec.ts @@ -8,9 +8,9 @@ /* eslint-disable import/no-extraneous-dependencies */ import { tags } from '@angular-devkit/core'; -import { createServer } from 'http'; +import { createServer } from 'node:http'; import { createProxyServer } from 'http-proxy'; -import { AddressInfo } from 'net'; +import { AddressInfo } from 'node:net'; import puppeteer, { Browser, Page } from 'puppeteer'; import { count, debounceTime, finalize, switchMap, take, timeout } from 'rxjs'; import { executeDevServer } from '../../index'; diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/execute-fetch.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/execute-fetch.ts index e6cbf815883a..eada7975ba88 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/execute-fetch.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/execute-fetch.ts @@ -7,7 +7,7 @@ */ import { lastValueFrom, mergeMap, take, timeout } from 'rxjs'; -import { URL } from 'url'; +import { URL } from 'node:url'; import { BuilderHarness, BuilderHarnessExecutionOptions, diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/jasmine-helpers.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/jasmine-helpers.ts index d7e1ef0d02ef..f3d1bfcea48a 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/jasmine-helpers.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/jasmine-helpers.ts @@ -8,15 +8,15 @@ import { BuilderHandlerFn } from '@angular-devkit/architect'; import { json } from '@angular-devkit/core'; -import { readFileSync } from 'fs'; +import { readFileSync } from 'node:fs'; import { JasmineBuilderHarness } from '../../../testing'; import { host } from '../../../testing/test-utils'; import { setupApplicationTarget, setupBrowserTarget } from './setup'; const optionSchemaCache = new Map<string, json.schema.JsonSchema>(); -export function describeServeBuilder<T>( - builderHandler: BuilderHandlerFn<T & json.JsonObject>, +export function describeServeBuilder<T extends json.JsonObject>( + builderHandler: BuilderHandlerFn<T>, options: { name?: string; schemaPath: string }, specDefinitions: (( harness: JasmineBuilderHarness<T>, diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/options/port_spec.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/options/port_spec.ts index 7943ce2df765..83f3a4d1486b 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/options/port_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/options/port_spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { URL } from 'url'; +import { URL } from 'node:url'; import { executeDevServer } from '../../index'; import { executeOnceAndFetch } from '../execute-fetch'; import { describeServeBuilder } from '../jasmine-helpers'; diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/options/serve-path_spec.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/options/serve-path_spec.ts index dc358060c296..7570175c65d2 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/tests/options/serve-path_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/tests/options/serve-path_spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { URL } from 'url'; +import { URL } from 'node:url'; import { executeDevServer } from '../../index'; import { executeOnceAndFetch } from '../execute-fetch'; import { describeServeBuilder } from '../jasmine-helpers'; diff --git a/packages/angular_devkit/build_angular/src/builders/dev-server/webpack-server.ts b/packages/angular_devkit/build_angular/src/builders/dev-server/webpack-server.ts index 0f1b51b59d80..d9bc6e015c3b 100644 --- a/packages/angular_devkit/build_angular/src/builders/dev-server/webpack-server.ts +++ b/packages/angular_devkit/build_angular/src/builders/dev-server/webpack-server.ts @@ -18,9 +18,9 @@ import { runWebpackDevServer, } from '@angular-devkit/build-webpack'; import { json, tags } from '@angular-devkit/core'; -import * as path from 'path'; +import * as path from 'node:path'; +import * as url from 'node:url'; import { Observable, concatMap, from, switchMap } from 'rxjs'; -import * as url from 'url'; import webpack from 'webpack'; import webpackDevServer from 'webpack-dev-server'; import { getCommonConfig, getDevServerConfig, getStylesConfig } from '../../tools/webpack/configs'; diff --git a/packages/angular_devkit/build_angular/src/builders/extract-i18n/ivy-extract-loader.ts b/packages/angular_devkit/build_angular/src/builders/extract-i18n/ivy-extract-loader.ts index fb30d28af70b..8d9d639d069b 100644 --- a/packages/angular_devkit/build_angular/src/builders/extract-i18n/ivy-extract-loader.ts +++ b/packages/angular_devkit/build_angular/src/builders/extract-i18n/ivy-extract-loader.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import * as nodePath from 'path'; +import * as nodePath from 'node:path'; import { loadEsmModule } from '../../utils/load-esm'; // Extract loader source map parameter type since it is not exported directly diff --git a/packages/angular_devkit/build_angular/src/builders/jest/index.ts b/packages/angular_devkit/build_angular/src/builders/jest/index.ts index f730d588cbba..c972dfa41a46 100644 --- a/packages/angular_devkit/build_angular/src/builders/jest/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/jest/index.ts @@ -85,7 +85,7 @@ export default createBuilder( tsConfig: options.tsConfig, polyfills: options.polyfills ?? ['zone.js', 'zone.js/testing'], outputPath: testOut, - aot: false, + aot: options.aot, index: false, outputHashing: OutputHashing.None, outExtension: 'mjs', // Force native ESM. diff --git a/packages/angular_devkit/build_angular/src/builders/jest/schema.json b/packages/angular_devkit/build_angular/src/builders/jest/schema.json index 6bd5670abb5d..272a1a906597 100644 --- a/packages/angular_devkit/build_angular/src/builders/jest/schema.json +++ b/packages/angular_devkit/build_angular/src/builders/jest/schema.json @@ -32,6 +32,11 @@ "uniqueItems": true }, "default": [] + }, + "aot": { + "type": "boolean", + "description": "Run tests using Ahead of Time compilation.", + "default": false } }, "additionalProperties": false, diff --git a/packages/angular_devkit/build_angular/src/builders/karma/browser_builder.ts b/packages/angular_devkit/build_angular/src/builders/karma/browser_builder.ts index 6bc18e6e2b4e..da6995ba223d 100644 --- a/packages/angular_devkit/build_angular/src/builders/karma/browser_builder.ts +++ b/packages/angular_devkit/build_angular/src/builders/karma/browser_builder.ts @@ -9,7 +9,7 @@ import { purgeStaleBuildCache } from '@angular/build/private'; import { BuilderContext, BuilderOutput } from '@angular-devkit/architect'; import type { Config, ConfigOptions } from 'karma'; -import * as path from 'path'; +import * as path from 'node:path'; import { Observable, defaultIfEmpty, from, switchMap } from 'rxjs'; import { Configuration } from 'webpack'; import { getCommonConfig, getStylesConfig } from '../../tools/webpack/configs'; @@ -131,7 +131,7 @@ async function initializeBrowser( budgets: undefined, optimization: false, buildOptimizer: false, - aot: false, + aot: options.aot, vendorChunk: true, namedChunks: true, extractLicenses: false, diff --git a/packages/angular_devkit/build_angular/src/builders/karma/find-tests-plugin.ts b/packages/angular_devkit/build_angular/src/builders/karma/find-tests-plugin.ts index 0226d6e21694..2c458126112e 100644 --- a/packages/angular_devkit/build_angular/src/builders/karma/find-tests-plugin.ts +++ b/packages/angular_devkit/build_angular/src/builders/karma/find-tests-plugin.ts @@ -6,12 +6,11 @@ * found in the LICENSE file at https://angular.dev/license */ -import assert from 'assert'; +import { findTests } from '@angular/build/private'; import { pluginName } from 'mini-css-extract-plugin'; +import assert from 'node:assert'; import type { Compilation, Compiler } from 'webpack'; -import { findTests } from './find-tests'; - /** * The name of the plugin provided to Webpack when tapping Webpack compiler hooks. */ diff --git a/packages/angular_devkit/build_angular/src/builders/karma/index.ts b/packages/angular_devkit/build_angular/src/builders/karma/index.ts index 227117ffcf1c..24b808485803 100644 --- a/packages/angular_devkit/build_angular/src/builders/karma/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/karma/index.ts @@ -15,11 +15,12 @@ import { } from '@angular-devkit/architect'; import { strings } from '@angular-devkit/core'; import type { ConfigOptions } from 'karma'; -import { createRequire } from 'module'; -import * as path from 'path'; +import { createRequire } from 'node:module'; +import * as path from 'node:path'; import { Observable, from, mergeMap } from 'rxjs'; import { Configuration } from 'webpack'; import { ExecutionTransformer } from '../../transforms'; +import { normalizeFileReplacements } from '../../utils'; import { BuilderMode, Schema as KarmaBuilderOptions } from './schema'; export type KarmaConfigOptions = ConfigOptions & { @@ -46,7 +47,18 @@ export function execute( mergeMap(([useEsbuild, executeWithBuilder]) => { const karmaOptions = getBaseKarmaOptions(options, context, useEsbuild); - return executeWithBuilder.execute(options, context, karmaOptions, transforms); + if (useEsbuild && transforms.webpackConfiguration) { + context.logger.warn( + `This build is using the application builder but transforms.webpackConfiguration was provided. The transform will be ignored.`, + ); + } + + if (useEsbuild && options.fileReplacements) { + options.fileReplacements = normalizeFileReplacements(options.fileReplacements, './'); + } + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + return executeWithBuilder(options as any, context, karmaOptions, transforms); }), ); } @@ -155,13 +167,26 @@ export default createBuilder<Record<string, string> & KarmaBuilderOptions>(execu async function getExecuteWithBuilder( options: KarmaBuilderOptions, context: BuilderContext, -): Promise<[boolean, typeof import('./application_builder') | typeof import('./browser_builder')]> { +): Promise< + [ + boolean, + ( + | (typeof import('@angular/build/private'))['executeKarmaInternal'] + | (typeof import('./browser_builder'))['execute'] + ), + ] +> { const useEsbuild = await checkForEsbuild(options, context); - const executeWithBuilderModule = useEsbuild - ? import('./application_builder') - : import('./browser_builder'); + let execute; + if (useEsbuild) { + const { executeKarmaInternal } = await import('@angular/build/private'); + execute = executeKarmaInternal; + } else { + const browserBuilderModule = await import('./browser_builder'); + execute = browserBuilderModule.execute; + } - return [useEsbuild, await executeWithBuilderModule]; + return [useEsbuild, execute]; } async function checkForEsbuild( diff --git a/packages/angular_devkit/build_angular/src/builders/karma/schema.json b/packages/angular_devkit/build_angular/src/builders/karma/schema.json index 24e74ab14212..c8ed717a90c8 100644 --- a/packages/angular_devkit/build_angular/src/builders/karma/schema.json +++ b/packages/angular_devkit/build_angular/src/builders/karma/schema.json @@ -276,6 +276,11 @@ "webWorkerTsConfig": { "type": "string", "description": "TypeScript configuration for Web Worker modules." + }, + "aot": { + "type": "boolean", + "description": "Run tests using Ahead of Time compilation.", + "default": false } }, "additionalProperties": false, diff --git a/packages/angular_devkit/build_angular/src/builders/karma/tests/options/aot_spec.ts b/packages/angular_devkit/build_angular/src/builders/karma/tests/options/aot_spec.ts new file mode 100644 index 000000000000..6d874b22d001 --- /dev/null +++ b/packages/angular_devkit/build_angular/src/builders/karma/tests/options/aot_spec.ts @@ -0,0 +1,79 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +import { execute } from '../../index'; +import { BASE_OPTIONS, KARMA_BUILDER_INFO, describeKarmaBuilder } from '../setup'; +import { BuilderMode } from '../../schema'; + +describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget) => { + describe('Option: "aot"', () => { + it('enables aot with application builder', async () => { + await setupTarget(harness); + + await harness.writeFiles({ + 'src/aot.spec.ts': ` + import { Component } from '@angular/core'; + + describe('Hello', () => { + it('should *not* contain jit instructions', () => { + @Component({ + template: 'Hello', + }) + class Hello {} + + expect((Hello as any).ɵcmp.template.toString()).not.toContain('jit'); + }); + }); +`, + }); + + harness.useTarget('test', { + ...BASE_OPTIONS, + aot: true, + /** Cf. {@link ../builder-mode_spec.ts} */ + polyfills: ['zone.js', '@angular/localize/init', 'zone.js/testing'], + builderMode: BuilderMode.Application, + }); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + }); + + it('enables aot with browser builder', async () => { + await setupTarget(harness); + + await harness.writeFiles({ + 'src/aot.spec.ts': ` + import { Component } from '@angular/core'; + + describe('Hello', () => { + it('should *not* contain jit instructions', () => { + @Component({ + template: 'Hello', + }) + class Hello {} + + expect((Hello as any).ɵcmp.template.toString()).not.toContain('jit'); + }); + }); +`, + }); + + harness.useTarget('test', { + ...BASE_OPTIONS, + aot: true, + /** Cf. {@link ../builder-mode_spec.ts} */ + polyfills: ['zone.js', '@angular/localize/init', 'zone.js/testing'], + builderMode: BuilderMode.Browser, + }); + + const { result } = await harness.executeOnce(); + expect(result?.success).toBeTrue(); + }); + }); +}); diff --git a/packages/angular_devkit/build_angular/src/builders/prerender/index.ts b/packages/angular_devkit/build_angular/src/builders/prerender/index.ts index 52c4d963ecad..b56aa9df4b26 100644 --- a/packages/angular_devkit/build_angular/src/builders/prerender/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/prerender/index.ts @@ -13,10 +13,10 @@ import { createBuilder, targetFromTargetString, } from '@angular-devkit/architect'; -import * as fs from 'fs'; +import * as fs from 'node:fs'; import { readFile } from 'node:fs/promises'; +import * as path from 'node:path'; import ora from 'ora'; -import * as path from 'path'; import Piscina from 'piscina'; import { normalizeOptimization } from '../../utils'; import { maxWorkers } from '../../utils/environment-options'; diff --git a/packages/angular_devkit/build_angular/src/builders/protractor/index.ts b/packages/angular_devkit/build_angular/src/builders/protractor/index.ts index e0cf8cc248b9..df0a60759835 100644 --- a/packages/angular_devkit/build_angular/src/builders/protractor/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/protractor/index.ts @@ -12,9 +12,9 @@ import { createBuilder, targetFromTargetString, } from '@angular-devkit/architect'; -import { json, tags } from '@angular-devkit/core'; -import { resolve } from 'path'; -import * as url from 'url'; +import { tags } from '@angular-devkit/core'; +import { resolve } from 'node:path'; +import * as url from 'node:url'; import { runModuleAsObservableFork } from '../../utils'; import { assertIsError } from '../../utils/error'; import { DevServerBuilderOptions } from '../dev-server/index'; @@ -118,7 +118,7 @@ export async function execute( const overrides = { watch: false, liveReload: false, - } as DevServerBuilderOptions & json.JsonObject; + } as DevServerBuilderOptions; if (options.host !== undefined) { overrides.host = options.host; diff --git a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/index.ts b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/index.ts index bba447815366..6219ea6a46a2 100644 --- a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/index.ts @@ -21,7 +21,8 @@ import type { MiddlewareHandler, ProxyOptions, } from 'browser-sync'; -import { join, resolve as pathResolve } from 'path'; +import { join, resolve as pathResolve } from 'node:path'; +import * as url from 'node:url'; import { EMPTY, Observable, @@ -41,7 +42,6 @@ import { tap, zip, } from 'rxjs'; -import * as url from 'url'; import { Schema } from './schema'; import { getAvailablePort, spawnAsObservable, waitUntilServerIsListening } from './utils'; @@ -52,7 +52,7 @@ const IGNORED_STDOUT_MESSAGES = [ 'Angular is running in development mode. Call enableProdMode() to enable production mode.', ]; -export type SSRDevServerBuilderOptions = Schema & json.JsonObject; +export type SSRDevServerBuilderOptions = Schema; export type SSRDevServerBuilderOutput = BuilderOutput & { baseUrl?: string; port?: string; diff --git a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/proxy_spec.ts b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/proxy_spec.ts index 5e2816a2c271..36808413c2c7 100644 --- a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/proxy_spec.ts +++ b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/specs/proxy_spec.ts @@ -9,7 +9,7 @@ import { Architect } from '@angular-devkit/architect'; // eslint-disable-next-line import/no-extraneous-dependencies import * as browserSync from 'browser-sync'; -import * as http from 'http'; +import * as http from 'node:http'; import { createArchitect, host } from '../../../testing/test-utils'; import { SSRDevServerBuilderOutput } from '../index'; diff --git a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/utils.ts b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/utils.ts index fccbfa246c67..afb8bc77727b 100644 --- a/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/utils.ts +++ b/packages/angular_devkit/build_angular/src/builders/ssr-dev-server/utils.ts @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ -import { SpawnOptions, spawn } from 'child_process'; -import { AddressInfo, createConnection, createServer } from 'net'; +import { SpawnOptions, spawn } from 'node:child_process'; +import { AddressInfo, createConnection, createServer } from 'node:net'; import { Observable, mergeMap, retryWhen, throwError, timer } from 'rxjs'; import treeKill from 'tree-kill'; diff --git a/packages/angular_devkit/build_angular/src/builders/web-test-runner/index.ts b/packages/angular_devkit/build_angular/src/builders/web-test-runner/index.ts index d183682d0533..066ed905760e 100644 --- a/packages/angular_devkit/build_angular/src/builders/web-test-runner/index.ts +++ b/packages/angular_devkit/build_angular/src/builders/web-test-runner/index.ts @@ -100,7 +100,7 @@ async function buildTests( entryPoints, tsConfig: options.tsConfig, outputPath, - aot: false, + aot: options.aot, index: false, outputHashing: OutputHashing.None, optimization: false, diff --git a/packages/angular_devkit/build_angular/src/builders/web-test-runner/schema.json b/packages/angular_devkit/build_angular/src/builders/web-test-runner/schema.json index d90f20d3040a..c922e768849b 100644 --- a/packages/angular_devkit/build_angular/src/builders/web-test-runner/schema.json +++ b/packages/angular_devkit/build_angular/src/builders/web-test-runner/schema.json @@ -249,6 +249,11 @@ "webWorkerTsConfig": { "type": "string", "description": "TypeScript configuration for Web Worker modules." + }, + "aot": { + "type": "boolean", + "description": "Run tests using Ahead of Time compilation.", + "default": false } }, "additionalProperties": false, diff --git a/packages/angular_devkit/build_angular/src/tools/webpack/configs/common.ts b/packages/angular_devkit/build_angular/src/tools/webpack/configs/common.ts index 87f6603e06e2..d6796a1117bf 100644 --- a/packages/angular_devkit/build_angular/src/tools/webpack/configs/common.ts +++ b/packages/angular_devkit/build_angular/src/tools/webpack/configs/common.ts @@ -8,7 +8,7 @@ import { AngularWebpackLoaderPath } from '@ngtools/webpack'; import CopyWebpackPlugin from 'copy-webpack-plugin'; -import * as path from 'path'; +import * as path from 'node:path'; import { Compiler, Configuration, diff --git a/packages/angular_devkit/build_angular/src/tools/webpack/configs/dev-server.ts b/packages/angular_devkit/build_angular/src/tools/webpack/configs/dev-server.ts index bfe88dffd8d6..bb23a1860510 100644 --- a/packages/angular_devkit/build_angular/src/tools/webpack/configs/dev-server.ts +++ b/packages/angular_devkit/build_angular/src/tools/webpack/configs/dev-server.ts @@ -7,9 +7,9 @@ */ import { logging, tags } from '@angular-devkit/core'; -import { existsSync, promises as fsPromises } from 'fs'; -import { extname, posix, resolve } from 'path'; -import { URL, pathToFileURL } from 'url'; +import { existsSync, promises as fsPromises } from 'node:fs'; +import { extname, posix, resolve } from 'node:path'; +import { URL, pathToFileURL } from 'node:url'; import { Configuration, RuleSetRule } from 'webpack'; import type { Configuration as DevServerConfiguration } from 'webpack-dev-server'; import { WebpackConfigOptions, WebpackDevServerOptions } from '../../../utils/build-options'; diff --git a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/any-component-style-budget-checker.ts b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/any-component-style-budget-checker.ts index 79b126ec3733..05ea91d8fb99 100644 --- a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/any-component-style-budget-checker.ts +++ b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/any-component-style-budget-checker.ts @@ -13,7 +13,7 @@ import { ThresholdSeverity, checkBudgets, } from '@angular/build/private'; -import * as path from 'path'; +import * as path from 'node:path'; import { Compilation, Compiler } from 'webpack'; import { addError, addWarning } from '../../../utils/webpack-diagnostics'; diff --git a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/common-js-usage-warn-plugin.ts b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/common-js-usage-warn-plugin.ts index 01af65f57b3b..2374243b3121 100644 --- a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/common-js-usage-warn-plugin.ts +++ b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/common-js-usage-warn-plugin.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { isAbsolute } from 'path'; +import { isAbsolute } from 'node:path'; import { Compilation, Compiler, Dependency, Module, NormalModule } from 'webpack'; import { addWarning } from '../../../utils/webpack-diagnostics'; diff --git a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/hmr/hmr-loader.ts b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/hmr/hmr-loader.ts index 3c7103d34a2c..40ef875fdca8 100644 --- a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/hmr/hmr-loader.ts +++ b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/hmr/hmr-loader.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { join } from 'path'; +import { join } from 'node:path'; export const HmrLoader = __filename; const hmrAcceptPath = join(__dirname, './hmr-accept.js').replace(/\\/g, '/'); diff --git a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/index-html-webpack-plugin.ts b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/index-html-webpack-plugin.ts index d92c2eb69c02..14f7923e6435 100644 --- a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/index-html-webpack-plugin.ts +++ b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/index-html-webpack-plugin.ts @@ -12,7 +12,7 @@ import { IndexHtmlGeneratorOptions, IndexHtmlGeneratorProcessOptions, } from '@angular/build/private'; -import { basename, dirname, extname } from 'path'; +import { basename, dirname, extname } from 'node:path'; import { Compilation, Compiler, sources } from 'webpack'; import { assertIsError } from '../../../utils/error'; import { addError, addWarning } from '../../../utils/webpack-diagnostics'; diff --git a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/postcss-cli-resources.ts b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/postcss-cli-resources.ts index a59d009072d1..37ee30b5f9bf 100644 --- a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/postcss-cli-resources.ts +++ b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/postcss-cli-resources.ts @@ -7,9 +7,9 @@ */ import { interpolateName } from 'loader-utils'; -import * as path from 'path'; +import * as path from 'node:path'; +import * as url from 'node:url'; import { Declaration, Plugin } from 'postcss'; -import * as url from 'url'; import { assertIsError } from '../../../utils/error'; function wrapUrl(url: string): string { diff --git a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/scripts-webpack-plugin.ts b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/scripts-webpack-plugin.ts index 185cafdfb25d..10d7d2d245bb 100644 --- a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/scripts-webpack-plugin.ts +++ b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/scripts-webpack-plugin.ts @@ -7,7 +7,7 @@ */ import { interpolateName } from 'loader-utils'; -import * as path from 'path'; +import * as path from 'node:path'; import { Chunk, Compilation, Compiler, sources as webpackSources } from 'webpack'; import { assertIsError } from '../../../utils/error'; import { addError } from '../../../utils/webpack-diagnostics'; diff --git a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/styles-webpack-plugin.ts b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/styles-webpack-plugin.ts index afd0dc7dda2f..38555f56a093 100644 --- a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/styles-webpack-plugin.ts +++ b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/styles-webpack-plugin.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import assert from 'assert'; +import assert from 'node:assert'; import type { Compilation, Compiler } from 'webpack'; import { assertIsError } from '../../../utils/error'; import { addError } from '../../../utils/webpack-diagnostics'; diff --git a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/transfer-size-plugin.ts b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/transfer-size-plugin.ts index dbd528b0e5c6..77122667452f 100644 --- a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/transfer-size-plugin.ts +++ b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/transfer-size-plugin.ts @@ -6,9 +6,9 @@ * found in the LICENSE file at https://angular.dev/license */ -import { promisify } from 'util'; +import { promisify } from 'node:util'; +import { brotliCompress } from 'node:zlib'; import { Compiler } from 'webpack'; -import { brotliCompress } from 'zlib'; import { addWarning } from '../../../utils/webpack-diagnostics'; const brotliCompressAsync = promisify(brotliCompress); diff --git a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/typescript.ts b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/typescript.ts index 537d809562c9..129c869036d2 100644 --- a/packages/angular_devkit/build_angular/src/tools/webpack/plugins/typescript.ts +++ b/packages/angular_devkit/build_angular/src/tools/webpack/plugins/typescript.ts @@ -23,6 +23,9 @@ export function createIvyPlugin( sourceMap: buildOptions.sourceMap.scripts, declaration: false, declarationMap: false, + // Disable removing of comments as TS is quite aggressive with these and can + // remove important annotations, such as /* @__PURE__ */. + removeComments: false, }; if (tsConfig.options.target === undefined || tsConfig.options.target < ScriptTarget.ES2022) { diff --git a/packages/angular_devkit/build_angular/src/tools/webpack/utils/helpers.ts b/packages/angular_devkit/build_angular/src/tools/webpack/utils/helpers.ts index c63ac588cba3..f57708663e03 100644 --- a/packages/angular_devkit/build_angular/src/tools/webpack/utils/helpers.ts +++ b/packages/angular_devkit/build_angular/src/tools/webpack/utils/helpers.ts @@ -7,9 +7,9 @@ */ import type { ObjectPattern } from 'copy-webpack-plugin'; -import { createHash } from 'crypto'; import glob from 'fast-glob'; -import * as path from 'path'; +import { createHash } from 'node:crypto'; +import * as path from 'node:path'; import type { Configuration, WebpackOptionsNormalized } from 'webpack'; import { AssetPatternClass, diff --git a/packages/angular_devkit/build_angular/src/utils/error.ts b/packages/angular_devkit/build_angular/src/utils/error.ts index c00e13e79726..0ca77c331d2d 100644 --- a/packages/angular_devkit/build_angular/src/utils/error.ts +++ b/packages/angular_devkit/build_angular/src/utils/error.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import assert from 'assert'; +import assert from 'node:assert'; export function assertIsError(value: unknown): asserts value is Error & { code?: string } { const isError = diff --git a/packages/angular_devkit/build_angular/src/utils/i18n-inlining.ts b/packages/angular_devkit/build_angular/src/utils/i18n-inlining.ts index 721077056602..9f639f16cb21 100644 --- a/packages/angular_devkit/build_angular/src/utils/i18n-inlining.ts +++ b/packages/angular_devkit/build_angular/src/utils/i18n-inlining.ts @@ -8,8 +8,8 @@ import { BuilderContext } from '@angular-devkit/architect'; import { EmittedFiles } from '@angular-devkit/build-webpack'; -import * as fs from 'fs'; -import * as path from 'path'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; import { BundleActionExecutor } from './action-executor'; import { InlineOptions } from './bundle-inline-options'; import { copyAssets } from './copy-assets'; diff --git a/packages/angular_devkit/build_angular/src/utils/normalize-asset-patterns.ts b/packages/angular_devkit/build_angular/src/utils/normalize-asset-patterns.ts index fa3982e3d01b..ef421d81042c 100644 --- a/packages/angular_devkit/build_angular/src/utils/normalize-asset-patterns.ts +++ b/packages/angular_devkit/build_angular/src/utils/normalize-asset-patterns.ts @@ -6,9 +6,9 @@ * found in the LICENSE file at https://angular.dev/license */ -import { statSync } from 'fs'; import assert from 'node:assert'; -import * as path from 'path'; +import { statSync } from 'node:fs'; +import * as path from 'node:path'; import { AssetPattern, AssetPatternClass } from '../builders/browser/schema'; export class MissingAssetSourceRootException extends Error { diff --git a/packages/angular_devkit/build_angular/src/utils/normalize-file-replacements.ts b/packages/angular_devkit/build_angular/src/utils/normalize-file-replacements.ts index dd981f45e45a..3ec5d3e2a5ce 100644 --- a/packages/angular_devkit/build_angular/src/utils/normalize-file-replacements.ts +++ b/packages/angular_devkit/build_angular/src/utils/normalize-file-replacements.ts @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ -import { existsSync } from 'fs'; -import * as path from 'path'; +import { existsSync } from 'node:fs'; +import * as path from 'node:path'; import { FileReplacement } from '../builders/browser/schema'; export class MissingFileReplacementException extends Error { diff --git a/packages/angular_devkit/build_angular/src/utils/normalize-polyfills.ts b/packages/angular_devkit/build_angular/src/utils/normalize-polyfills.ts index 8b0857b51d91..2daac368fd38 100644 --- a/packages/angular_devkit/build_angular/src/utils/normalize-polyfills.ts +++ b/packages/angular_devkit/build_angular/src/utils/normalize-polyfills.ts @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ -import { existsSync } from 'fs'; -import { resolve } from 'path'; +import { existsSync } from 'node:fs'; +import { resolve } from 'node:path'; export function normalizePolyfills( polyfills: string[] | string | undefined, diff --git a/packages/angular_devkit/build_angular/src/utils/output-paths.ts b/packages/angular_devkit/build_angular/src/utils/output-paths.ts index 53a37bb5146e..aac9ffe0509d 100644 --- a/packages/angular_devkit/build_angular/src/utils/output-paths.ts +++ b/packages/angular_devkit/build_angular/src/utils/output-paths.ts @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ -import { existsSync, mkdirSync } from 'fs'; -import { join } from 'path'; +import { existsSync, mkdirSync } from 'node:fs'; +import { join } from 'node:path'; import { I18nOptions } from './i18n-webpack'; export function ensureOutputPaths(baseOutputPath: string, i18n: I18nOptions): Map<string, string> { diff --git a/packages/angular_devkit/build_angular/src/utils/process-bundle.ts b/packages/angular_devkit/build_angular/src/utils/process-bundle.ts index dd6ef0fbf8a9..f1f76a966e9e 100644 --- a/packages/angular_devkit/build_angular/src/utils/process-bundle.ts +++ b/packages/angular_devkit/build_angular/src/utils/process-bundle.ts @@ -17,9 +17,9 @@ import { traverse, types, } from '@babel/core'; -import * as fs from 'fs/promises'; -import * as path from 'path'; -import { workerData } from 'worker_threads'; +import * as fs from 'node:fs/promises'; +import * as path from 'node:path'; +import { workerData } from 'node:worker_threads'; import { InlineOptions } from './bundle-inline-options'; import { allowMinify, shouldBeautify } from './environment-options'; import { assertIsError } from './error'; diff --git a/packages/angular_devkit/build_angular/src/utils/read-tsconfig.ts b/packages/angular_devkit/build_angular/src/utils/read-tsconfig.ts index 7046acfb6435..c0dc5754f242 100644 --- a/packages/angular_devkit/build_angular/src/utils/read-tsconfig.ts +++ b/packages/angular_devkit/build_angular/src/utils/read-tsconfig.ts @@ -7,7 +7,7 @@ */ import type { ParsedConfiguration } from '@angular/compiler-cli'; -import * as path from 'path'; +import * as path from 'node:path'; import { loadEsmModule } from './load-esm'; /** diff --git a/packages/angular_devkit/build_angular/src/utils/run-module-as-observable-fork.ts b/packages/angular_devkit/build_angular/src/utils/run-module-as-observable-fork.ts index 9f0ac893e622..f447103da9b4 100644 --- a/packages/angular_devkit/build_angular/src/utils/run-module-as-observable-fork.ts +++ b/packages/angular_devkit/build_angular/src/utils/run-module-as-observable-fork.ts @@ -7,8 +7,8 @@ */ import { BuilderOutput } from '@angular-devkit/architect'; -import { ForkOptions, fork } from 'child_process'; -import { resolve } from 'path'; +import { ForkOptions, fork } from 'node:child_process'; +import { resolve } from 'node:path'; import { Observable } from 'rxjs'; import treeKill from 'tree-kill'; diff --git a/packages/angular_devkit/build_angular/src/utils/test-files_spec.ts b/packages/angular_devkit/build_angular/src/utils/test-files_spec.ts index 1a033a997196..f74053ffcaab 100644 --- a/packages/angular_devkit/build_angular/src/utils/test-files_spec.ts +++ b/packages/angular_devkit/build_angular/src/utils/test-files_spec.ts @@ -8,8 +8,8 @@ // eslint-disable-next-line import/no-extraneous-dependencies import realGlob from 'fast-glob'; -import { promises as fs } from 'fs'; -import * as path from 'path'; +import { promises as fs } from 'node:fs'; +import * as path from 'node:path'; import { findTestFiles } from './test-files'; describe('test-files', () => { diff --git a/packages/angular_devkit/build_angular/src/utils/webpack-browser-config.ts b/packages/angular_devkit/build_angular/src/utils/webpack-browser-config.ts index 29a32711d28d..31b44c7061d9 100644 --- a/packages/angular_devkit/build_angular/src/utils/webpack-browser-config.ts +++ b/packages/angular_devkit/build_angular/src/utils/webpack-browser-config.ts @@ -7,7 +7,7 @@ */ import { BuilderContext } from '@angular-devkit/architect'; -import * as path from 'path'; +import * as path from 'node:path'; import { Configuration, javascript } from 'webpack'; import { merge as webpackMerge } from 'webpack-merge'; import { Schema as BrowserBuilderSchema } from '../builders/browser/schema'; diff --git a/packages/angular_devkit/build_angular/test/hello-world-lib/BUILD.bazel b/packages/angular_devkit/build_angular/test/hello-world-lib/BUILD.bazel new file mode 100644 index 000000000000..0eef93e382cd --- /dev/null +++ b/packages/angular_devkit/build_angular/test/hello-world-lib/BUILD.bazel @@ -0,0 +1,21 @@ +load("@aspect_bazel_lib//lib:copy_to_bin.bzl", "copy_to_bin") +load("@aspect_rules_js//npm:defs.bzl", "npm_link_package") + +# Note: Link the package into node modules for testing. Notably, tests +# of a package generally don't use the associated npm package, to e.g. allow for relative +# imports, but here this is an exception as the package needs to be resolvable at runtime +# to replicate a CLI environment. +npm_link_package( + name = "node_modules/@angular-devkit/build-angular", + src = "//packages/angular_devkit/build_angular:pkg", + package = "@angular-devkit/build-angular", + root_package = package_name(), +) + +copy_to_bin( + name = "hello-world-lib", + srcs = glob(["**/*"]) + [ + ":node_modules/@angular-devkit/build-angular", + ], + visibility = ["//packages/angular_devkit/build_angular:__pkg__"], +) diff --git a/packages/angular_devkit/build_webpack/BUILD.bazel b/packages/angular_devkit/build_webpack/BUILD.bazel index 6fee76a7f02c..85e41f44660c 100644 --- a/packages/angular_devkit/build_webpack/BUILD.bazel +++ b/packages/angular_devkit/build_webpack/BUILD.bazel @@ -3,16 +3,17 @@ # Use of this source code is governed by an MIT-style license that can be # found in the LICENSE file at https://angular.dev/license -load("@npm//@angular/build-tooling/bazel/api-golden:index.bzl", "api_golden_test_npm_package") -load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") -load("//tools:defaults.bzl", "pkg_npm") -load("//tools:interop.bzl", "ts_project") +load("@devinfra//bazel/api-golden:index_rjs.bzl", "api_golden_test_npm_package") +load("@npm2//:defs.bzl", "npm_link_all_packages") +load("//tools:defaults2.bzl", "jasmine_test", "npm_package", "ts_project") load("//tools:ts_json_schema.bzl", "ts_json_schema") licenses(["notice"]) package(default_visibility = ["//visibility:public"]) +npm_link_all_packages() + ts_json_schema( name = "webpack_schema", src = "src/builders/webpack/schema.json", @@ -23,6 +24,13 @@ ts_json_schema( src = "src/builders/webpack-dev-server/schema.json", ) +RUNTIME_ASSETS = [ + "builders.json", + "package.json", + "src/builders/webpack-dev-server/schema.json", + "src/builders/webpack/schema.json", +] + ts_project( name = "build_webpack", srcs = glob( @@ -36,21 +44,14 @@ ts_project( "//packages/angular_devkit/build_webpack:src/builders/webpack-dev-server/schema.ts", "//packages/angular_devkit/build_webpack:src/builders/webpack/schema.ts", ], - data = [ - "builders.json", - "package.json", - "src/builders/webpack-dev-server/schema.json", - "src/builders/webpack/schema.json", - ], - interop_deps = [ - "//packages/angular_devkit/architect", - ], + data = RUNTIME_ASSETS, module_name = "@angular-devkit/build-webpack", deps = [ - "//:root_modules/@types/node", - "//:root_modules/rxjs", - "//:root_modules/webpack", - "//:root_modules/webpack-dev-server", + ":node_modules/@angular-devkit/architect", + "//:node_modules/@types/node", + "//:node_modules/rxjs", + "//:node_modules/webpack", + "//:node_modules/webpack-dev-server", ], ) @@ -67,32 +68,29 @@ ts_project( "test/**/*", ], ), - interop_deps = [ - "//packages/angular_devkit/core", - "//packages/angular_devkit/core/node", - "//packages/ngtools/webpack", - "//packages/angular_devkit/architect", - "//packages/angular_devkit/architect/node", - "//packages/angular_devkit/architect/testing", - ], deps = [ - ":build_webpack_rjs", - "//:root_modules/@types/jasmine", + ":build_webpack", + ":node_modules/@angular-devkit/architect", + ":node_modules/@angular-devkit/core", + ":node_modules/@ngtools/webpack", + "//:node_modules/@types/jasmine", + "//:node_modules/@types/node", ], ) -jasmine_node_test( +jasmine_test( name = "build_webpack_test", - srcs = [":build_webpack_test_lib"], data = [ - "//:root_modules/@angular/common", - "//:root_modules/@angular/compiler", - "//:root_modules/@angular/compiler-cli", - "//:root_modules/@angular/core", - "//:root_modules/@angular/platform-browser", - "//:root_modules/@angular/platform-browser-dynamic", - "//:root_modules/tslib", - "//:root_modules/zone.js", + "build_webpack_test_lib", + "//:node_modules/@angular/common", + "//:node_modules/@angular/compiler", + "//:node_modules/@angular/compiler-cli", + "//:node_modules/@angular/core", + "//:node_modules/@angular/platform-browser", + "//:node_modules/@angular/platform-browser-dynamic", + "//:node_modules/tslib", + "//:node_modules/typescript", + "//:node_modules/zone.js", ], ) @@ -103,16 +101,15 @@ genrule( cmd = "cp $(execpath //:LICENSE) $@", ) -pkg_npm( - name = "npm_package", +npm_package( + name = "pkg", pkg_deps = [ "//packages/angular_devkit/architect:package.json", ], tags = ["release-package"], - deps = [ + deps = RUNTIME_ASSETS + [ ":README.md", ":build_webpack", - ":builders.json", ":license", ], ) @@ -123,6 +120,6 @@ api_golden_test_npm_package( ":npm_package", "//goldens:public-api", ], - golden_dir = "angular_cli/goldens/public-api/angular_devkit/build_webpack", - npm_package = "angular_cli/packages/angular_devkit/build_webpack/npm_package", + golden_dir = "goldens/public-api/angular_devkit/build_webpack", + npm_package = "packages/angular_devkit/build_webpack/npm_package", ) diff --git a/packages/angular_devkit/build_webpack/package.json b/packages/angular_devkit/build_webpack/package.json index 45492dcce249..37d4df1894e4 100644 --- a/packages/angular_devkit/build_webpack/package.json +++ b/packages/angular_devkit/build_webpack/package.json @@ -16,12 +16,13 @@ "./*.js": "./*.js" }, "dependencies": { - "@angular-devkit/architect": "0.0.0-EXPERIMENTAL-PLACEHOLDER", + "@angular-devkit/architect": "workspace:0.0.0-EXPERIMENTAL-PLACEHOLDER", "rxjs": "7.8.1" }, "devDependencies": { - "@angular-devkit/core": "0.0.0-PLACEHOLDER", - "webpack": "5.97.1" + "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", + "@ngtools/webpack": "workspace:0.0.0-PLACEHOLDER", + "webpack": "5.98.0" }, "peerDependencies": { "webpack": "^5.30.0", diff --git a/packages/angular_devkit/build_webpack/src/builders/webpack-dev-server/index.ts b/packages/angular_devkit/build_webpack/src/builders/webpack-dev-server/index.ts index a927f573dc10..7ebeb3afb3eb 100644 --- a/packages/angular_devkit/build_webpack/src/builders/webpack-dev-server/index.ts +++ b/packages/angular_devkit/build_webpack/src/builders/webpack-dev-server/index.ts @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ -import { BuilderContext, createBuilder } from '@angular-devkit/architect'; -import { resolve as pathResolve } from 'path'; +import { Builder, BuilderContext, createBuilder } from '@angular-devkit/architect'; +import { resolve as pathResolve } from 'node:path'; import { Observable, from, isObservable, of, switchMap } from 'rxjs'; import webpack from 'webpack'; import WebpackDevServer from 'webpack-dev-server'; @@ -124,12 +124,15 @@ export function runWebpackDevServer( ); } -export default createBuilder<WebpackDevServerBuilderSchema, DevServerBuildOutput>( - (options, context) => { - const configPath = pathResolve(context.workspaceRoot, options.webpackConfig); +const builder: Builder<WebpackDevServerBuilderSchema> = createBuilder< + WebpackDevServerBuilderSchema, + DevServerBuildOutput +>((options, context) => { + const configPath = pathResolve(context.workspaceRoot, options.webpackConfig); - return from(getWebpackConfig(configPath)).pipe( - switchMap((config) => runWebpackDevServer(config, context)), - ); - }, -); + return from(getWebpackConfig(configPath)).pipe( + switchMap((config) => runWebpackDevServer(config, context)), + ); +}); + +export default builder; diff --git a/packages/angular_devkit/build_webpack/src/builders/webpack-dev-server/index_spec.ts b/packages/angular_devkit/build_webpack/src/builders/webpack-dev-server/index_spec.ts index 241aae3d69d5..80b12e622b71 100644 --- a/packages/angular_devkit/build_webpack/src/builders/webpack-dev-server/index_spec.ts +++ b/packages/angular_devkit/build_webpack/src/builders/webpack-dev-server/index_spec.ts @@ -11,7 +11,7 @@ import { WorkspaceNodeModulesArchitectHost } from '@angular-devkit/architect/nod import { TestingArchitectHost } from '@angular-devkit/architect/testing'; import { schema, workspaces } from '@angular-devkit/core'; import { NodeJsSyncHost } from '@angular-devkit/core/node'; -import * as path from 'path'; +import * as path from 'node:path'; import { DevServerBuildOutput } from './index'; describe('Dev Server Builder', () => { diff --git a/packages/angular_devkit/build_webpack/src/builders/webpack/index.ts b/packages/angular_devkit/build_webpack/src/builders/webpack/index.ts index a7ef459c95b7..ae3dd934b178 100644 --- a/packages/angular_devkit/build_webpack/src/builders/webpack/index.ts +++ b/packages/angular_devkit/build_webpack/src/builders/webpack/index.ts @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ -import { BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/architect'; -import { resolve as pathResolve } from 'path'; +import { Builder, BuilderContext, BuilderOutput, createBuilder } from '@angular-devkit/architect'; +import { resolve as pathResolve } from 'node:path'; import { Observable, from, isObservable, of, switchMap } from 'rxjs'; import webpack from 'webpack'; import { EmittedFiles, getEmittedFiles, getWebpackConfig } from '../../utils'; @@ -120,10 +120,14 @@ export function runWebpack( ); } -export default createBuilder<WebpackBuilderSchema>((options, context) => { - const configPath = pathResolve(context.workspaceRoot, options.webpackConfig); +const builder: Builder<WebpackBuilderSchema> = createBuilder<WebpackBuilderSchema>( + (options, context) => { + const configPath = pathResolve(context.workspaceRoot, options.webpackConfig); - return from(getWebpackConfig(configPath)).pipe( - switchMap((config) => runWebpack(config, context)), - ); -}); + return from(getWebpackConfig(configPath)).pipe( + switchMap((config) => runWebpack(config, context)), + ); + }, +); + +export default builder; diff --git a/packages/angular_devkit/build_webpack/src/builders/webpack/index_spec.ts b/packages/angular_devkit/build_webpack/src/builders/webpack/index_spec.ts index d0e3bd9ac7b9..9564387d3d73 100644 --- a/packages/angular_devkit/build_webpack/src/builders/webpack/index_spec.ts +++ b/packages/angular_devkit/build_webpack/src/builders/webpack/index_spec.ts @@ -11,7 +11,7 @@ import { WorkspaceNodeModulesArchitectHost } from '@angular-devkit/architect/nod import { TestingArchitectHost } from '@angular-devkit/architect/testing'; import { join, normalize, schema, workspaces } from '@angular-devkit/core'; import { NodeJsSyncHost, createConsoleLogger } from '@angular-devkit/core/node'; -import * as path from 'path'; +import * as path from 'node:path'; import { BuildResult } from './index'; describe('Webpack Builder basic test', () => { diff --git a/packages/angular_devkit/build_webpack/src/utils.ts b/packages/angular_devkit/build_webpack/src/utils.ts index e8baffc2614d..218b85fbcb2a 100644 --- a/packages/angular_devkit/build_webpack/src/utils.ts +++ b/packages/angular_devkit/build_webpack/src/utils.ts @@ -6,9 +6,9 @@ * found in the LICENSE file at https://angular.dev/license */ -import { existsSync } from 'fs'; -import * as path from 'path'; -import { URL, pathToFileURL } from 'url'; +import { existsSync } from 'node:fs'; +import * as path from 'node:path'; +import { URL, pathToFileURL } from 'node:url'; import { Compilation, Configuration } from 'webpack'; export interface EmittedFiles { diff --git a/packages/angular_devkit/core/BUILD.bazel b/packages/angular_devkit/core/BUILD.bazel index e577e15d589f..e3f918a57e8c 100644 --- a/packages/angular_devkit/core/BUILD.bazel +++ b/packages/angular_devkit/core/BUILD.bazel @@ -1,7 +1,5 @@ -load("@npm//@angular/build-tooling/bazel/api-golden:index.bzl", "api_golden_test_npm_package") -load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") -load("//tools:defaults.bzl", "pkg_npm") -load("//tools:interop.bzl", "ts_project") +load("@devinfra//bazel/api-golden:index_rjs.bzl", "api_golden_test_npm_package") +load("//tools:defaults2.bzl", "jasmine_test", "npm_package", "ts_project") # Copyright Google Inc. All Rights Reserved. # @@ -11,7 +9,14 @@ package(default_visibility = ["//visibility:public"]) licenses(["notice"]) -# @angular-devkit/core +RUNTIME_ASSETS = glob( + include = ["**/*.json"], + # NB: we need to exclude the nested node_modules that is laid out by yarn workspaces + exclude = [ + "node_modules/**", + "src/workspace/json/test/**", + ], +) ts_project( name = "core", @@ -21,25 +26,18 @@ ts_project( "src/**/*_spec.ts", ], ) + ["index.ts"], - data = glob( - include = ["**/*.json"], - # NB: we need to exclude the nested node_modules that is laid out by yarn workspaces - exclude = [ - "node_modules/**", - "src/workspace/json/test/**", - ], - ), + data = RUNTIME_ASSETS, module_name = "@angular-devkit/core", deps = [ - "//:root_modules/@types/node", - "//:root_modules/@types/picomatch", - "//:root_modules/@types/jasmine", - "//:root_modules/ajv", - "//:root_modules/ajv-formats", - "//:root_modules/jsonc-parser", - "//:root_modules/picomatch", - "//:root_modules/rxjs", - "//:root_modules/source-map", + "//:node_modules/@types/node", + "//:node_modules/@types/picomatch", + "//:node_modules/@types/jasmine", + "//:node_modules/ajv", + "//:node_modules/ajv-formats", + "//:node_modules/jsonc-parser", + "//:node_modules/picomatch", + "//:node_modules/rxjs", + "//:node_modules/source-map", # @node_module: typescript:es2015.proxy # @node_module: typescript:es2015.reflect # @node_module: typescript:es2015.symbol.wellknown @@ -55,15 +53,16 @@ ts_project( srcs = glob(["src/**/*_spec.ts"]), data = glob(["src/workspace/json/test/**/*.json"]), deps = [ - ":core_rjs", - "//:root_modules/rxjs", - "//packages/angular_devkit/core/node:node_rjs", + ":core", + "//:node_modules/@types/node", + "//:node_modules/rxjs", + "//packages/angular_devkit/core/node", ], ) -jasmine_node_test( +jasmine_test( name = "core_test", - srcs = [":core_test_lib"], + data = [":core_test_lib"], ) genrule( @@ -73,10 +72,10 @@ genrule( cmd = "cp $(execpath //:LICENSE) $@", ) -pkg_npm( - name = "npm_package", +npm_package( + name = "pkg", tags = ["release-package"], - deps = [ + deps = RUNTIME_ASSETS + [ ":README.md", ":core", ":license", @@ -91,8 +90,10 @@ api_golden_test_npm_package( ":npm_package", "//goldens:public-api", ], - golden_dir = "angular_cli/goldens/public-api/angular_devkit/core", - npm_package = "angular_cli/packages/angular_devkit/core/npm_package", - types = ["@npm//@types/node"], + golden_dir = "goldens/public-api/angular_devkit/core", + npm_package = "packages/angular_devkit/core/npm_package", + types = { + "//:node_modules/@types/node": "node", + }, ) # @external_end diff --git a/packages/angular_devkit/core/node/BUILD.bazel b/packages/angular_devkit/core/node/BUILD.bazel index 6e2d05567ef2..9a6bc4df3ad5 100644 --- a/packages/angular_devkit/core/node/BUILD.bazel +++ b/packages/angular_devkit/core/node/BUILD.bazel @@ -3,8 +3,7 @@ # Use of this source code is governed by an MIT-style license that can be # found in the LICENSE file at https://angular.dev/license -load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") -load("//tools:interop.bzl", "ts_project") +load("//tools:defaults2.bzl", "jasmine_test", "ts_project") licenses(["notice"]) @@ -21,15 +20,13 @@ ts_project( ), module_name = "@angular-devkit/core/node", deps = [ - "//:root_modules/@types/node", - "//:root_modules/chokidar", - "//:root_modules/rxjs", - "//packages/angular_devkit/core:core_rjs", + "//:node_modules/@types/node", + "//:node_modules/chokidar", + "//:node_modules/rxjs", + "//packages/angular_devkit/core", ], ) -# @external_begin - ts_project( name = "node_test_lib", testonly = True, @@ -42,18 +39,15 @@ ts_project( ], ), deps = [ - ":node_rjs", - "//:root_modules/@types/jasmine", - "//:root_modules/rxjs", - "//packages/angular_devkit/core:core_rjs", + ":node", + "//:node_modules/@types/jasmine", + "//:node_modules/@types/node", + "//:node_modules/rxjs", + "//packages/angular_devkit/core", ], ) -jasmine_node_test( +jasmine_test( name = "node_test", - srcs = [":node_test_lib"], - deps = [ - "@npm//chokidar", - ], + data = [":node_test_lib"], ) -# @external_end diff --git a/packages/angular_devkit/core/node/host_spec.ts b/packages/angular_devkit/core/node/host_spec.ts index 946e124fb8bd..dad72535fa25 100644 --- a/packages/angular_devkit/core/node/host_spec.ts +++ b/packages/angular_devkit/core/node/host_spec.ts @@ -7,9 +7,9 @@ */ /* eslint-disable @typescript-eslint/no-non-null-assertion */ -import * as fs from 'fs'; -import { tmpdir } from 'os'; -import { join } from 'path'; +import * as fs from 'node:fs'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; import { normalize, virtualFs } from '../src'; import { NodeJsAsyncHost, NodeJsSyncHost } from './host'; diff --git a/packages/angular_devkit/core/node/testing/BUILD.bazel b/packages/angular_devkit/core/node/testing/BUILD.bazel index 89870c7f876d..473b47e5ade7 100644 --- a/packages/angular_devkit/core/node/testing/BUILD.bazel +++ b/packages/angular_devkit/core/node/testing/BUILD.bazel @@ -18,10 +18,10 @@ ts_project( ), module_name = "@angular-devkit/core/node/testing", deps = [ - "//:root_modules/@types/jasmine", - "//:root_modules/@types/node", - "//:root_modules/rxjs", - "//packages/angular_devkit/core:core_rjs", - "//packages/angular_devkit/core/node:node_rjs", + "//:node_modules/@types/jasmine", + "//:node_modules/@types/node", + "//:node_modules/rxjs", + "//packages/angular_devkit/core", + "//packages/angular_devkit/core/node", ], ) diff --git a/packages/angular_devkit/core/node/testing/index.ts b/packages/angular_devkit/core/node/testing/index.ts index d9348d34c3bc..fb520d9361f9 100644 --- a/packages/angular_devkit/core/node/testing/index.ts +++ b/packages/angular_devkit/core/node/testing/index.ts @@ -6,9 +6,9 @@ * found in the LICENSE file at https://angular.dev/license */ -import * as fs from 'fs'; -import * as os from 'os'; -import * as path from 'path'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; import { Path, getSystemPath, join, normalize, virtualFs } from '../../src'; import { NodeJsSyncHost } from '../host'; diff --git a/packages/angular_devkit/core/src/json/schema/registry.ts b/packages/angular_devkit/core/src/json/schema/registry.ts index 2e6f3245f5ae..11632b64f86a 100644 --- a/packages/angular_devkit/core/src/json/schema/registry.ts +++ b/packages/angular_devkit/core/src/json/schema/registry.ts @@ -8,10 +8,10 @@ import Ajv, { SchemaObjCxt, ValidateFunction } from 'ajv'; import ajvAddFormats from 'ajv-formats'; -import * as http from 'http'; -import * as https from 'https'; +import * as http from 'node:http'; +import * as https from 'node:https'; +import * as Url from 'node:url'; import { Observable, from, isObservable, lastValueFrom } from 'rxjs'; -import * as Url from 'url'; import { BaseException } from '../../exception'; import { PartiallyOrderedSet, deepCopy } from '../../utils'; import { JsonArray, JsonObject, JsonValue, isJsonObject } from '../utils'; @@ -173,7 +173,7 @@ export class CoreSchemaRegistry implements SchemaRegistry { * @param {JsonVisitor} visitor The visitor to transform every value. * @param {JsonVisitor[]} deps A list of other visitors to run before. */ - addPreTransform(visitor: JsonVisitor, deps?: JsonVisitor[]) { + addPreTransform(visitor: JsonVisitor, deps?: JsonVisitor[]): void { this._pre.add(visitor, deps); } @@ -184,7 +184,7 @@ export class CoreSchemaRegistry implements SchemaRegistry { * @param {JsonVisitor} visitor The visitor to transform every value. * @param {JsonVisitor[]} deps A list of other visitors to run before. */ - addPostTransform(visitor: JsonVisitor, deps?: JsonVisitor[]) { + addPostTransform(visitor: JsonVisitor, deps?: JsonVisitor[]): void { this._post.add(visitor, deps); } @@ -386,7 +386,7 @@ export class CoreSchemaRegistry implements SchemaRegistry { this._ajv.addFormat(format.name, format.formatter); } - addSmartDefaultProvider<T>(source: string, provider: SmartDefaultProvider<T>) { + addSmartDefaultProvider<T>(source: string, provider: SmartDefaultProvider<T>): void { if (this._sourceMap.has(source)) { throw new Error(source); } @@ -424,11 +424,11 @@ export class CoreSchemaRegistry implements SchemaRegistry { } } - registerUriHandler(handler: UriHandler) { + registerUriHandler(handler: UriHandler): void { this._uriHandlers.add(handler); } - usePromptProvider(provider: PromptProvider) { + usePromptProvider(provider: PromptProvider): void { const isSetup = !!this._promptProvider; this._promptProvider = provider; diff --git a/packages/angular_devkit/core/src/json/schema/visitor.ts b/packages/angular_devkit/core/src/json/schema/visitor.ts index a063b92b463e..f7094615e56e 100644 --- a/packages/angular_devkit/core/src/json/schema/visitor.ts +++ b/packages/angular_devkit/core/src/json/schema/visitor.ts @@ -155,7 +155,7 @@ export function visitJson<ContextT>( return _visitJsonRecursive(json, visitor, buildJsonPointer([]), schema, refResolver, context); } -export function visitJsonSchema(schema: JsonSchema, visitor: JsonSchemaVisitor) { +export function visitJsonSchema(schema: JsonSchema, visitor: JsonSchemaVisitor): void { if (schema === false || schema === true) { // Nothing to visit. return; diff --git a/packages/angular_devkit/core/src/logger/logger.ts b/packages/angular_devkit/core/src/logger/logger.ts index e59d23ba7dc0..256e6b219e5e 100644 --- a/packages/angular_devkit/core/src/logger/logger.ts +++ b/packages/angular_devkit/core/src/logger/logger.ts @@ -101,11 +101,11 @@ export class Logger extends Observable<LogEntry> implements LoggerApi { }; } - createChild(name: string) { + createChild(name: string): Logger { return new (this.constructor as typeof Logger)(name, this); } - complete() { + complete(): void { this._subject.complete(); } @@ -121,20 +121,20 @@ export class Logger extends Observable<LogEntry> implements LoggerApi { this._subject.next(entry); } - debug(message: string, metadata: JsonObject = {}) { - return this.log('debug', message, metadata); + debug(message: string, metadata: JsonObject = {}): void { + this.log('debug', message, metadata); } - info(message: string, metadata: JsonObject = {}) { - return this.log('info', message, metadata); + info(message: string, metadata: JsonObject = {}): void { + this.log('info', message, metadata); } - warn(message: string, metadata: JsonObject = {}) { - return this.log('warn', message, metadata); + warn(message: string, metadata: JsonObject = {}): void { + this.log('warn', message, metadata); } - error(message: string, metadata: JsonObject = {}) { - return this.log('error', message, metadata); + error(message: string, metadata: JsonObject = {}): void { + this.log('error', message, metadata); } - fatal(message: string, metadata: JsonObject = {}) { - return this.log('fatal', message, metadata); + fatal(message: string, metadata: JsonObject = {}): void { + this.log('fatal', message, metadata); } override toString() { diff --git a/packages/angular_devkit/core/src/utils/priority-queue.ts b/packages/angular_devkit/core/src/utils/priority-queue.ts index fc00ff35acb8..e2baae889d1f 100644 --- a/packages/angular_devkit/core/src/utils/priority-queue.ts +++ b/packages/angular_devkit/core/src/utils/priority-queue.ts @@ -12,11 +12,11 @@ export class PriorityQueue<T> { constructor(private _comparator: (x: T, y: T) => number) {} - clear() { + clear(): void { this._items = new Array<T>(); } - push(item: T) { + push(item: T): void { const index = this._items.findIndex((existing) => this._comparator(item, existing) <= 0); if (index === -1) { diff --git a/packages/angular_devkit/core/src/virtual-fs/host/alias.ts b/packages/angular_devkit/core/src/virtual-fs/host/alias.ts index c8691dd16ea9..1b8c88e08b6b 100644 --- a/packages/angular_devkit/core/src/virtual-fs/host/alias.ts +++ b/packages/angular_devkit/core/src/virtual-fs/host/alias.ts @@ -56,7 +56,7 @@ import { ResolverHost } from './resolver'; * .subscribe(x => expect(x).toBe(content2)); */ export class AliasHost<StatsT extends object = {}> extends ResolverHost<StatsT> { - protected _aliases = new Map<Path, Path>(); + protected _aliases: Map<Path, Path> = new Map(); protected _resolve(path: Path): Path { let maybeAlias = this._aliases.get(path); diff --git a/packages/angular_devkit/core/src/virtual-fs/path.ts b/packages/angular_devkit/core/src/virtual-fs/path.ts index 266e097ff791..2dd0302d1539 100644 --- a/packages/angular_devkit/core/src/virtual-fs/path.ts +++ b/packages/angular_devkit/core/src/virtual-fs/path.ts @@ -120,7 +120,7 @@ export function join(p1: Path, ...others: string[]): Path { /** * Returns true if a path is absolute. */ -export function isAbsolute(p: Path) { +export function isAbsolute(p: Path): boolean { return p.startsWith(NormalizedSep); } @@ -166,7 +166,7 @@ export function relative(from: Path, to: Path): Path { * Returns a Path that is the resolution of p2, from p1. If p2 is absolute, it will return p2, * otherwise will join both p1 and p2. */ -export function resolve(p1: Path, p2: Path) { +export function resolve(p1: Path, p2: Path): Path { if (isAbsolute(p2)) { return p2; } else { @@ -233,7 +233,7 @@ export function noCacheNormalize(path: string): Path { // Match absolute windows path. const original = path; if (path.match(/^[A-Z]:[/\\]/i)) { - path = '\\' + path[0] + '\\' + path.slice(3); + path = '\\' + path[0].toUpperCase() + '\\' + path.slice(3); } // We convert Windows paths as well here. diff --git a/packages/angular_devkit/core/src/virtual-fs/path_spec.ts b/packages/angular_devkit/core/src/virtual-fs/path_spec.ts index a37d5796cf4c..4e416a1ff12e 100644 --- a/packages/angular_devkit/core/src/virtual-fs/path_spec.ts +++ b/packages/angular_devkit/core/src/virtual-fs/path_spec.ts @@ -73,7 +73,7 @@ describe('path', () => { expect(normalize('\\a\\b\\c')).toBe('/a/b/c'); expect(normalize('.\\a\\b\\c')).toBe('a/b/c'); expect(normalize('C:\\a\\b\\c')).toBe('/C/a/b/c'); - expect(normalize('c:\\a\\b\\c')).toBe('/c/a/b/c'); + expect(normalize('c:\\a\\b\\c')).toBe('/C/a/b/c'); expect(normalize('A:\\a\\b\\c')).toBe('/A/a/b/c'); expect(() => normalize('A:\\..\\..')).toThrow(new InvalidPathException('A:\\..\\..')); expect(normalize('\\.\\a\\b\\c')).toBe('/a/b/c'); @@ -131,6 +131,7 @@ describe('path', () => { ['/src/app/sub1/test1', '/src/app/sub2/test2', '../../sub2/test2'], ['/', '/a/b/c', 'a/b/c'], ['/a/b/c', '/d', '../../../d'], + ['E:\\abc', 'e:\\abc\\def', 'def'], ]; for (const [from, to, result] of tests) { @@ -161,8 +162,8 @@ describe('path', () => { }); it('asWindowsPath', () => { - expect(asWindowsPath(normalize('c:/'))).toBe('c:\\'); - expect(asWindowsPath(normalize('c:/b/'))).toBe('c:\\b'); - expect(asWindowsPath(normalize('c:/b/c'))).toBe('c:\\b\\c'); + expect(asWindowsPath(normalize('c:/'))).toBe('C:\\'); + expect(asWindowsPath(normalize('c:/b/'))).toBe('C:\\b'); + expect(asWindowsPath(normalize('c:/b/c'))).toBe('C:\\b\\c'); }); }); diff --git a/packages/angular_devkit/core/src/workspace/json/metadata.ts b/packages/angular_devkit/core/src/workspace/json/metadata.ts index fee862d6d8da..13909d0e36d2 100644 --- a/packages/angular_devkit/core/src/workspace/json/metadata.ts +++ b/packages/angular_devkit/core/src/workspace/json/metadata.ts @@ -10,7 +10,7 @@ import { JSONPath, Node, findNodeAtLocation, getNodeValue } from 'jsonc-parser'; import { JsonValue } from '../../json'; import { ProjectDefinition, TargetDefinition, WorkspaceDefinition } from '../definitions'; -export const JsonWorkspaceSymbol = Symbol.for('@angular/core:workspace-json'); +export const JsonWorkspaceSymbol: unique symbol = Symbol.for('@angular/core:workspace-json'); export interface JsonWorkspaceDefinition extends WorkspaceDefinition { [JsonWorkspaceSymbol]: JsonWorkspaceMetadata; diff --git a/packages/angular_devkit/core/src/workspace/json/reader_spec.ts b/packages/angular_devkit/core/src/workspace/json/reader_spec.ts index f23cc3cc813f..32647444ab2b 100644 --- a/packages/angular_devkit/core/src/workspace/json/reader_spec.ts +++ b/packages/angular_devkit/core/src/workspace/json/reader_spec.ts @@ -7,7 +7,7 @@ */ /* eslint-disable @typescript-eslint/no-non-null-assertion */ -import { readFileSync } from 'fs'; +import { readFileSync } from 'node:fs'; import { JsonObject } from '../../json'; import { stripIndent } from '../../utils/literals'; import { TargetDefinitionCollection, WorkspaceDefinition } from '../definitions'; diff --git a/packages/angular_devkit/core/src/workspace/json/writer_spec.ts b/packages/angular_devkit/core/src/workspace/json/writer_spec.ts index 0503fa3dc54a..e0d4a055147a 100644 --- a/packages/angular_devkit/core/src/workspace/json/writer_spec.ts +++ b/packages/angular_devkit/core/src/workspace/json/writer_spec.ts @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ -import { readFileSync } from 'fs'; -import { join } from 'path'; +import { readFileSync } from 'node:fs'; +import { join } from 'node:path'; import { JsonArray, JsonObject } from '../../json'; import { stripIndent } from '../../utils/literals'; import { ProjectDefinitionCollection, WorkspaceDefinition } from '../definitions'; diff --git a/packages/angular_devkit/schematics/BUILD.bazel b/packages/angular_devkit/schematics/BUILD.bazel index 3ae57303c3a7..78c7b5920a85 100644 --- a/packages/angular_devkit/schematics/BUILD.bazel +++ b/packages/angular_devkit/schematics/BUILD.bazel @@ -1,7 +1,6 @@ -load("@npm//@angular/build-tooling/bazel/api-golden:index.bzl", "api_golden_test_npm_package") -load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") -load("//tools:defaults.bzl", "pkg_npm") -load("//tools:interop.bzl", "ts_project") +load("@devinfra//bazel/api-golden:index_rjs.bzl", "api_golden_test_npm_package") +load("@npm2//:defs.bzl", "npm_link_all_packages") +load("//tools:defaults2.bzl", "jasmine_test", "npm_package", "ts_project") # Copyright Google Inc. All Rights Reserved. # @@ -11,6 +10,8 @@ package(default_visibility = ["//visibility:public"]) licenses(["notice"]) +npm_link_all_packages() + # @angular-devkit/schematics ts_project( @@ -24,16 +25,13 @@ ts_project( data = [ "package.json", ], - interop_deps = [ - "//packages/angular_devkit/core", - "//packages/angular_devkit/core/node", # TODO: get rid of this for 6.0 - ], module_name = "@angular-devkit/schematics", deps = [ - "//:root_modules/@types/node", - "//:root_modules/jsonc-parser", - "//:root_modules/magic-string", - "//:root_modules/rxjs", + ":node_modules/@angular-devkit/core", + "//:node_modules/@types/node", + "//:node_modules/jsonc-parser", + "//:node_modules/magic-string", + "//:node_modules/rxjs", ], ) @@ -41,21 +39,20 @@ ts_project( name = "schematics_test_lib", testonly = True, srcs = glob(["src/**/*_spec.ts"]), - interop_deps = [ - "//packages/angular_devkit/core", - "//packages/angular_devkit/core/node", - "//packages/angular_devkit/schematics/testing", - ], + # TODO: Fix strict_deps failure + ignore_strict_deps = True, deps = [ - ":schematics_rjs", - "//:root_modules/@types/jasmine", - "//:root_modules/rxjs", + ":node_modules/@angular-devkit/core", + ":schematics", + "//:node_modules/@types/jasmine", + "//:node_modules/rxjs", + "//packages/angular_devkit/schematics/testing", ], ) -jasmine_node_test( +jasmine_test( name = "schematics_test", - deps = [":schematics_test_lib"], + data = [":schematics_test_lib"], ) genrule( @@ -65,8 +62,8 @@ genrule( cmd = "cp $(execpath //:LICENSE) $@", ) -pkg_npm( - name = "npm_package", +npm_package( + name = "pkg", pkg_deps = [ "//packages/angular_devkit/core:package.json", ], @@ -90,7 +87,9 @@ api_golden_test_npm_package( ":npm_package", "//goldens:public-api", ], - golden_dir = "angular_cli/goldens/public-api/angular_devkit/schematics", - npm_package = "angular_cli/packages/angular_devkit/schematics/npm_package", - types = ["@npm//@types/node"], + golden_dir = "goldens/public-api/angular_devkit/schematics", + npm_package = "packages/angular_devkit/schematics/npm_package", + types = { + "//:node_modules/@types/node": "node", + }, ) diff --git a/packages/angular_devkit/schematics/package.json b/packages/angular_devkit/schematics/package.json index 19e19539572c..7619e468bbbb 100644 --- a/packages/angular_devkit/schematics/package.json +++ b/packages/angular_devkit/schematics/package.json @@ -13,7 +13,7 @@ "schematics" ], "dependencies": { - "@angular-devkit/core": "0.0.0-PLACEHOLDER", + "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", "jsonc-parser": "3.3.1", "magic-string": "0.30.17", "ora": "5.4.1", diff --git a/packages/angular_devkit/schematics/src/engine/engine.ts b/packages/angular_devkit/schematics/src/engine/engine.ts index 15af120f7c5d..033ecc5a383d 100644 --- a/packages/angular_devkit/schematics/src/engine/engine.ts +++ b/packages/angular_devkit/schematics/src/engine/engine.ts @@ -7,8 +7,8 @@ */ import { BaseException, PriorityQueue, logging } from '@angular-devkit/core'; +import { Url } from 'node:url'; import { Observable, concatMap, from as observableFrom } from 'rxjs'; -import { Url } from 'url'; import { MergeStrategy } from '../tree/interface'; import { NullTree } from '../tree/null'; import { empty } from '../tree/static'; diff --git a/packages/angular_devkit/schematics/src/engine/interface.ts b/packages/angular_devkit/schematics/src/engine/interface.ts index bb4e3ccc33ac..ddc574fe25b1 100644 --- a/packages/angular_devkit/schematics/src/engine/interface.ts +++ b/packages/angular_devkit/schematics/src/engine/interface.ts @@ -7,8 +7,8 @@ */ import { logging } from '@angular-devkit/core'; +import { Url } from 'node:url'; import { Observable } from 'rxjs'; -import { Url } from 'url'; import { FileEntry, MergeStrategy, Tree } from '../tree/interface'; import { Workflow } from '../workflow/interface'; @@ -236,4 +236,4 @@ export type Source = (context: SchematicContext) => Tree | Observable<Tree>; export type Rule = ( tree: Tree, context: SchematicContext, -) => Tree | Observable<Tree> | Rule | Promise<void | Rule> | void; +) => Tree | Observable<Tree> | Rule | Promise<void | Tree | Rule> | void; diff --git a/packages/angular_devkit/schematics/src/rules/base_spec.ts b/packages/angular_devkit/schematics/src/rules/base_spec.ts index ef28788d0959..09963fd48b1f 100644 --- a/packages/angular_devkit/schematics/src/rules/base_spec.ts +++ b/packages/angular_devkit/schematics/src/rules/base_spec.ts @@ -8,12 +8,12 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ import { Path, virtualFs } from '@angular-devkit/core'; -import { HostTree, MergeStrategy, partitionApplyMerge } from '@angular-devkit/schematics'; import { lastValueFrom, of as observableOf } from 'rxjs'; import { Rule, SchematicContext, Source } from '../engine/interface'; -import { Tree } from '../tree/interface'; +import { HostTree } from '../tree/host-tree'; +import { MergeStrategy, Tree } from '../tree/interface'; import { empty } from '../tree/static'; -import { apply, applyToSubtree, chain } from './base'; +import { apply, applyToSubtree, chain, partitionApplyMerge } from './base'; import { callRule, callSource } from './call'; import { move } from './move'; @@ -47,6 +47,29 @@ describe('chain', () => { .then(done, done.fail); }); + it('works with async rules', (done) => { + const rulesCalled: Tree[] = []; + + const tree0 = empty(); + const tree1 = empty(); + const tree2 = empty(); + const tree3 = empty(); + + const rule0: Rule = async (tree: Tree) => ((rulesCalled[0] = tree), tree1); + const rule1: Rule = async (tree: Tree) => ((rulesCalled[1] = tree), tree2); + const rule2: Rule = async (tree: Tree) => ((rulesCalled[2] = tree), tree3); + + lastValueFrom(callRule(chain([rule0, rule1, rule2]), tree0, context)) + .then((result) => { + expect(result).not.toBe(tree0); + expect(rulesCalled[0]).toBe(tree0); + expect(rulesCalled[1]).toBe(tree1); + expect(rulesCalled[2]).toBe(tree2); + expect(result).toBe(tree3); + }) + .then(done, done.fail); + }); + it('works with a sync generator of rules', async () => { const rulesCalled: Tree[] = []; diff --git a/packages/angular_devkit/schematics/src/rules/call_spec.ts b/packages/angular_devkit/schematics/src/rules/call_spec.ts index e8a0755ab485..ef71747fb2df 100644 --- a/packages/angular_devkit/schematics/src/rules/call_spec.ts +++ b/packages/angular_devkit/schematics/src/rules/call_spec.ts @@ -8,10 +8,9 @@ /* eslint-disable @typescript-eslint/no-non-null-assertion */ /* eslint-disable @typescript-eslint/no-explicit-any */ -import { MergeStrategy } from '@angular-devkit/schematics'; import { of as observableOf } from 'rxjs'; import { Rule, SchematicContext, Source } from '../engine/interface'; -import { Tree } from '../tree/interface'; +import { MergeStrategy, Tree } from '../tree/interface'; import { empty } from '../tree/static'; import { InvalidRuleResultException, diff --git a/packages/angular_devkit/schematics/src/rules/template_spec.ts b/packages/angular_devkit/schematics/src/rules/template_spec.ts index 377068d15c32..076550e6f043 100644 --- a/packages/angular_devkit/schematics/src/rules/template_spec.ts +++ b/packages/angular_devkit/schematics/src/rules/template_spec.ts @@ -8,8 +8,8 @@ /* eslint-disable import/no-extraneous-dependencies */ import { normalize } from '@angular-devkit/core'; -import { UnitTestTree } from '@angular-devkit/schematics/testing'; import { of as observableOf } from 'rxjs'; +import { UnitTestTree } from '../../testing'; import { SchematicContext } from '../engine/interface'; import { HostTree } from '../tree/host-tree'; import { FileEntry, MergeStrategy } from '../tree/interface'; diff --git a/packages/angular_devkit/schematics/src/rules/url.ts b/packages/angular_devkit/schematics/src/rules/url.ts index 3b000f04f6c7..70362d74b019 100644 --- a/packages/angular_devkit/schematics/src/rules/url.ts +++ b/packages/angular_devkit/schematics/src/rules/url.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { parse } from 'url'; +import { parse } from 'node:url'; import { SchematicContext, Source } from '../engine/interface'; export function url(urlString: string): Source { diff --git a/packages/angular_devkit/schematics/src/sink/host_spec.ts b/packages/angular_devkit/schematics/src/sink/host_spec.ts index 9d4965e5a834..9a89b82af91d 100644 --- a/packages/angular_devkit/schematics/src/sink/host_spec.ts +++ b/packages/angular_devkit/schematics/src/sink/host_spec.ts @@ -7,8 +7,8 @@ */ import { normalize, virtualFs } from '@angular-devkit/core'; -import { HostSink } from '@angular-devkit/schematics'; import { HostCreateTree, HostTree } from '../tree/host-tree'; +import { HostSink } from './host'; describe('FileSystemSink', () => { it('works', (done) => { diff --git a/packages/angular_devkit/schematics/tasks/BUILD.bazel b/packages/angular_devkit/schematics/tasks/BUILD.bazel index 32498fd38bad..26ee70e8b0b9 100644 --- a/packages/angular_devkit/schematics/tasks/BUILD.bazel +++ b/packages/angular_devkit/schematics/tasks/BUILD.bazel @@ -18,15 +18,15 @@ ts_project( ], ), data = ["package.json"], - interop_deps = [ - "//packages/angular_devkit/core", - "//packages/angular_devkit/core/node", - "//packages/angular_devkit/schematics", - ], + # TODO: Fix strict_deps failure + ignore_strict_deps = True, module_name = "@angular-devkit/schematics/tasks", deps = [ - "//:root_modules/@types/node", - "//:root_modules/ora", - "//:root_modules/rxjs", + "//:node_modules/@types/node", + "//:node_modules/ora", + "//:node_modules/rxjs", + "//packages/angular_devkit/core:core", + "//packages/angular_devkit/core/node:node", + "//packages/angular_devkit/schematics:schematics", ], ) diff --git a/packages/angular_devkit/schematics/tasks/node/BUILD.bazel b/packages/angular_devkit/schematics/tasks/node/BUILD.bazel index a84516b4f6de..c6d26d420436 100644 --- a/packages/angular_devkit/schematics/tasks/node/BUILD.bazel +++ b/packages/angular_devkit/schematics/tasks/node/BUILD.bazel @@ -16,15 +16,13 @@ ts_project( "**/*_spec.ts", ], ), - interop_deps = [ + module_name = "@angular-devkit/schematics/tasks/node", + deps = [ + "//:node_modules/@types/node", + "//:node_modules/rxjs", "//packages/angular_devkit/core", "//packages/angular_devkit/core/node", "//packages/angular_devkit/schematics", "//packages/angular_devkit/schematics/tasks", ], - module_name = "@angular-devkit/schematics/tasks/node", - deps = [ - "//:root_modules/@types/node", - "//:root_modules/rxjs", - ], ) diff --git a/packages/angular_devkit/schematics/tasks/package-manager/executor.ts b/packages/angular_devkit/schematics/tasks/package-manager/executor.ts index a88020a0e47a..99a768ffec64 100644 --- a/packages/angular_devkit/schematics/tasks/package-manager/executor.ts +++ b/packages/angular_devkit/schematics/tasks/package-manager/executor.ts @@ -7,9 +7,9 @@ */ import { BaseException } from '@angular-devkit/core'; -import { SpawnOptions, spawn } from 'child_process'; +import { SpawnOptions, spawn } from 'node:child_process'; +import * as path from 'node:path'; import ora from 'ora'; -import * as path from 'path'; import { Observable } from 'rxjs'; import { TaskExecutor, UnsuccessfulWorkflowExecution } from '../../src'; import { NodePackageTaskFactoryOptions, NodePackageTaskOptions } from './options'; diff --git a/packages/angular_devkit/schematics/tasks/repo-init/executor.ts b/packages/angular_devkit/schematics/tasks/repo-init/executor.ts index d067363cc2ff..8d1ba4804493 100644 --- a/packages/angular_devkit/schematics/tasks/repo-init/executor.ts +++ b/packages/angular_devkit/schematics/tasks/repo-init/executor.ts @@ -7,8 +7,8 @@ */ import { tags } from '@angular-devkit/core'; -import { SpawnOptions, spawn } from 'child_process'; -import * as path from 'path'; +import { SpawnOptions, spawn } from 'node:child_process'; +import * as path from 'node:path'; import { SchematicContext, TaskExecutor } from '../../src'; import { RepositoryInitializerTaskFactoryOptions, diff --git a/packages/angular_devkit/schematics/testing/BUILD.bazel b/packages/angular_devkit/schematics/testing/BUILD.bazel index cb1227cb11b3..d9dd07895ded 100644 --- a/packages/angular_devkit/schematics/testing/BUILD.bazel +++ b/packages/angular_devkit/schematics/testing/BUILD.bazel @@ -14,14 +14,14 @@ ts_project( include = ["**/*.ts"], ), data = ["package.json"], - interop_deps = [ - "//packages/angular_devkit/core", - "//packages/angular_devkit/schematics", - "//packages/angular_devkit/schematics/tasks/node", - "//packages/angular_devkit/schematics/tools", - ], + # TODO: Fix strict_deps failure + ignore_strict_deps = True, module_name = "@angular-devkit/schematics/testing", deps = [ - "//:root_modules/rxjs", + "//:node_modules/rxjs", + "//packages/angular_devkit/core:core", + "//packages/angular_devkit/schematics:schematics", + "//packages/angular_devkit/schematics/tasks/node:node", + "//packages/angular_devkit/schematics/tools:tools", ], ) diff --git a/packages/angular_devkit/schematics/testing/schematic-test-runner.ts b/packages/angular_devkit/schematics/testing/schematic-test-runner.ts index 5b1c783f7519..a37a2ed6921b 100644 --- a/packages/angular_devkit/schematics/testing/schematic-test-runner.ts +++ b/packages/angular_devkit/schematics/testing/schematic-test-runner.ts @@ -43,8 +43,8 @@ export class UnitTestTree extends DelegateTree { } export class SchematicTestRunner { - private _engineHost = new NodeModulesTestEngineHost(); - private _engine: SchematicEngine<{}, {}> = new SchematicEngine(this._engineHost); + private _engineHost: NodeModulesTestEngineHost; + private _engine: SchematicEngine<{}, {}>; private _collection: Collection<{}, {}>; private _logger: logging.Logger; @@ -52,6 +52,14 @@ export class SchematicTestRunner { private _collectionName: string, collectionPath: string, ) { + this._engineHost = new NodeModulesTestEngineHost([ + // Leverage the specified collection path as an additional base for resolving other + // collections by name. This is useful in e.g. pnpm workspaces where `@angular-devkit/schematics` + // doesn't necessarily have access to e.g. `@schematics/angular`. + collectionPath, + ]); + this._engine = new SchematicEngine(this._engineHost); + this._engineHost.registerCollection(_collectionName, collectionPath); this._logger = new logging.Logger('test'); diff --git a/packages/angular_devkit/schematics/tools/BUILD.bazel b/packages/angular_devkit/schematics/tools/BUILD.bazel index 28491235a34b..9ade88d4cbeb 100644 --- a/packages/angular_devkit/schematics/tools/BUILD.bazel +++ b/packages/angular_devkit/schematics/tools/BUILD.bazel @@ -1,5 +1,4 @@ -load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") -load("//tools:interop.bzl", "ts_project") +load("//tools:defaults2.bzl", "jasmine_test", "ts_project") # Copyright Google Inc. All Rights Reserved. # @@ -19,19 +18,16 @@ ts_project( ], ), data = ["package.json"], - interop_deps = [ - "//packages/angular_devkit/core", - "//packages/angular_devkit/core/node", + module_name = "@angular-devkit/schematics/tools", + deps = [ + "//:node_modules/@types/node", + "//:node_modules/jsonc-parser", + "//:node_modules/rxjs", "//packages/angular_devkit/schematics", + "//packages/angular_devkit/schematics:node_modules/@angular-devkit/core", "//packages/angular_devkit/schematics/tasks", "//packages/angular_devkit/schematics/tasks/node", ], - module_name = "@angular-devkit/schematics/tools", - deps = [ - "//:root_modules/@types/node", - "//:root_modules/jsonc-parser", - "//:root_modules/rxjs", - ], ) ts_project( @@ -43,22 +39,20 @@ ts_project( "test/**/*.ts", ], ), - interop_deps = [ - "//packages/angular_devkit/core", - "//packages/angular_devkit/core/node", + deps = [ + ":tools", + "//:node_modules/@types/jasmine", + "//:node_modules/@types/node", + "//:node_modules/rxjs", "//packages/angular_devkit/schematics", + "//packages/angular_devkit/schematics:node_modules/@angular-devkit/core", "//packages/angular_devkit/schematics/tasks", "//packages/angular_devkit/schematics/testing", "//tests/angular_devkit/schematics/tools/file-system-engine-host:file_system_engine_host_test_lib", ], - deps = [ - ":tools_rjs", - "//:root_modules/@types/jasmine", - "//:root_modules/rxjs", - ], ) -jasmine_node_test( +jasmine_test( name = "tools_test", - deps = [":tools_test_lib"], + data = [":tools_test_lib"], ) diff --git a/packages/angular_devkit/schematics/tools/export-ref.ts b/packages/angular_devkit/schematics/tools/export-ref.ts index fc684188eb30..aa5a71f10af7 100644 --- a/packages/angular_devkit/schematics/tools/export-ref.ts +++ b/packages/angular_devkit/schematics/tools/export-ref.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { dirname, resolve } from 'path'; +import { dirname, resolve } from 'node:path'; export class ExportStringRef<T> { private _ref?: T; diff --git a/packages/angular_devkit/schematics/tools/export-ref_spec.ts b/packages/angular_devkit/schematics/tools/export-ref_spec.ts index 1aa33abe551e..9ca0ca033911 100644 --- a/packages/angular_devkit/schematics/tools/export-ref_spec.ts +++ b/packages/angular_devkit/schematics/tools/export-ref_spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import * as path from 'path'; +import * as path from 'node:path'; import { ExportStringRef } from './export-ref'; import { CollectionCannotBeResolvedException } from '.'; diff --git a/packages/angular_devkit/schematics/tools/fallback-engine-host.ts b/packages/angular_devkit/schematics/tools/fallback-engine-host.ts index 1074623546cd..97bfbba5c26d 100644 --- a/packages/angular_devkit/schematics/tools/fallback-engine-host.ts +++ b/packages/angular_devkit/schematics/tools/fallback-engine-host.ts @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ +import { Url } from 'node:url'; import { Observable, mergeMap, of as observableOf, throwError } from 'rxjs'; -import { Url } from 'url'; import { CollectionDescription, EngineHost, diff --git a/packages/angular_devkit/schematics/tools/file-system-engine-host-base.ts b/packages/angular_devkit/schematics/tools/file-system-engine-host-base.ts index bac4b05e73a5..7ce607a50431 100644 --- a/packages/angular_devkit/schematics/tools/file-system-engine-host-base.ts +++ b/packages/angular_devkit/schematics/tools/file-system-engine-host-base.ts @@ -8,10 +8,10 @@ import { BaseException, JsonObject, normalize, virtualFs } from '@angular-devkit/core'; import { NodeJsSyncHost } from '@angular-devkit/core/node'; -import { existsSync, statSync } from 'fs'; -import { dirname, isAbsolute, join, resolve } from 'path'; +import { existsSync, statSync } from 'node:fs'; +import { dirname, isAbsolute, join, resolve } from 'node:path'; +import { Url } from 'node:url'; import { Observable, isObservable, lastValueFrom, from as observableFrom, throwError } from 'rxjs'; -import { Url } from 'url'; import { HostCreateTree, RuleFactory, diff --git a/packages/angular_devkit/schematics/tools/file-system-engine-host.ts b/packages/angular_devkit/schematics/tools/file-system-engine-host.ts index a6a8e1db8b70..bd24f8808d77 100644 --- a/packages/angular_devkit/schematics/tools/file-system-engine-host.ts +++ b/packages/angular_devkit/schematics/tools/file-system-engine-host.ts @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ -import { existsSync } from 'fs'; -import { join } from 'path'; +import { existsSync } from 'node:fs'; +import { join } from 'node:path'; import { Observable, catchError, from, throwError } from 'rxjs'; import { RuleFactory, TaskExecutor, UnregisteredTaskException } from '../src'; import { FileSystemCollectionDesc, FileSystemSchematicDesc } from './description'; diff --git a/packages/angular_devkit/schematics/tools/file-system-engine-host_spec.ts b/packages/angular_devkit/schematics/tools/file-system-engine-host_spec.ts index 73cb6f6738eb..3d785563e663 100644 --- a/packages/angular_devkit/schematics/tools/file-system-engine-host_spec.ts +++ b/packages/angular_devkit/schematics/tools/file-system-engine-host_spec.ts @@ -8,10 +8,10 @@ /* eslint-disable @typescript-eslint/no-explicit-any, import/no-extraneous-dependencies */ import { normalize, virtualFs } from '@angular-devkit/core'; -import { HostSink, HostTree, SchematicEngine } from '@angular-devkit/schematics'; -import { FileSystemEngineHost } from '@angular-devkit/schematics/tools'; -import * as path from 'path'; +import * as path from 'node:path'; import { from, lastValueFrom, of as observableOf } from 'rxjs'; +import { HostSink, HostTree, SchematicEngine } from '../index'; +import { FileSystemEngineHost } from './file-system-engine-host'; describe('FileSystemEngineHost', () => { // We need to resolve a file that actually exists, and not just a folder. diff --git a/packages/angular_devkit/schematics/tools/file-system-utility.ts b/packages/angular_devkit/schematics/tools/file-system-utility.ts index ea51d9fced96..16a07a08eb5a 100644 --- a/packages/angular_devkit/schematics/tools/file-system-utility.ts +++ b/packages/angular_devkit/schematics/tools/file-system-utility.ts @@ -7,9 +7,9 @@ */ import { JsonValue } from '@angular-devkit/core'; -import { FileDoesNotExistException } from '@angular-devkit/schematics'; -import { readFileSync } from 'fs'; import { ParseError, parse, printParseErrorCode } from 'jsonc-parser'; +import { readFileSync } from 'node:fs'; +import { FileDoesNotExistException } from '../src/exception/exception'; export function readJsonFile(path: string): JsonValue { let data; diff --git a/packages/angular_devkit/schematics/tools/node-module-engine-host.ts b/packages/angular_devkit/schematics/tools/node-module-engine-host.ts index 880d9fbdc974..c24599cf345e 100644 --- a/packages/angular_devkit/schematics/tools/node-module-engine-host.ts +++ b/packages/angular_devkit/schematics/tools/node-module-engine-host.ts @@ -7,7 +7,7 @@ */ import { BaseException } from '@angular-devkit/core'; -import { dirname, join, resolve } from 'path'; +import { dirname, join, resolve } from 'node:path'; import { RuleFactory } from '../src'; import { FileSystemCollectionDesc, FileSystemSchematicDesc } from './description'; import { ExportStringRef } from './export-ref'; diff --git a/packages/angular_devkit/schematics/tools/node-module-engine-host_spec.ts b/packages/angular_devkit/schematics/tools/node-module-engine-host_spec.ts index fdfb54e053f9..125a3ff44aaa 100644 --- a/packages/angular_devkit/schematics/tools/node-module-engine-host_spec.ts +++ b/packages/angular_devkit/schematics/tools/node-module-engine-host_spec.ts @@ -6,28 +6,23 @@ * found in the LICENSE file at https://angular.dev/license */ -import { SchematicEngine } from '@angular-devkit/schematics'; -import * as fs from 'fs'; -import * as os from 'os'; -import * as path from 'path'; +import * as fs from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; +import { SchematicEngine } from '../index'; import { NodeModulesEngineHost } from './node-module-engine-host'; const TMP_DIR = process.env['TEST_TMPDIR'] || os.tmpdir(); describe('NodeModulesEngineHost', () => { let tmpDir!: string; - let previousDir!: string; beforeEach(() => { tmpDir = fs.mkdtempSync( path.join(TMP_DIR, 'angular-devkit-schematics-tools-node-module-engine-host'), ); - previousDir = process.cwd(); - process.chdir(tmpDir); }); - afterEach(() => process.chdir(previousDir)); - /** Creates a fake NPM module that can be used to test the node module engine host. */ function createFakeNpmModule() { fs.mkdirSync(path.join(tmpDir, 'node_modules')); @@ -47,19 +42,11 @@ describe('NodeModulesEngineHost', () => { it('should properly create collections with explicit collection path', () => { createFakeNpmModule(); - const engineHost = new NodeModulesEngineHost(); + const engineHost = new NodeModulesEngineHost([tmpDir]); const engine = new SchematicEngine(engineHost); - // Under Bazel 'require.resolve' is patched to use Bazel resolutions from the MANIFEST FILES. - // Adding a temporary file won't be enough to make Bazel aware of this file. - // We provide the full path here just to verify that the underlying logic works - let prefix = ''; - if (process.env['BAZEL_TARGET']) { - prefix = path.join(process.cwd(), 'node_modules'); - } - expect(() => { - engine.createCollection(path.join(prefix, '@angular/core', './schematics/migrations.json')); + engine.createCollection(path.join('@angular/core', './schematics/migrations.json')); }).not.toThrow(); }); }); diff --git a/packages/angular_devkit/schematics/tools/workflow/node-workflow.ts b/packages/angular_devkit/schematics/tools/workflow/node-workflow.ts index b976477f1bb4..c8bf5fee5354 100644 --- a/packages/angular_devkit/schematics/tools/workflow/node-workflow.ts +++ b/packages/angular_devkit/schematics/tools/workflow/node-workflow.ts @@ -8,7 +8,7 @@ import { Path, getSystemPath, normalize, schema, virtualFs } from '@angular-devkit/core'; import { NodeJsSyncHost } from '@angular-devkit/core/node'; -import { workflow } from '@angular-devkit/schematics'; +import { workflow } from '../../src'; import { BuiltinTaskExecutor } from '../../tasks/node'; import { FileSystemEngine } from '../description'; import { OptionTransform } from '../file-system-engine-host-base'; diff --git a/packages/angular_devkit/schematics/tools/workflow/node-workflow_spec.ts b/packages/angular_devkit/schematics/tools/workflow/node-workflow_spec.ts index f01ff0653465..3d19f401c82b 100644 --- a/packages/angular_devkit/schematics/tools/workflow/node-workflow_spec.ts +++ b/packages/angular_devkit/schematics/tools/workflow/node-workflow_spec.ts @@ -8,8 +8,8 @@ /* eslint-disable import/no-extraneous-dependencies */ import { NodeJsSyncHost } from '@angular-devkit/core/node'; -import { NodeWorkflow } from '@angular-devkit/schematics/tools'; -import * as path from 'path'; +import * as path from 'node:path'; +import { NodeWorkflow } from './node-workflow'; describe('NodeWorkflow', () => { // TODO: this test seems to either not work on windows or on linux. diff --git a/packages/angular_devkit/schematics_cli/BUILD.bazel b/packages/angular_devkit/schematics_cli/BUILD.bazel index 605c6092233c..59d464306f19 100644 --- a/packages/angular_devkit/schematics_cli/BUILD.bazel +++ b/packages/angular_devkit/schematics_cli/BUILD.bazel @@ -1,6 +1,5 @@ -load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") -load("//tools:defaults.bzl", "pkg_npm") -load("//tools:interop.bzl", "ts_project") +load("@npm2//:defs.bzl", "npm_link_all_packages") +load("//tools:defaults2.bzl", "npm_package", "ts_project") load("//tools:ts_json_schema.bzl", "ts_json_schema") # Copyright Google Inc. All Rights Reserved. @@ -11,6 +10,21 @@ licenses(["notice"]) package(default_visibility = ["//visibility:public"]) +npm_link_all_packages() + +RUNTIME_ASSETS = [ + "blank/schema.json", + "collection.json", + "package.json", + "schematic/schema.json", +] + glob( + include = [ + "blank/project-files/**/*", + "blank/schematic-files/**/*", + "schematic/files/**/*", + ], +) + # @angular-devkit/schematics-cli ts_project( name = "schematics_cli", @@ -29,55 +43,17 @@ ts_project( "//packages/angular_devkit/schematics_cli:blank/schema.ts", "//packages/angular_devkit/schematics_cli:schematic/schema.ts", ], - data = [ - "blank/schema.json", - "collection.json", - "package.json", - "schematic/schema.json", - ] + glob( - include = [ - "blank/project-files/**/*", - "blank/schematic-files/**/*", - "schematic/files/**/*", - ], - ), - interop_deps = [ - "//packages/angular_devkit/schematics", - "//packages/angular_devkit/schematics/tasks", - "//packages/angular_devkit/schematics/tools", - ], + data = RUNTIME_ASSETS, module_name = "@angular-devkit/schematics-cli", deps = [ - "//:root_modules/@inquirer/prompts", - "//:root_modules/@types/node", - "//:root_modules/@types/yargs-parser", - "//:root_modules/ansi-colors", - "//:root_modules/symbol-observable", - "//:root_modules/yargs-parser", - "//packages/angular_devkit/core:core_rjs", - "//packages/angular_devkit/core/node:node_rjs", - ], -) - -ts_project( - name = "schematics_cli_test_lib", - testonly = True, - srcs = glob( - include = [ - "bin/**/*_spec.ts", - ], - ), - deps = [ - ":schematics_cli_rjs", - ], -) - -jasmine_node_test( - name = "schematics_cli_test", - srcs = [":schematics_cli_test_lib"], - data = [ - # The package is loaded at runtime within the tests - ":schematics_cli", + ":node_modules/@angular-devkit/core", + ":node_modules/@angular-devkit/schematics", + "//:node_modules/@inquirer/prompts", + "//:node_modules/@types/node", + "//:node_modules/@types/yargs-parser", + "//:node_modules/ansi-colors", + "//:node_modules/symbol-observable", + "//:node_modules/yargs-parser", ], ) @@ -98,14 +74,14 @@ genrule( cmd = "cp $(execpath //:LICENSE) $@", ) -pkg_npm( - name = "npm_package", +npm_package( + name = "pkg", pkg_deps = [ "//packages/angular_devkit/schematics:package.json", "//packages/angular_devkit/core:package.json", ], tags = ["release-package"], - deps = [ + deps = RUNTIME_ASSETS + [ ":README.md", ":license", ":schematics_cli", diff --git a/packages/angular_devkit/schematics_cli/package.json b/packages/angular_devkit/schematics_cli/package.json index b8d86d69e86b..ed4602282269 100644 --- a/packages/angular_devkit/schematics_cli/package.json +++ b/packages/angular_devkit/schematics_cli/package.json @@ -16,9 +16,9 @@ ], "schematics": "./collection.json", "dependencies": { - "@angular-devkit/core": "0.0.0-PLACEHOLDER", - "@angular-devkit/schematics": "0.0.0-PLACEHOLDER", - "@inquirer/prompts": "7.2.1", + "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", + "@angular-devkit/schematics": "workspace:0.0.0-PLACEHOLDER", + "@inquirer/prompts": "7.3.2", "ansi-colors": "4.1.3", "symbol-observable": "4.0.0", "yargs-parser": "21.1.1" diff --git a/packages/angular_devkit/schematics_cli/schematic/files/package.json b/packages/angular_devkit/schematics_cli/schematic/files/package.json index b3c486274bdf..51a8e0beab6f 100644 --- a/packages/angular_devkit/schematics_cli/schematic/files/package.json +++ b/packages/angular_devkit/schematics_cli/schematic/files/package.json @@ -20,6 +20,6 @@ "devDependencies": { "@types/node": "^18.18.0", "@types/jasmine": "~5.1.0", - "jasmine": "~5.5.0" + "jasmine": "~5.6.0" } } diff --git a/packages/angular_devkit/schematics_cli/test/BUILD.bazel b/packages/angular_devkit/schematics_cli/test/BUILD.bazel new file mode 100644 index 000000000000..da03ab72ff54 --- /dev/null +++ b/packages/angular_devkit/schematics_cli/test/BUILD.bazel @@ -0,0 +1,31 @@ +load("@aspect_rules_js//npm:defs.bzl", "npm_link_package") +load("//tools:defaults2.bzl", "jasmine_test", "ts_project") + +ts_project( + name = "schematics_cli_test_lib", + testonly = True, + srcs = glob(["**/*"]), + deps = [ + "//packages/angular_devkit/schematics_cli", + ], +) + +# Note: Link the schematics CLI package into node modules for testing. Notably, tests +# of a package typically don't use the npm package, to e.g. allow for relative +# imports, but here this is an exception as the package needs to be resolvable at runtime. +npm_link_package( + name = "node_modules/@angular-devkit/schematics-cli", + src = "//packages/angular_devkit/schematics_cli:pkg", + package = "@angular-devkit/schematics-cli", + root_package = package_name(), +) + +jasmine_test( + name = "schematics_cli_test", + data = [ + ":schematics_cli_test_lib", + # The npm package itself is needed for the test at runtime, so we + # link it into this folder as `node_modules/@angular-devkit/schematics-cli`. + ":node_modules/@angular-devkit/schematics-cli", + ], +) diff --git a/packages/angular_devkit/schematics_cli/bin/schematics_spec.ts b/packages/angular_devkit/schematics_cli/test/schematics.spec.ts similarity index 98% rename from packages/angular_devkit/schematics_cli/bin/schematics_spec.ts rename to packages/angular_devkit/schematics_cli/test/schematics.spec.ts index 462b0afdf405..5dcf2fc962f0 100644 --- a/packages/angular_devkit/schematics_cli/bin/schematics_spec.ts +++ b/packages/angular_devkit/schematics_cli/test/schematics.spec.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { main } from './schematics'; +import { main } from '../bin/schematics'; // We only care about the write method in these mocks of NodeJS.WriteStream. class MockWriteStream { diff --git a/packages/ngtools/webpack/BUILD.bazel b/packages/ngtools/webpack/BUILD.bazel index 470fcec06919..68006eee2f03 100644 --- a/packages/ngtools/webpack/BUILD.bazel +++ b/packages/ngtools/webpack/BUILD.bazel @@ -3,15 +3,16 @@ # Use of this source code is governed by an MIT-style license that can be # found in the LICENSE file at https://angular.dev/license -load("@npm//@angular/build-tooling/bazel/api-golden:index.bzl", "api_golden_test_npm_package") -load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") -load("//tools:defaults.bzl", "pkg_npm") -load("//tools:interop.bzl", "ts_project") +load("@devinfra//bazel/api-golden:index_rjs.bzl", "api_golden_test_npm_package") +load("@npm2//:defs.bzl", "npm_link_all_packages") +load("//tools:defaults2.bzl", "jasmine_test", "npm_package", "ts_project") licenses(["notice"]) package(default_visibility = ["//visibility:public"]) +npm_link_all_packages() + ts_project( name = "webpack", srcs = glob( @@ -30,10 +31,10 @@ ts_project( ], module_name = "@ngtools/webpack", deps = [ - "//:root_modules/@angular/compiler-cli", - "//:root_modules/@types/node", - "//:root_modules/typescript", - "//:root_modules/webpack", + "//:node_modules/@angular/compiler-cli", + "//:node_modules/@types/node", + "//:node_modules/typescript", + "//:node_modules/webpack", ], ) @@ -46,20 +47,22 @@ ts_project( "src/**/*_spec_helpers.ts", ], ), - interop_deps = [ - "//packages/angular_devkit/core", - ], deps = [ - ":webpack_rjs", - "//:root_modules/@angular/compiler", - "//:root_modules/@types/jasmine", - "//:root_modules/typescript", + ":node_modules/@angular-devkit/core", + ":webpack", + "//:node_modules/@angular/compiler", + "//:node_modules/@types/jasmine", + "//:node_modules/typescript", ], ) -jasmine_node_test( +jasmine_test( name = "webpack_test", - srcs = [":webpack_test_lib"], + data = [ + ":webpack_test_lib", + # Needed at runtime for runtime TS compilations performed by tests. + "//:node_modules/tslib", + ], ) genrule( @@ -69,8 +72,8 @@ genrule( cmd = "cp $(execpath //:LICENSE) $@", ) -pkg_npm( - name = "npm_package", +npm_package( + name = "pkg", tags = ["release-package"], deps = [ ":README.md", @@ -85,6 +88,6 @@ api_golden_test_npm_package( ":npm_package", "//goldens:public-api", ], - golden_dir = "angular_cli/goldens/public-api/ngtools/webpack", - npm_package = "angular_cli/packages/ngtools/webpack/npm_package", + golden_dir = "goldens/public-api/ngtools/webpack", + npm_package = "packages/ngtools/webpack/npm_package", ) diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json index 5808c8fa35eb..640795adaff7 100644 --- a/packages/ngtools/webpack/package.json +++ b/packages/ngtools/webpack/package.json @@ -21,15 +21,15 @@ }, "homepage": "https://github.com/angular/angular-cli/tree/main/packages/ngtools/webpack", "peerDependencies": { - "@angular/compiler-cli": "^19.0.0 || ^19.1.0-next.0", - "typescript": ">=5.5 <5.8", + "@angular/compiler-cli": "0.0.0-ANGULAR-FW-PEER-DEP", + "typescript": ">=5.5 <5.9", "webpack": "^5.54.0" }, "devDependencies": { - "@angular-devkit/core": "0.0.0-PLACEHOLDER", - "@angular/compiler": "19.1.0-rc.0", - "@angular/compiler-cli": "19.1.0-rc.0", - "typescript": "5.7.2", - "webpack": "5.97.1" + "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", + "@angular/compiler": "19.2.0-rc.0", + "@angular/compiler-cli": "19.2.0-rc.0", + "typescript": "5.8.1-rc", + "webpack": "5.98.0" } } diff --git a/packages/ngtools/webpack/src/benchmark.ts b/packages/ngtools/webpack/src/benchmark.ts index ae63a129531d..ca2bb7798c74 100644 --- a/packages/ngtools/webpack/src/benchmark.ts +++ b/packages/ngtools/webpack/src/benchmark.ts @@ -11,13 +11,13 @@ // This should be false for commited code. const _benchmark = false; /* eslint-disable no-console */ -export function time(label: string) { +export function time(label: string): void { if (_benchmark) { console.time(label); } } -export function timeEnd(label: string) { +export function timeEnd(label: string): void { if (_benchmark) { console.timeEnd(label); } diff --git a/packages/ngtools/webpack/src/ivy/host.ts b/packages/ngtools/webpack/src/ivy/host.ts index 32ce28fab565..88ecc548d53f 100644 --- a/packages/ngtools/webpack/src/ivy/host.ts +++ b/packages/ngtools/webpack/src/ivy/host.ts @@ -8,8 +8,8 @@ /* eslint-disable @typescript-eslint/unbound-method */ import type { CompilerHost } from '@angular/compiler-cli'; -import { createHash } from 'crypto'; -import * as path from 'path'; +import { createHash } from 'node:crypto'; +import * as path from 'node:path'; import * as ts from 'typescript'; import { WebpackResourceLoader } from '../resource_loader'; import { normalizePath } from './paths'; @@ -21,7 +21,7 @@ export function augmentHostWithResources( directTemplateLoading?: boolean; inlineStyleFileExtension?: string; } = {}, -) { +): void { const resourceHost = host as CompilerHost; resourceHost.readResource = function (fileName: string) { diff --git a/packages/ngtools/webpack/src/ivy/index.ts b/packages/ngtools/webpack/src/ivy/index.ts index 6c19f921f8a5..845d06385ff2 100644 --- a/packages/ngtools/webpack/src/ivy/index.ts +++ b/packages/ngtools/webpack/src/ivy/index.ts @@ -9,4 +9,4 @@ export { angularWebpackLoader as default } from './loader'; export { type AngularWebpackPluginOptions, AngularWebpackPlugin, imageDomains } from './plugin'; -export const AngularWebpackLoaderPath = __filename; +export const AngularWebpackLoaderPath: string = __filename; diff --git a/packages/ngtools/webpack/src/ivy/loader.ts b/packages/ngtools/webpack/src/ivy/loader.ts index 6c88a5babb5c..685d086ea466 100644 --- a/packages/ngtools/webpack/src/ivy/loader.ts +++ b/packages/ngtools/webpack/src/ivy/loader.ts @@ -6,13 +6,17 @@ * found in the LICENSE file at https://angular.dev/license */ -import * as path from 'path'; +import * as path from 'node:path'; import type { LoaderContext } from 'webpack'; import { AngularPluginSymbol, FileEmitterCollection } from './symbol'; const JS_FILE_REGEXP = /\.[cm]?js$/; -export function angularWebpackLoader(this: LoaderContext<unknown>, content: string, map: string) { +export function angularWebpackLoader( + this: LoaderContext<unknown>, + content: string, + map: string, +): void { const callback = this.async(); if (!callback) { throw new Error('Invalid webpack version'); diff --git a/packages/ngtools/webpack/src/ivy/paths.ts b/packages/ngtools/webpack/src/ivy/paths.ts index 5aac2b307cd3..c2ffe929718f 100644 --- a/packages/ngtools/webpack/src/ivy/paths.ts +++ b/packages/ngtools/webpack/src/ivy/paths.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import * as nodePath from 'path'; +import * as nodePath from 'node:path'; const normalizationCache = new Map<string, string>(); @@ -34,7 +34,7 @@ function externalizeForWindows(path: string): string { return result; } -export const externalizePath = (() => { +export const externalizePath: typeof externalizeForWindows = (() => { if (process.platform !== 'win32') { return (path: string) => path; } diff --git a/packages/ngtools/webpack/src/ivy/plugin.ts b/packages/ngtools/webpack/src/ivy/plugin.ts index 07daf99cab88..6b054c605fe1 100644 --- a/packages/ngtools/webpack/src/ivy/plugin.ts +++ b/packages/ngtools/webpack/src/ivy/plugin.ts @@ -7,7 +7,7 @@ */ import type { CompilerHost, CompilerOptions, NgtscProgram } from '@angular/compiler-cli'; -import { strict as assert } from 'assert'; +import { strict as assert } from 'node:assert'; import * as ts from 'typescript'; import type { Compilation, Compiler, Module, NormalModule } from 'webpack'; import { TypeScriptPathsPlugin } from '../paths-plugin'; @@ -39,7 +39,7 @@ import { createAotTransformers, createJitTransformers, mergeTransformers } from */ const DIAGNOSTICS_AFFECTED_THRESHOLD = 1; -export const imageDomains = new Set<string>(); +export const imageDomains: Set<string> = new Set(); export interface AngularWebpackPluginOptions { tsconfig: string; diff --git a/packages/ngtools/webpack/src/ivy/symbol.ts b/packages/ngtools/webpack/src/ivy/symbol.ts index a2bde7931053..6d884a256144 100644 --- a/packages/ngtools/webpack/src/ivy/symbol.ts +++ b/packages/ngtools/webpack/src/ivy/symbol.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -export const AngularPluginSymbol = Symbol.for('@ngtools/webpack[angular-compiler]'); +export const AngularPluginSymbol: unique symbol = Symbol.for('@ngtools/webpack[angular-compiler]'); export interface EmitFileResult { content?: string; diff --git a/packages/ngtools/webpack/src/loaders/inline-resource.ts b/packages/ngtools/webpack/src/loaders/inline-resource.ts index c8e475437b8c..9bdde8cb0707 100644 --- a/packages/ngtools/webpack/src/loaders/inline-resource.ts +++ b/packages/ngtools/webpack/src/loaders/inline-resource.ts @@ -8,15 +8,17 @@ import type { Compilation, LoaderContext } from 'webpack'; -export const InlineAngularResourceLoaderPath = __filename; +export const InlineAngularResourceLoaderPath: string = __filename; -export const InlineAngularResourceSymbol = Symbol('@ngtools/webpack[angular-resource]'); +export const InlineAngularResourceSymbol: unique symbol = Symbol( + '@ngtools/webpack[angular-resource]', +); export interface CompilationWithInlineAngularResource extends Compilation { [InlineAngularResourceSymbol]: string; } -export default function (this: LoaderContext<{ data?: string }>) { +export default function (this: LoaderContext<{ data?: string }>): void { const callback = this.async(); const { data } = this.getOptions(); diff --git a/packages/ngtools/webpack/src/paths-plugin.ts b/packages/ngtools/webpack/src/paths-plugin.ts index d3222e191c2a..a5e581b63c4d 100644 --- a/packages/ngtools/webpack/src/paths-plugin.ts +++ b/packages/ngtools/webpack/src/paths-plugin.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import * as path from 'path'; +import * as path from 'node:path'; import { CompilerOptions } from 'typescript'; import type { Resolver } from 'webpack'; diff --git a/packages/ngtools/webpack/src/resource_loader.ts b/packages/ngtools/webpack/src/resource_loader.ts index ea2c3d49bccf..07b4cdae5df7 100644 --- a/packages/ngtools/webpack/src/resource_loader.ts +++ b/packages/ngtools/webpack/src/resource_loader.ts @@ -46,7 +46,7 @@ export class WebpackResourceLoader { } } - update(parentCompilation: Compilation, changedFiles?: Iterable<string>) { + update(parentCompilation: Compilation, changedFiles?: Iterable<string>): void { this._parentCompilation = parentCompilation; // Update resource cache and modified resources @@ -82,23 +82,23 @@ export class WebpackResourceLoader { } } - clearParentCompilation() { + clearParentCompilation(): void { this._parentCompilation = undefined; } - getModifiedResourceFiles() { + getModifiedResourceFiles(): Set<string> { return this.modifiedResources; } - getResourceDependencies(filePath: string) { + getResourceDependencies(filePath: string): Iterable<string> { return this._fileDependencies.get(filePath) || []; } - getAffectedResources(file: string) { + getAffectedResources(file: string): Iterable<string> { return this._reverseDependencies.get(file) || []; } - setAffectedResources(file: string, resources: Iterable<string>) { + setAffectedResources(file: string, resources: Iterable<string>): void { this._reverseDependencies.set(file, new Set(resources)); } diff --git a/packages/ngtools/webpack/src/transformers/spec_helpers.ts b/packages/ngtools/webpack/src/transformers/spec_helpers.ts index 6b2bbc3b4aad..2b059d02f4e3 100644 --- a/packages/ngtools/webpack/src/transformers/spec_helpers.ts +++ b/packages/ngtools/webpack/src/transformers/spec_helpers.ts @@ -6,8 +6,8 @@ * found in the LICENSE file at https://angular.dev/license */ -import { basename } from 'path'; -import * as ts from 'typescript'; +import { basename } from 'node:path'; +import ts from 'typescript'; // Test transform helpers. const basefileName = 'test-file.ts'; @@ -18,7 +18,10 @@ export function createTypescriptContext( useLibs = false, extraCompilerOptions: ts.CompilerOptions = {}, jsxFile = false, -) { +): { + compilerHost: ts.CompilerHost; + program: ts.Program; +} { const fileName = basefileName + (jsxFile ? 'x' : ''); // Set compiler options. const compilerOptions: ts.CompilerOptions = { diff --git a/packages/schematics/angular/BUILD.bazel b/packages/schematics/angular/BUILD.bazel index 809695369968..ad049c97ffc0 100644 --- a/packages/schematics/angular/BUILD.bazel +++ b/packages/schematics/angular/BUILD.bazel @@ -3,15 +3,16 @@ # Use of this source code is governed by an MIT-style license that can be # found in the LICENSE file at https://angular.dev/license -load("@npm//@bazel/jasmine:index.bzl", "jasmine_node_test") -load("//tools:defaults.bzl", "pkg_npm") -load("//tools:interop.bzl", "ts_project") +load("@npm2//:defs.bzl", "npm_link_all_packages") +load("//tools:defaults2.bzl", "copy_to_bin", "jasmine_test", "npm_package", "ts_project") load("//tools:ts_json_schema.bzl", "ts_json_schema") licenses(["notice"]) package(default_visibility = ["//visibility:public"]) +npm_link_all_packages() + # Create a list of Tuple("path/file.json", "path_file") to be used as rules ALL_SCHEMA_TARGETS = [ ( @@ -36,6 +37,32 @@ ALL_SCHEMA_TARGETS = [ for (src, name) in ALL_SCHEMA_TARGETS ] +copy_to_bin( + name = "schemas", + srcs = glob(["**/schema.json"]), +) + +RUNTIME_ASSETS = [ + "collection.json", + "migrations/migration-collection.json", + "package.json", + "utility/latest-versions/package.json", +] + glob( + include = [ + "*/schema.json", + "*/files/**/*", + "*/other-files/**/*", + "*/implements-files/**/*", + "*/type-files/**/*", + "*/functional-files/**/*", + "*/class-files/**/*", + ], + exclude = [ + # NB: we need to exclude the nested node_modules that is laid out by yarn workspaces + "node_modules/**", + ], +) + ts_project( name = "angular", srcs = glob( @@ -58,47 +85,27 @@ ts_project( "//packages/schematics/angular:" + src.replace(".json", ".ts") for (src, _) in ALL_SCHEMA_TARGETS ], - data = [ - "collection.json", - "migrations/migration-collection.json", - "package.json", - "utility/latest-versions/package.json", - ] + glob( - include = [ - "*/schema.json", - "*/files/**/*", - "*/other-files/**/*", - "*/implements-files/**/*", - "*/type-files/**/*", - "*/functional-files/**/*", - "*/class-files/**/*", - ], - exclude = [ - # NB: we need to exclude the nested node_modules that is laid out by yarn workspaces - "node_modules/**", - ], - ), - interop_deps = [ - "//packages/angular_devkit/schematics", - "//packages/angular_devkit/schematics/tasks", - ], + data = RUNTIME_ASSETS, + # TODO: Fix strict_deps failure + ignore_strict_deps = True, module_name = "@schematics/angular", deps = [ - "//:root_modules/@inquirer/prompts", - "//:root_modules/@types/node", - "//:root_modules/browserslist", - "//:root_modules/jsonc-parser", - "//packages/angular_devkit/core:core_rjs", - "//packages/schematics/angular/third_party/github.com/Microsoft/TypeScript:TypeScript_rjs", + ":node_modules/@angular-devkit/core", + ":node_modules/@angular-devkit/schematics", + "//:node_modules/@inquirer/prompts", + "//:node_modules/@types/node", + "//:node_modules/browserslist", + "//:node_modules/jsonc-parser", + "//packages/schematics/angular/third_party/github.com/Microsoft/TypeScript", ], ) -jasmine_node_test( +jasmine_test( name = "no_typescript_runtime_dep_test", - srcs = ["no_typescript_runtime_dep_spec.js"], - deps = [ + data = [ + "no_typescript_runtime_dep_spec.js", ":angular", - "//:root_modules/@types/jasmine", + "//:node_modules/@types/jasmine", ], ) @@ -115,24 +122,20 @@ ts_project( "node_modules/**", ], ), - interop_deps = [ - "//packages/angular_devkit/schematics", - "//packages/angular_devkit/schematics/tasks", - "//packages/angular_devkit/schematics/testing", - ], deps = [ - ":angular_rjs", - "//:root_modules/@types/jasmine", - "//:root_modules/jsonc-parser", - "//packages/angular_devkit/core:core_rjs", - "//packages/angular_devkit/core/node/testing:testing_rjs", - "//packages/schematics/angular/third_party/github.com/Microsoft/TypeScript:TypeScript_rjs", + ":angular", + ":node_modules/@angular-devkit/core", + ":node_modules/@angular-devkit/schematics", + "//:node_modules/@types/jasmine", + "//:node_modules/@types/node", + "//:node_modules/jsonc-parser", + "//packages/schematics/angular/third_party/github.com/Microsoft/TypeScript", ], ) -jasmine_node_test( +jasmine_test( name = "angular_test", - srcs = [":angular_test_lib"], + data = [":angular_test_lib"], ) genrule( @@ -142,19 +145,22 @@ genrule( cmd = "cp $(execpath //:LICENSE) $@", ) -pkg_npm( - name = "npm_package", +npm_package( + name = "pkg", pkg_deps = [ "//packages/angular_devkit/schematics:package.json", "//packages/angular_devkit/core:package.json", ], + stamp_files = [ + "utility/latest-versions.js", + ], tags = ["release-package"], - deps = [ + deps = RUNTIME_ASSETS + [ ":README.md", ":angular", ":license", - ":migrations/migration-collection.json", - ":utility/latest-versions/package.json", "//packages/schematics/angular/third_party/github.com/Microsoft/TypeScript:LICENSE", + # Force typescript library to be included. + "//packages/schematics/angular/third_party/github.com/Microsoft/TypeScript:lib/typescript.js", ], ) diff --git a/packages/schematics/angular/app-shell/index.ts b/packages/schematics/angular/app-shell/index.ts index 46adb35f0576..725f6d126785 100644 --- a/packages/schematics/angular/app-shell/index.ts +++ b/packages/schematics/angular/app-shell/index.ts @@ -17,7 +17,6 @@ import { import { dirname, join } from 'node:path/posix'; import ts from '../third_party/github.com/Microsoft/TypeScript/lib/typescript'; import { - addImportToModule, addSymbolToNgModuleMetadata, findNode, findNodes, @@ -140,19 +139,6 @@ function validateProject(mainPath: string): Rule { }; } -function addRouterModule(mainPath: string): Rule { - return (host: Tree) => { - const modulePath = getAppModulePath(host, mainPath); - const moduleSource = getSourceFile(host, modulePath); - const changes = addImportToModule(moduleSource, modulePath, 'RouterModule', '@angular/router'); - const recorder = host.beginUpdate(modulePath); - applyToUpdateRecorder(recorder, changes); - host.commitUpdate(recorder); - - return host; - }; -} - function getMetadataProperty(metadata: ts.Node, propertyName: string): ts.PropertyAssignment { const properties = (metadata as ts.ObjectLiteralExpression).properties; const property = properties.filter(ts.isPropertyAssignment).filter((prop) => { @@ -265,7 +251,7 @@ function addStandaloneServerRoute(options: AppShellOptions): Rule { throw new SchematicsException(`Cannot find "${configFilePath}".`); } - let recorder = host.beginUpdate(configFilePath); + const recorder = host.beginUpdate(configFilePath); let configSourceFile = getSourceFile(host, configFilePath); if (!isImported(configSourceFile, 'ROUTES', '@angular/router')) { const routesChange = insertImport( @@ -295,49 +281,30 @@ function addStandaloneServerRoute(options: AppShellOptions): Rule { const updatedProvidersString = [ ...providersLiteral.elements.map((element) => ' ' + element.getText()), ` { - provide: ROUTES, - multi: true, - useValue: [{ - path: '${APP_SHELL_ROUTE}', - component: AppShellComponent - }] - }\n `, + provide: ROUTES, + multi: true, + useValue: [{ + path: '${APP_SHELL_ROUTE}', + component: AppShellComponent + }] + }\n `, ]; recorder.insertRight(providersLiteral.getStart(), `[\n${updatedProvidersString.join(',\n')}]`); - if (options.serverRouting) { - host.commitUpdate(recorder); - configSourceFile = getSourceFile(host, configFilePath); - const functionCall = findNodes(configSourceFile, ts.isCallExpression).find( - (n) => - ts.isIdentifier(n.expression) && n.expression.getText() === 'provideServerRoutesConfig', - ); - - if (!functionCall) { - throw new SchematicsException( - `Cannot find the "provideServerRoutesConfig" function call in "${configFilePath}".`, - ); - } - - recorder = host.beginUpdate(configFilePath); - recorder.insertLeft(functionCall.end - 1, `, { appShellRoute: '${APP_SHELL_ROUTE}' }`); - } - - // Add AppShellComponent import - const appShellImportChange = insertImport( - configSourceFile, - configFilePath, - 'AppShellComponent', - './app-shell/app-shell.component', - ); - - applyToUpdateRecorder(recorder, [appShellImportChange]); + applyToUpdateRecorder(recorder, [ + insertImport( + configSourceFile, + configFilePath, + 'AppShellComponent', + './app-shell/app-shell.component', + ), + ]); host.commitUpdate(recorder); }; } -function addServerRoutingConfig(options: AppShellOptions): Rule { +function addServerRoutingConfig(options: AppShellOptions, isStandalone: boolean): Rule { return async (host: Tree) => { const workspace = await getWorkspace(host); const project = workspace.projects.get(options.project); @@ -345,39 +312,43 @@ function addServerRoutingConfig(options: AppShellOptions): Rule { throw new SchematicsException(`Project name "${options.project}" doesn't not exist.`); } - const configFilePath = join(project.sourceRoot ?? 'src', 'app/app.routes.server.ts'); - if (!host.exists(configFilePath)) { + const configFilePath = isStandalone + ? join(project.sourceRoot ?? 'src', 'app/app.config.server.ts') + : getServerModulePath(host, project.sourceRoot || 'src', 'main.server.ts'); + + if (!configFilePath || !host.exists(configFilePath)) { throw new SchematicsException(`Cannot find "${configFilePath}".`); } - const sourceFile = getSourceFile(host, configFilePath); - const nodes = getSourceNodes(sourceFile); - - // Find the serverRoutes variable declaration - const serverRoutesNode = nodes.find( - (node) => - ts.isVariableDeclaration(node) && - node.initializer && - ts.isArrayLiteralExpression(node.initializer) && - node.type && - ts.isArrayTypeNode(node.type) && - node.type.getText().includes('ServerRoute'), - ) as ts.VariableDeclaration | undefined; - - if (!serverRoutesNode) { + let recorder = host.beginUpdate(configFilePath); + const configSourceFile = getSourceFile(host, configFilePath); + const functionCall = findNodes( + configSourceFile, + ts.isCallExpression, + /** max */ undefined, + /** recursive */ true, + ).find( + (n) => ts.isIdentifier(n.expression) && n.expression.getText() === 'provideServerRouting', + ); + + if (!functionCall) { throw new SchematicsException( - `Cannot find the "ServerRoute" configuration in "${configFilePath}".`, + `Cannot find the "provideServerRouting" function call in "${configFilePath}".`, ); } - const recorder = host.beginUpdate(configFilePath); - const arrayLiteral = serverRoutesNode.initializer as ts.ArrayLiteralExpression; - const firstElementPosition = - arrayLiteral.elements[0]?.getStart() ?? arrayLiteral.getStart() + 1; - const newRouteString = `{ - path: '${APP_SHELL_ROUTE}', - renderMode: RenderMode.AppShell - },\n`; - recorder.insertLeft(firstElementPosition, newRouteString); + + recorder = host.beginUpdate(configFilePath); + recorder.insertLeft(functionCall.end - 1, `, withAppShell(AppShellComponent)`); + + applyToUpdateRecorder(recorder, [ + insertImport(configSourceFile, configFilePath, 'withAppShell', '@angular/ssr'), + insertImport( + configSourceFile, + configFilePath, + 'AppShellComponent', + './app-shell/app-shell.component', + ), + ]); host.commitUpdate(recorder); }; @@ -391,10 +362,14 @@ export default function (options: AppShellOptions): Rule { return chain([ validateProject(browserEntryPoint), schematic('server', options), - ...(isStandalone - ? [addStandaloneServerRoute(options)] - : [addRouterModule(browserEntryPoint), addServerRoutes(options)]), - options.serverRouting ? noop() : addAppShellConfigToWorkspace(options), + ...(options.serverRouting + ? [noop()] + : isStandalone + ? [addStandaloneServerRoute(options)] + : [addServerRoutes(options)]), + options.serverRouting + ? addServerRoutingConfig(options, isStandalone) + : addAppShellConfigToWorkspace(options), schematic('component', { name: 'app-shell', module: 'app.module.server.ts', diff --git a/packages/schematics/angular/app-shell/index_spec.ts b/packages/schematics/angular/app-shell/index_spec.ts index 4381b05efd29..09fbe4ba6e17 100644 --- a/packages/schematics/angular/app-shell/index_spec.ts +++ b/packages/schematics/angular/app-shell/index_spec.ts @@ -69,13 +69,6 @@ describe('App Shell Schematic', () => { expect(tree.exists(filePath)).toEqual(true); }); - it('should add router module to client app module', async () => { - const tree = await schematicRunner.runSchematic('app-shell', defaultOptions, appTree); - const filePath = '/projects/bar/src/app/app.module.ts'; - const content = tree.readContent(filePath); - expect(content).toMatch(/import { RouterModule } from '@angular\/router';/); - }); - it('should not fail when AppModule have imported RouterModule already', async () => { const updateRecorder = appTree.beginUpdate('/projects/bar/src/app/app.module.ts'); updateRecorder.insertLeft(0, "import { RouterModule } from '@angular/router';"); @@ -87,81 +80,12 @@ describe('App Shell Schematic', () => { expect(content).toMatch(/import { RouterModule } from '@angular\/router';/); }); - describe('Add router-outlet', () => { - function makeInlineTemplate(tree: UnitTestTree, template?: string): void { - template = - template || - ` - <p> - App works! - </p>`; - const newText = ` - import { Component } from '@angular/core'; - - @Component({ - selector: '' - template: \` - ${template} - \`, - styleUrls: ['./app.component.css'] - }) - export class AppComponent { } - - `; - tree.overwrite('/projects/bar/src/app/app.component.ts', newText); - tree.delete('/projects/bar/src/app/app.component.html'); - } - - it('should not re-add the router outlet (external template)', async () => { - const htmlPath = '/projects/bar/src/app/app.component.html'; - appTree.overwrite(htmlPath, '<router-outlet></router-outlet>'); - const tree = await schematicRunner.runSchematic('app-shell', defaultOptions, appTree); - const content = tree.readContent(htmlPath); - const matches = content.match(/<router-outlet><\/router-outlet>/g); - const numMatches = matches ? matches.length : 0; - expect(numMatches).toEqual(1); - }); - - it('should not re-add the router outlet (inline template)', async () => { - makeInlineTemplate(appTree, '<router-outlet></router-outlet>'); - const tree = await schematicRunner.runSchematic('app-shell', defaultOptions, appTree); - const content = tree.readContent('/projects/bar/src/app/app.component.ts'); - const matches = content.match(/<router-outlet><\/router-outlet>/g); - const numMatches = matches ? matches.length : 0; - expect(numMatches).toEqual(1); - }); - }); - - it('should add router imports to server module', async () => { - const tree = await schematicRunner.runSchematic('app-shell', defaultOptions, appTree); - const filePath = '/projects/bar/src/app/app.module.server.ts'; - const content = tree.readContent(filePath); - expect(content).toMatch(/import { Routes, RouterModule } from '@angular\/router';/); - }); - it('should work if server config was added prior to running the app-shell schematic', async () => { let tree = await schematicRunner.runSchematic('server', defaultOptions, appTree); tree = await schematicRunner.runSchematic('app-shell', defaultOptions, tree); expect(tree.exists('/projects/bar/src/app/app-shell/app-shell.component.ts')).toBe(true); }); - it('should define a server route', async () => { - const tree = await schematicRunner.runSchematic('app-shell', defaultOptions, appTree); - const filePath = '/projects/bar/src/app/app.module.server.ts'; - const content = tree.readContent(filePath); - expect(content).toMatch(/const routes: Routes = \[/); - }); - - it('should import RouterModule with forRoot', async () => { - const tree = await schematicRunner.runSchematic('app-shell', defaultOptions, appTree); - const filePath = '/projects/bar/src/app/app.module.server.ts'; - const content = tree.readContent(filePath); - expect(content).toMatch( - /const routes: Routes = \[ { path: 'shell', component: AppShellComponent }\];/, - ); - expect(content).toContain(`ServerModule, RouterModule.forRoot(routes)]`); - }); - it('should create the shell component', async () => { const tree = await schematicRunner.runSchematic('app-shell', defaultOptions, appTree); expect(tree.exists('/projects/bar/src/app/app-shell/app-shell.component.ts')).toBe(true); @@ -200,35 +124,14 @@ describe('App Shell Schematic', () => { expect(content).toMatch(/app-shell\.component/); }); - it(`should update the 'provideServerRoutesConfig' call to include 'appShellRoute`, async () => { + it(`should update the 'provideServerRouting' call to include 'withAppShell'`, async () => { const tree = await schematicRunner.runSchematic('app-shell', defaultOptions, appTree); const content = tree.readContent('/projects/bar/src/app/app.config.server.ts'); expect(tags.oneLine`${content}`).toContain( - tags.oneLine`provideServerRoutesConfig(serverRoutes, { appShellRoute: 'shell' })`, + tags.oneLine`provideServerRouting(serverRoutes, withAppShell(AppShellComponent))`, ); }); - it('should define a server route', async () => { - const tree = await schematicRunner.runSchematic('app-shell', defaultOptions, appTree); - const filePath = '/projects/bar/src/app/app.config.server.ts'; - const content = tree.readContent(filePath); - expect(tags.oneLine`${content}`).toContain(tags.oneLine`{ - provide: ROUTES, - multi: true, - useValue: [{ - path: 'shell', - component: AppShellComponent - }] - }`); - }); - - it(`should add import to 'ROUTES' token from '@angular/router'`, async () => { - const tree = await schematicRunner.runSchematic('app-shell', defaultOptions, appTree); - const filePath = '/projects/bar/src/app/app.config.server.ts'; - const content = tree.readContent(filePath); - expect(content).toContain(`import { ROUTES } from '@angular/router';`); - }); - it(`should add import to 'AppShellComponent'`, async () => { const tree = await schematicRunner.runSchematic('app-shell', defaultOptions, appTree); const filePath = '/projects/bar/src/app/app.config.server.ts'; diff --git a/packages/schematics/angular/app-shell/schema.json b/packages/schematics/angular/app-shell/schema.json index 9f4a1c1dcbc7..262fb3fa45b0 100644 --- a/packages/schematics/angular/app-shell/schema.json +++ b/packages/schematics/angular/app-shell/schema.json @@ -3,18 +3,18 @@ "$id": "SchematicsAngularAppShell", "title": "Angular AppShell Options Schema", "type": "object", - "description": "Generates an application shell for running a server-side version of an app.", + "description": "Configures your project to generate an app-shell during build time.", "additionalProperties": false, "properties": { "project": { "type": "string", - "description": "The name of the related client app.", + "description": "The name of the project where the app-shell should be generated.", "$default": { "$source": "projectName" } }, "serverRouting": { - "description": "Creates a server application using the Server Routing API (Developer Preview).", + "description": "Set up a server application using the Server Routing and App Engine APIs (Developer Preview).", "type": "boolean", "default": false } diff --git a/packages/schematics/angular/application/files/module-files/src/main.ts.template b/packages/schematics/angular/application/files/module-files/src/main.ts.template index a4e16b837f8a..e851fbfb07fc 100644 --- a/packages/schematics/angular/application/files/module-files/src/main.ts.template +++ b/packages/schematics/angular/application/files/module-files/src/main.ts.template @@ -1,8 +1,8 @@ <% if(!!viewEncapsulation) { %>import { ViewEncapsulation } from '@angular/core'; -<% }%>import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; +<% }%>import { platformBrowser } from '@angular/platform-browser'; import { AppModule } from './app/app.module'; -platformBrowserDynamic().bootstrapModule(AppModule, { +platformBrowser().bootstrapModule(AppModule, { <% if(!experimentalZoneless) { %>ngZoneEventCoalescing: true,<% } %><% if(!!viewEncapsulation) { %> defaultEncapsulation: ViewEncapsulation.<%= viewEncapsulation %><% } %> }) diff --git a/packages/schematics/angular/application/schema.json b/packages/schematics/angular/application/schema.json index 7a0ccd24dc93..b7d8e382aad2 100644 --- a/packages/schematics/angular/application/schema.json +++ b/packages/schematics/angular/application/schema.json @@ -3,15 +3,15 @@ "$id": "SchematicsAngularApp", "title": "Angular Application Options Schema", "type": "object", - "description": "Generates a new basic application definition in the \"projects\" subfolder of the workspace.", + "description": "Generates a new Angular application within your workspace. This schematic sets up the foundational structure of your project, including the root component, module, and configuration files. You can customize various aspects of the application, such as routing, styling, and testing.", "additionalProperties": false, "properties": { "projectRoot": { - "description": "The root directory of the new application.", + "description": "The directory where the new application's files will be created, relative to the workspace root. If not specified, the application will be created in a subfolder within the `projects` directory, using the application's name.", "type": "string" }, "name": { - "description": "The name of the new application.", + "description": "The name for the new application. This name will be used for the project directory and various identifiers throughout the application's code.", "type": "string", "pattern": "^(?:@[a-zA-Z0-9-*~][a-zA-Z0-9-*._~]*/)?[a-zA-Z0-9-~][a-zA-Z0-9-._~]*$", "$default": { @@ -21,37 +21,37 @@ "x-prompt": "What name would you like to use for the application?" }, "inlineStyle": { - "description": "Include styles inline in the root component.ts file. Only CSS styles can be included inline. Default is false, meaning that an external styles file is created and referenced in the root component.ts file.", + "description": "Include the styles for the root component directly within the `app.component.ts` file. Only CSS styles can be included inline. By default, a separate stylesheet file (e.g., `app.component.css`) is created.", "type": "boolean", "alias": "s", "x-user-analytics": "ep.ng_inline_style" }, "inlineTemplate": { - "description": "Include template inline in the root component.ts file. Default is false, meaning that an external template file is created and referenced in the root component.ts file. ", + "description": "Include the HTML template for the root component directly within the `app.component.ts` file. By default, a separate template file (e.g., `app.component.html`) is created.", "type": "boolean", "alias": "t", "x-user-analytics": "ep.ng_inline_template" }, "viewEncapsulation": { - "description": "The view encapsulation strategy to use in the new application.", + "description": "Sets the view encapsulation mode for the application's components. This determines how component styles are scoped and applied.", "enum": ["Emulated", "None", "ShadowDom"], "type": "string" }, "routing": { "type": "boolean", - "description": "Creates an application with routing enabled.", + "description": "Generate an application with routing already configured. This sets up the necessary files and modules for managing navigation between different views in your application.", "default": true, "x-user-analytics": "ep.ng_routing" }, "prefix": { "type": "string", "format": "html-selector", - "description": "A prefix to apply to generated selectors.", + "description": "A prefix to be added to the selectors of components generated within this application. For example, if the prefix is `my-app` and you generate a component named `my-component`, the selector will be `my-app-my-component`.", "default": "app", "alias": "p" }, "style": { - "description": "The file extension or preprocessor to use for style files.", + "description": "The type of stylesheet files to be created for components in the application.", "type": "string", "default": "css", "enum": ["css", "scss", "sass", "less"], @@ -80,7 +80,7 @@ "x-user-analytics": "ep.ng_style" }, "skipTests": { - "description": "Do not create \"spec.ts\" test files for the application.", + "description": "Skip the generation of a unit test files `spec.ts`.", "type": "boolean", "default": false, "alias": "S" @@ -88,42 +88,42 @@ "skipPackageJson": { "type": "boolean", "default": false, - "description": "Do not add dependencies to the \"package.json\" file." + "description": "Do not add dependencies to the `package.json` file." }, "minimal": { - "description": "Create a bare-bones project without any testing frameworks. (Use for learning purposes only.)", + "description": "Generate a minimal project without any testing frameworks. This is intended for learning purposes and simple experimentation, not for production applications.", "type": "boolean", "default": false }, "skipInstall": { - "description": "Skip installing dependency packages.", + "description": "Skip the automatic installation of packages. You will need to manually install the dependencies later.", "type": "boolean", "default": false }, "strict": { - "description": "Creates an application with stricter bundle budgets settings.", + "description": "Enable stricter bundle budget settings for the application. This helps to keep your application's bundle size small and improve performance. For more information, see https://angular.dev/tools/cli/template-typecheck#strict-mode", "type": "boolean", "default": true }, "standalone": { - "description": "Creates an application based upon the standalone API, without NgModules.", + "description": "Create an application that utilizes the standalone API, eliminating the need for NgModules. This can simplify the structure of your application.", "type": "boolean", "default": true, "x-user-analytics": "ep.ng_standalone" }, "ssr": { - "description": "Creates an application with Server-Side Rendering (SSR) and Static Site Generation (SSG/Prerendering) enabled.", + "description": "Configure the application for Server-Side Rendering (SSR) and Static Site Generation (SSG/Prerendering).", "x-prompt": "Do you want to enable Server-Side Rendering (SSR) and Static Site Generation (SSG/Prerendering)?", "type": "boolean", "default": false, "x-user-analytics": "ep.ng_ssr" }, "serverRouting": { - "description": "Creates a server application using the Server Routing and App Engine APIs (Developer Preview).", + "description": "Set up a server application using the Server Routing and App Engine APIs (Developer Preview).", "type": "boolean" }, "experimentalZoneless": { - "description": "Create an application that does not utilize zone.js.", + "description": "Generate an application that does not use `zone.js`.", "type": "boolean", "default": false } diff --git a/packages/schematics/angular/class/schema.json b/packages/schematics/angular/class/schema.json index f56137e84944..93bf45225265 100644 --- a/packages/schematics/angular/class/schema.json +++ b/packages/schematics/angular/class/schema.json @@ -3,12 +3,12 @@ "$id": "SchematicsAngularClass", "title": "Angular Class Options Schema", "type": "object", - "description": "Creates a new, generic class definition in the given project.", + "description": "Creates a new class in your project. Classes are the fundamental building blocks for object-oriented programming in TypeScript. They provide a blueprint for creating objects with properties and methods. This schematic helps you generate a new class with the basic structure and optional test files.", "additionalProperties": false, "properties": { "name": { "type": "string", - "description": "The name of the new class.", + "description": "The name for the new class. This will be used to create the class file (e.g., `my-class.ts`) and, if enabled, the corresponding test file `my-class.spec.ts`.", "$default": { "$source": "argv", "index": 0 @@ -21,24 +21,24 @@ "$default": { "$source": "workingDirectory" }, - "description": "The path at which to create the class, relative to the workspace root.", + "description": "The path where the class file should be created, relative to the workspace root. If not specified, the class will be created in the current directory.", "visible": false }, "project": { "type": "string", - "description": "The name of the project.", + "description": "The name of the project where the class should be added. If not specified, the CLI will determine the project from the current directory.", "$default": { "$source": "projectName" } }, "skipTests": { "type": "boolean", - "description": "Do not create \"spec.ts\" test files for the new class.", + "description": "Skip the generation of a unit test file `spec.ts` for the new class.", "default": false }, "type": { "type": "string", - "description": "Adds a developer-defined type to the filename, in the format \"name.type.ts\"." + "description": "Adds a custom type to the filename, allowing you to create more descriptive class names. For example, if you set the type to `helper`, the filename will be `my-class.helper.ts`." } }, "required": ["name", "project"] diff --git a/packages/schematics/angular/component/files/__name@dasherize@if-flat__/__name@dasherize__.__type@dasherize__.ts.template b/packages/schematics/angular/component/files/__name@dasherize@if-flat__/__name@dasherize__.__type@dasherize__.ts.template index f787ad3acf8e..3c9ffd21516e 100644 --- a/packages/schematics/angular/component/files/__name@dasherize@if-flat__/__name@dasherize__.__type@dasherize__.ts.template +++ b/packages/schematics/angular/component/files/__name@dasherize@if-flat__/__name@dasherize__.__type@dasherize__.ts.template @@ -3,8 +3,7 @@ import { <% if(changeDetection !== 'Default') { %>ChangeDetectionStrategy, <% }% @Component({<% if(!skipSelector) {%> selector: '<%= selector %>',<%}%><% if(standalone) {%> imports: [],<%} else { %> - standalone: false, - <% }%><% if(inlineTemplate) { %> + standalone: false,<% }%><% if(inlineTemplate) { %> template: ` <p> <%= dasherize(name) %> works! diff --git a/packages/schematics/angular/component/schema.json b/packages/schematics/angular/component/schema.json index 9b95d4f1b8f3..101c19c75b64 100644 --- a/packages/schematics/angular/component/schema.json +++ b/packages/schematics/angular/component/schema.json @@ -3,7 +3,7 @@ "$id": "SchematicsAngularComponent", "title": "Angular Component Options Schema", "type": "object", - "description": "Creates a new, generic component definition in the given project.", + "description": "Creates a new Angular component. Components are the basic building blocks of Angular applications. Each component consists of a TypeScript class, an HTML template, and an optional CSS stylesheet. Use this schematic to generate a new component in your project.", "additionalProperties": false, "properties": { "path": { @@ -12,19 +12,19 @@ "$default": { "$source": "workingDirectory" }, - "description": "The path at which to create the component file, relative to the current workspace. Default is a folder with the same name as the component in the project root.", + "description": "The path where the component files should be created, relative to the current workspace. If not provided, a folder with the same name as the component will be created in the project's `src/app` directory.", "visible": false }, "project": { "type": "string", - "description": "The name of the project.", + "description": "The name of the project where the component should be added. If not specified, the CLI will determine the project from the current directory.", "$default": { "$source": "projectName" } }, "name": { "type": "string", - "description": "The name of the component.", + "description": "The name for the new component. This will be used to create the component's class, template, and stylesheet files. For example, if you provide `my-component`, the files will be named `my-component.component.ts`, `my-component.component.html`, and `my-component.component.css`.", "$default": { "$source": "argv", "index": 0 @@ -32,39 +32,39 @@ "x-prompt": "What name would you like to use for the component?" }, "displayBlock": { - "description": "Specifies if the style will contain `:host { display: block; }`.", + "description": "Adds `:host { display: block; }` to the component's stylesheet, ensuring the component renders as a block-level element. This is useful for layout purposes.", "type": "boolean", "default": false, "alias": "b" }, "inlineStyle": { - "description": "Include styles inline in the component.ts file. Only CSS styles can be included inline. By default, an external styles file is created and referenced in the component.ts file.", + "description": "Include the component's styles directly in the `component.ts` file. By default, a separate stylesheet file (e.g., `my-component.component.css`) is created.", "type": "boolean", "default": false, "alias": "s", "x-user-analytics": "ep.ng_inline_style" }, "inlineTemplate": { - "description": "Include template inline in the component.ts file. By default, an external template file is created and referenced in the component.ts file.", + "description": "Include the component's HTML template directly in the `component.ts` file. By default, a separate template file (e.g., `my-component.component.html`) is created.", "type": "boolean", "default": false, "alias": "t", "x-user-analytics": "ep.ng_inline_template" }, "standalone": { - "description": "Whether the generated component is standalone.", + "description": "Generate a standalone component. Standalone components are self-contained and don't need to be declared in an NgModule. They can be used independently or imported directly into other standalone components.", "type": "boolean", "default": true, "x-user-analytics": "ep.ng_standalone" }, "viewEncapsulation": { - "description": "The view encapsulation strategy to use in the new component.", + "description": "Sets the view encapsulation mode for the component. This determines how the component's styles are scoped and applied.", "enum": ["Emulated", "None", "ShadowDom"], "type": "string", "alias": "v" }, "changeDetection": { - "description": "The change detection strategy to use in the new component.", + "description": "Configures the change detection strategy for the component.", "enum": ["Default", "OnPush"], "type": "string", "default": "Default", @@ -72,7 +72,7 @@ }, "prefix": { "type": "string", - "description": "The prefix to apply to the generated component selector.", + "description": "A prefix to be added to the component's selector. For example, if the prefix is `app` and the component name is `my-component`, the selector will be `app-my-component`.", "alias": "p", "oneOf": [ { @@ -85,7 +85,7 @@ ] }, "style": { - "description": "The file extension or preprocessor to use for style files, or 'none' to skip generating the style file.", + "description": "Specify the type of stylesheet to be created for the component, or `none` to skip creating a stylesheet.", "type": "string", "default": "css", "enum": ["css", "scss", "sass", "less", "none"], @@ -93,48 +93,48 @@ }, "type": { "type": "string", - "description": "Adds a developer-defined type to the filename, in the format \"name.type.ts\".", + "description": "Append a custom type to the component's filename. For example, if you set the type to `container`, the file will be named `my-component.container.ts`.", "default": "Component" }, "skipTests": { "type": "boolean", - "description": "Do not create \"spec.ts\" test files for the new component.", + "description": "Skip the generation of unit test files `spec.ts`.", "default": false }, "flat": { "type": "boolean", - "description": "Create the new files at the top level of the current project.", + "description": "Create the component files directly in the project's `src/app` directory instead of creating a new folder for them.", "default": false }, "skipImport": { "type": "boolean", - "description": "Do not import this component into the owning NgModule.", + "description": "Do not automatically import the new component into its closest NgModule.", "default": false }, "selector": { "type": "string", "format": "html-selector", - "description": "The HTML selector to use for this component." + "description": "The HTML selector to use for this component. If not provided, a selector will be generated based on the component name (e.g., `app-my-component`)." }, "skipSelector": { "type": "boolean", "default": false, - "description": "Specifies if the component should have a selector or not." + "description": "Skip the generation of an HTML selector for the component." }, "module": { "type": "string", - "description": "The declaring NgModule.", + "description": "Specify the NgModule where the component should be declared. If not provided, the CLI will attempt to find the closest NgModule in the component's path.", "alias": "m" }, "export": { "type": "boolean", "default": false, - "description": "The declaring NgModule exports this component." + "description": "Automatically export the component from the specified NgModule, making it accessible to other modules in the application." }, "exportDefault": { "type": "boolean", "default": false, - "description": "Use default export for the component instead of a named export." + "description": "Use a default export for the component in its TypeScript file instead of a named export." } }, "required": ["name", "project"] diff --git a/packages/schematics/angular/config/files/karma.conf.js.template b/packages/schematics/angular/config/files/karma.conf.js.template index f8da22b16e55..4bd2af418f5b 100644 --- a/packages/schematics/angular/config/files/karma.conf.js.template +++ b/packages/schematics/angular/config/files/karma.conf.js.template @@ -4,13 +4,13 @@ module.exports = function (config) { config.set({ basePath: '', - frameworks: ['jasmine', '@angular-devkit/build-angular'], + frameworks: ['jasmine'<% if (needDevkitPlugin) { %>, '@angular-devkit/build-angular'<% } %>], plugins: [ require('karma-jasmine'), require('karma-chrome-launcher'), require('karma-jasmine-html-reporter'), - require('karma-coverage'), - require('@angular-devkit/build-angular/plugins/karma') + require('karma-coverage'),<% if (needDevkitPlugin) { %> + require('@angular-devkit/build-angular/plugins/karma')<% } %> ], client: { jasmine: { diff --git a/packages/schematics/angular/config/index.ts b/packages/schematics/angular/config/index.ts index 908d12cef3e2..d20c427606a9 100644 --- a/packages/schematics/angular/config/index.ts +++ b/packages/schematics/angular/config/index.ts @@ -18,7 +18,7 @@ import { url, } from '@angular-devkit/schematics'; import { AngularBuilder, readWorkspace, updateWorkspace } from '@schematics/angular/utility'; -import { posix as path } from 'path'; +import { posix as path } from 'node:path'; import { relativePathToWorkspaceRoot } from '../utility/paths'; import { Schema as ConfigOptions, Type as ConfigType } from './schema'; @@ -66,9 +66,13 @@ function addKarmaConfig(options: ConfigOptions): Rule { ); } - if (testTarget.builder !== AngularBuilder.Karma) { + if ( + testTarget.builder !== AngularBuilder.Karma && + testTarget.builder !== AngularBuilder.BuildKarma + ) { throw new SchematicsException( - `Cannot add a karma configuration as builder for "test" target in project does not use "${AngularBuilder.Karma}".`, + `Cannot add a karma configuration as builder for "test" target in project does not` + + ` use "${AngularBuilder.Karma}" or "${AngularBuilder.BuildKarma}".`, ); } @@ -87,6 +91,7 @@ function addKarmaConfig(options: ConfigOptions): Rule { applyTemplates({ relativePathToWorkspaceRoot: relativePathToWorkspaceRoot(project.root), folderName, + needDevkitPlugin: testTarget.builder === AngularBuilder.Karma, }), move(project.root), ]), diff --git a/packages/schematics/angular/config/index_spec.ts b/packages/schematics/angular/config/index_spec.ts index 3cafd7b42f49..8d160d8c0a1d 100644 --- a/packages/schematics/angular/config/index_spec.ts +++ b/packages/schematics/angular/config/index_spec.ts @@ -58,6 +58,24 @@ describe('Config Schematic', () => { expect(tree.exists('projects/foo/karma.conf.js')).toBeTrue(); }); + it('should include devkit karma plugin by default', async () => { + const tree = await runConfigSchematic(ConfigType.Karma); + const karmaConf = tree.readText('projects/foo/karma.conf.js'); + expect(karmaConf).toContain(`'@angular-devkit/build-angular'`); + }); + + it('should not include devkit karma plugin with angular/build:karma is used', async () => { + applicationTree.overwrite( + 'angular.json', + applicationTree + .readText('angular.json') + .replace('@angular-devkit/build-angular:karma', '@angular/build:karma'), + ); + const tree = await runConfigSchematic(ConfigType.Karma); + const karmaConf = tree.readText('projects/foo/karma.conf.js'); + expect(karmaConf).not.toContain(`'@angular-devkit/build-angular'`); + }); + it('should set the right coverage folder', async () => { const tree = await runConfigSchematic(ConfigType.Karma); const karmaConf = tree.readText('projects/foo/karma.conf.js'); diff --git a/packages/schematics/angular/config/schema.json b/packages/schematics/angular/config/schema.json index 87cb32851223..14bb34f07260 100644 --- a/packages/schematics/angular/config/schema.json +++ b/packages/schematics/angular/config/schema.json @@ -4,18 +4,18 @@ "title": "Angular Config File Options Schema", "type": "object", "additionalProperties": false, - "description": "Generates a configuration file in the given project.", + "description": "Generates configuration files for your project. These files control various aspects of your project's build process, testing, and browser compatibility. This schematic helps you create or update essential configuration files with ease.", "properties": { "project": { "type": "string", - "description": "The name of the project.", + "description": "The name of the project where the configuration file should be created or updated.", "$default": { "$source": "projectName" } }, "type": { "type": "string", - "description": "Specifies which type of configuration file to create.", + "description": "Specifies the type of configuration file to generate.", "enum": ["karma", "browserslist"], "x-prompt": "Which type of configuration file would you like to create?", "$default": { diff --git a/packages/schematics/angular/directive/schema.json b/packages/schematics/angular/directive/schema.json index a5664d79c1ca..753c520774ee 100644 --- a/packages/schematics/angular/directive/schema.json +++ b/packages/schematics/angular/directive/schema.json @@ -3,12 +3,12 @@ "$id": "SchematicsAngularDirective", "title": "Angular Directive Options Schema", "type": "object", - "description": "Creates a new, generic directive definition in the given project.", + "description": "Creates a new directive in your project. Directives are used to extend the behavior or appearance of HTML elements and components. They allow you to manipulate the DOM, add custom attributes, and respond to events. This schematic generates the necessary files and boilerplate code for a new directive.", "additionalProperties": false, "properties": { "name": { "type": "string", - "description": "The name of the new directive.", + "description": "The name for the new directive. This will be used to create the directive's class and spec files (e.g., `my-directive.directive.ts` and `my-directive.directive.spec.ts`).", "$default": { "$source": "argv", "index": 0 @@ -21,19 +21,19 @@ "$default": { "$source": "workingDirectory" }, - "description": "The path at which to create the interface that defines the directive, relative to the workspace root.", + "description": "The path where the directive files should be created, relative to the workspace root. If not provided, the directive will be created in the current directory.", "visible": false }, "project": { "type": "string", - "description": "The name of the project.", + "description": "The name of the project where the directive should be added. If not specified, the CLI will determine the project from the current directory.", "$default": { "$source": "projectName" } }, "prefix": { "type": "string", - "description": "A prefix to apply to generated selectors.", + "description": "A prefix to be added to the directive's selector. For example, if the prefix is `app` and the directive name is `highlight`, the selector will be `appHighlight`.", "alias": "p", "oneOf": [ { @@ -47,39 +47,39 @@ }, "skipTests": { "type": "boolean", - "description": "Do not create \"spec.ts\" test files for the new class.", + "description": "Skip the generation of a unit test file `spec.ts` for the new directive.", "default": false }, "skipImport": { "type": "boolean", - "description": "Do not import this directive into the owning NgModule.", + "description": "Do not automatically import the new directive into its closest NgModule.", "default": false }, "selector": { "type": "string", "format": "html-selector", - "description": "The HTML selector to use for this directive." + "description": "The HTML selector to use for this directive. If not provided, a selector will be generated based on the directive's name (e.g., `appHighlight`)." }, "standalone": { - "description": "Whether the generated directive is standalone.", + "description": "Generate a standalone directive. Standalone directives are self-contained and don't need to be declared in an NgModule. They can be used independently or imported directly into other standalone components or directives.", "type": "boolean", "default": true, "x-user-analytics": "ep.ng_standalone" }, "flat": { "type": "boolean", - "description": "When true (the default), creates the new files at the top level of the current project.", + "description": "Creates the new directive files at the top level of the current project. If set to false, a new folder with the directive's name will be created to contain the files.", "default": true }, "module": { "type": "string", - "description": "The declaring NgModule.", + "description": "Specify the NgModule where the directive should be declared. If not provided, the CLI will attempt to find the closest NgModule in the directive's path.", "alias": "m" }, "export": { "type": "boolean", "default": false, - "description": "The declaring NgModule exports this directive." + "description": "Automatically export the directive from the specified NgModule, making it accessible to other modules in the application." } }, "required": ["name", "project"] diff --git a/packages/schematics/angular/e2e/index.ts b/packages/schematics/angular/e2e/index.ts index 449597073a4d..4eb2b571f399 100644 --- a/packages/schematics/angular/e2e/index.ts +++ b/packages/schematics/angular/e2e/index.ts @@ -25,7 +25,7 @@ import { addRootProvider, updateWorkspace, } from '@schematics/angular/utility'; -import { posix as path } from 'path'; +import { posix as path } from 'node:path'; import { JSONFile } from '../utility/json-file'; import { latestVersions } from '../utility/latest-versions'; import { Schema as E2eOptions } from './schema'; diff --git a/packages/schematics/angular/enum/schema.json b/packages/schematics/angular/enum/schema.json index 41948b8801bd..ae6b17f457bd 100644 --- a/packages/schematics/angular/enum/schema.json +++ b/packages/schematics/angular/enum/schema.json @@ -3,12 +3,12 @@ "$id": "SchematicsAngularEnum", "title": "Angular Enum Options Schema", "type": "object", - "description": "Generates a new, generic enum definition in the given project.", + "description": "Creates a new enum in your project. Enums (enumerations) are a way to define a set of named constants, making your code more readable and maintainable. This schematic generates a new enum with the specified name and type.", "additionalProperties": false, "properties": { "name": { "type": "string", - "description": "The name of the enum.", + "description": "The name for the new enum. This will be used to create the enum file (e.g., `my-enum.enum.ts`).", "$default": { "$source": "argv", "index": 0 @@ -21,19 +21,19 @@ "$default": { "$source": "workingDirectory" }, - "description": "The path at which to create the enum definition, relative to the current workspace.", + "description": "The path where the enum file should be created, relative to the current workspace. If not specified, the enum will be created in the current directory.", "visible": false }, "project": { "type": "string", - "description": "The name of the project in which to create the enum. Default is the configured default project for the workspace.", + "description": "The name of the project where the enum should be created. If not specified, the CLI will determine the project from the current directory.", "$default": { "$source": "projectName" } }, "type": { "type": "string", - "description": "Adds a developer-defined type to the filename, in the format \"name.type.ts\"." + "description": "Adds a custom type to the filename, allowing you to create more descriptive enum names. For example, if you set the type to `status`, the filename will be `my-enum.status.ts`." } }, "required": ["name", "project"] diff --git a/packages/schematics/angular/environments/index.ts b/packages/schematics/angular/environments/index.ts index 903293b2c678..6085d2faceb6 100644 --- a/packages/schematics/angular/environments/index.ts +++ b/packages/schematics/angular/environments/index.ts @@ -8,7 +8,7 @@ import { Rule, SchematicsException, chain } from '@angular-devkit/schematics'; import { AngularBuilder, TargetDefinition, updateWorkspace } from '@schematics/angular/utility'; -import { posix as path } from 'path'; +import { posix as path } from 'node:path'; import { Schema as EnvironmentOptions } from './schema'; const ENVIRONMENTS_DIRECTORY = 'environments'; @@ -75,7 +75,8 @@ function* generateConfigurationEnvironments( if ( buildTarget.builder !== AngularBuilder.Browser && buildTarget.builder !== AngularBuilder.BrowserEsbuild && - buildTarget.builder !== AngularBuilder.Application + buildTarget.builder !== AngularBuilder.Application && + buildTarget.builder !== AngularBuilder.BuildApplication ) { yield log( 'warn', diff --git a/packages/schematics/angular/environments/schema.json b/packages/schematics/angular/environments/schema.json index 6aea81664e04..599373861cb5 100644 --- a/packages/schematics/angular/environments/schema.json +++ b/packages/schematics/angular/environments/schema.json @@ -4,11 +4,11 @@ "title": "Angular Environments Options Schema", "type": "object", "additionalProperties": false, - "description": "Generates and configures environment files for a project.", + "description": "Generates and configures environment files for your project. Environment files allow you to define different settings and configurations for various environments, such as development, testing, and production. This schematic helps you create and manage these files, making it easier to customize your application's behavior for each environment.", "properties": { "project": { "type": "string", - "description": "The name of the project.", + "description": "The name of the project where the environment files should be created or updated.", "$default": { "$source": "projectName" } diff --git a/packages/schematics/angular/guard/schema.json b/packages/schematics/angular/guard/schema.json index 371347a513ba..0f6952c459f6 100644 --- a/packages/schematics/angular/guard/schema.json +++ b/packages/schematics/angular/guard/schema.json @@ -3,12 +3,12 @@ "$id": "SchematicsAngularGuard", "title": "Angular Guard Options Schema", "type": "object", - "description": "Generates a new, generic route guard definition in the given project.", + "description": "Creates a new route guard in your project. Route guards are used to control access to parts of your application by checking certain conditions before a route is activated. This schematic generates a new guard with the specified name, type, and options.", "additionalProperties": false, "properties": { "name": { "type": "string", - "description": "The name of the new route guard.", + "description": "The name for the new route guard. This will be used to create the guard's class and spec files (e.g., `my-guard.guard.ts` and `my-guard.guard.spec.ts`).", "$default": { "$source": "argv", "index": 0 @@ -17,12 +17,12 @@ }, "skipTests": { "type": "boolean", - "description": "Do not create \"spec.ts\" test files for the new guard.", + "description": "Skip the generation of a unit test file `spec.ts` for the new guard.", "default": false }, "flat": { "type": "boolean", - "description": "When true (the default), creates the new files at the top level of the current project.", + "description": "Creates the new guard files at the top level of the current project. If set to false, a new folder with the guard's name will be created to contain the files.", "default": true }, "path": { @@ -31,25 +31,25 @@ "$default": { "$source": "workingDirectory" }, - "description": "The path at which to create the interface that defines the guard, relative to the current workspace.", + "description": "The path where the guard files should be created, relative to the current workspace. If not provided, the guard will be created in the current directory.", "visible": false }, "project": { "type": "string", - "description": "The name of the project.", + "description": "The name of the project where the guard should be created. If not specified, the CLI will determine the project from the current directory.", "$default": { "$source": "projectName" } }, "functional": { "type": "boolean", - "description": "Specifies whether to generate a guard as a function.", + "description": "Generate the guard as a function instead of a class. Functional guards can be simpler for basic scenarios.", "default": true }, "implements": { "alias": "guardType", "type": "array", - "description": "Specifies which type of guard to create.", + "description": "Specifies the type(s) of guard to create. You can choose one or more of the following: `CanActivate` (controls access to a route), `CanActivateChild` (controls access to child routes), `CanDeactivate` (asks for confirmation before leaving a route), `CanMatch` (determines if a route can be matched).", "uniqueItems": true, "minItems": 1, "items": { diff --git a/packages/schematics/angular/interceptor/schema.json b/packages/schematics/angular/interceptor/schema.json index 67c3b8e70a50..ff072a5557d2 100755 --- a/packages/schematics/angular/interceptor/schema.json +++ b/packages/schematics/angular/interceptor/schema.json @@ -4,11 +4,11 @@ "title": "Angular Interceptor Options Schema", "type": "object", "additionalProperties": false, - "description": "Creates a new, generic interceptor definition in the given project.", + "description": "Creates a new interceptor in your project. Interceptors are used to intercept and modify HTTP requests and responses before they reach their destination. This allows you to perform tasks like adding authentication headers, handling errors, or logging requests. This schematic generates the necessary files and boilerplate code for a new interceptor.", "properties": { "name": { "type": "string", - "description": "The name of the interceptor.", + "description": "The name for the new interceptor. This will be used to create the interceptor's class and spec files (e.g., `my-interceptor.interceptor.ts` and `my-interceptor.interceptor.spec.ts`).", "$default": { "$source": "argv", "index": 0 @@ -21,12 +21,12 @@ "$default": { "$source": "workingDirectory" }, - "description": "The path at which to create the interceptor, relative to the workspace root.", + "description": "The path where the interceptor files should be created, relative to the workspace root. If not provided, the interceptor will be created in the current directory.", "visible": false }, "project": { "type": "string", - "description": "The name of the project.", + "description": "The name of the project where the interceptor should be created. If not specified, the CLI will determine the project from the current directory.", "$default": { "$source": "projectName" } @@ -34,16 +34,16 @@ "flat": { "type": "boolean", "default": true, - "description": "When true (the default), creates files at the top level of the project." + "description": "Creates the new interceptor files at the top level of the current project. If set to false, a new folder with the interceptor's name will be created to contain the files." }, "skipTests": { "type": "boolean", - "description": "Do not create \"spec.ts\" test files for the new interceptor.", + "description": "Skip the generation of a unit test file `spec.ts` for the new interceptor.", "default": false }, "functional": { "type": "boolean", - "description": "Creates the interceptor as a `HttpInterceptorFn`.", + "description": "Creates the interceptor as a function `HttpInterceptorFn` instead of a class. Functional interceptors can be simpler for basic scenarios.", "default": true } }, diff --git a/packages/schematics/angular/interface/schema.json b/packages/schematics/angular/interface/schema.json index 410749fcb89e..ab47d1713ab4 100644 --- a/packages/schematics/angular/interface/schema.json +++ b/packages/schematics/angular/interface/schema.json @@ -4,11 +4,11 @@ "title": "Angular Interface Options Schema", "type": "object", "additionalProperties": false, - "description": "Creates a new, generic interface definition in the given project.", + "description": "Creates a new interface in your project. Interfaces define the structure of objects in TypeScript, ensuring type safety and code clarity. This schematic generates a new interface with the specified name and type.", "properties": { "name": { "type": "string", - "description": "The name of the interface.", + "description": "The name for the new interface. This will be used to create the interface file (e.g., `my-interface.interface.ts`).", "$default": { "$source": "argv", "index": 0 @@ -21,23 +21,23 @@ "$default": { "$source": "workingDirectory" }, - "description": "The path at which to create the interface, relative to the workspace root.", + "description": "The path where the interface file should be created, relative to the workspace root. If not provided, the interface will be created in the current directory.", "visible": false }, "project": { "type": "string", - "description": "The name of the project.", + "description": "The name of the project where the interface should be created. If not specified, the CLI will determine the project from the current directory.", "$default": { "$source": "projectName" } }, "prefix": { "type": "string", - "description": "A prefix to apply to generated selectors." + "description": "A prefix to be added to the interface name. This is typically not used for interfaces, as they don't have selectors like components or directives." }, "type": { "type": "string", - "description": "Adds a developer-defined type to the filename, in the format \"name.type.ts\".", + "description": "Adds a custom type to the filename, allowing you to create more descriptive interface names. For example, if you set the type to `data`, the filename will be `my-interface.data.ts`.", "$default": { "$source": "argv", "index": 1 diff --git a/packages/schematics/angular/library/index.ts b/packages/schematics/angular/library/index.ts index 715a84361bf9..212cd89307c2 100644 --- a/packages/schematics/angular/library/index.ts +++ b/packages/schematics/angular/library/index.ts @@ -53,13 +53,13 @@ function addDependenciesToPackageJson() { }, { type: NodeDependencyType.Dev, - name: '@angular/build', - version: latestVersions.AngularBuild, + name: '@angular-devkit/build-angular', + version: latestVersions.DevkitBuildAngular, }, { type: NodeDependencyType.Dev, name: 'ng-packagr', - version: latestVersions['ng-packagr'], + version: latestVersions.NgPackagr, }, { type: NodeDependencyType.Default, @@ -91,7 +91,7 @@ function addLibToWorkspaceFile( prefix: options.prefix, targets: { build: { - builder: Builders.BuildNgPackagr, + builder: Builders.NgPackagr, defaultConfiguration: 'production', options: { project: `${projectRoot}/ng-package.json`, diff --git a/packages/schematics/angular/library/index_spec.ts b/packages/schematics/angular/library/index_spec.ts index 800839ef2b90..a89a53254871 100644 --- a/packages/schematics/angular/library/index_spec.ts +++ b/packages/schematics/angular/library/index_spec.ts @@ -218,7 +218,7 @@ describe('Library Schematic', () => { const tree = await schematicRunner.runSchematic('library', defaultOptions, workspaceTree); const packageJson = getJsonFileContent(tree, 'package.json'); - expect(packageJson.devDependencies['ng-packagr']).toEqual(latestVersions['ng-packagr']); + expect(packageJson.devDependencies['ng-packagr']).toBeDefined(); }); it('should use the latest known versions in package.json', async () => { @@ -388,7 +388,9 @@ describe('Library Schematic', () => { const tree = await schematicRunner.runSchematic('library', defaultOptions, workspaceTree); const workspace = JSON.parse(tree.readContent('/angular.json')); - expect(workspace.projects.foo.architect.build.builder).toBe('@angular/build:ng-packagr'); + expect(workspace.projects.foo.architect.build.builder).toBe( + '@angular-devkit/build-angular:ng-packagr', + ); }); describe('standalone=false', () => { diff --git a/packages/schematics/angular/library/schema.json b/packages/schematics/angular/library/schema.json index d2b1ff037279..62ffdbb422a0 100644 --- a/packages/schematics/angular/library/schema.json +++ b/packages/schematics/angular/library/schema.json @@ -3,12 +3,12 @@ "$id": "SchematicsLibrary", "title": "Library Options Schema", "type": "object", - "description": "Creates a new, generic library project in the current workspace.", + "description": "Creates a new library project in your Angular workspace. Libraries are reusable collections of components, services, and other Angular artifacts that can be shared across multiple applications. This schematic simplifies the process of generating a new library with the necessary files and configurations.", "additionalProperties": false, "properties": { "name": { "type": "string", - "description": "The name of the library.", + "description": "The name for the new library. This name will be used for the project directory and various identifiers within the library's code.", "pattern": "^(?:@[a-zA-Z0-9-*~][a-zA-Z0-9-*._~]*/)?[a-zA-Z0-9-~][a-zA-Z0-9-._~]*$", "$default": { "$source": "argv", @@ -19,37 +19,37 @@ "entryFile": { "type": "string", "format": "path", - "description": "The path at which to create the library's public API file, relative to the workspace root.", + "description": "The path to the library's public API file, relative to the workspace root. This file defines what parts of the library are accessible to applications that import it.", "default": "public-api" }, "prefix": { "type": "string", "format": "html-selector", - "description": "A prefix to apply to generated selectors.", + "description": "A prefix to be added to the selectors of components generated within this library. For example, if the prefix is `my-lib` and you generate a component named `my-component`, the selector will be `my-lib-my-component`.", "default": "lib", "alias": "p" }, "skipPackageJson": { "type": "boolean", "default": false, - "description": "Do not add dependencies to the \"package.json\" file. " + "description": "Do not automatically add dependencies to the `package.json` file." }, "skipInstall": { - "description": "Do not install dependency packages.", + "description": "Skip the automatic installation of packages. You will need to manually install the dependencies later.", "type": "boolean", "default": false }, "skipTsConfig": { "type": "boolean", "default": false, - "description": "Do not update \"tsconfig.json\" to add a path mapping for the new library. The path mapping is needed to use the library in an app, but can be disabled here to simplify development." + "description": "Do not update the workspace `tsconfig.json` file to add a path mapping for the new library. The path mapping is needed to use the library in an application, but can be disabled here to simplify development." }, "projectRoot": { "type": "string", - "description": "The root directory of the new library." + "description": "The root directory for the new library, relative to the workspace root. If not specified, the library will be created in a subfolder within the `projects` directory, using the library's name." }, "standalone": { - "description": "Creates a library based upon the standalone API, without NgModules.", + "description": "Create a library that utilizes the standalone API, eliminating the need for NgModules. This can simplify the structure of your library and its usage in applications.", "type": "boolean", "default": true, "x-user-analytics": "ep.ng_standalone" diff --git a/packages/schematics/angular/migrations/update-ssr-imports/migration.ts b/packages/schematics/angular/migrations/update-ssr-imports/migration.ts index 847200791b61..7e17888a1c54 100644 --- a/packages/schematics/angular/migrations/update-ssr-imports/migration.ts +++ b/packages/schematics/angular/migrations/update-ssr-imports/migration.ts @@ -8,6 +8,7 @@ import { DirEntry, Rule, UpdateRecorder } from '@angular-devkit/schematics'; import * as ts from '../../third_party/github.com/Microsoft/TypeScript/lib/typescript'; +import { getPackageJsonDependency } from '../../utility/dependencies'; function* visit(directory: DirEntry): IterableIterator<ts.SourceFile> { for (const path of directory.subfiles) { @@ -46,6 +47,10 @@ function* visit(directory: DirEntry): IterableIterator<ts.SourceFile> { */ export default function (): Rule { return (tree) => { + if (!getPackageJsonDependency(tree, '@angular/ssr')) { + return; + } + for (const sourceFile of visit(tree.root)) { let recorder: UpdateRecorder | undefined; diff --git a/packages/schematics/angular/migrations/update-ssr-imports/migration_spec.ts b/packages/schematics/angular/migrations/update-ssr-imports/migration_spec.ts index 6cbc7ebbee6e..9c8919b0febe 100644 --- a/packages/schematics/angular/migrations/update-ssr-imports/migration_spec.ts +++ b/packages/schematics/angular/migrations/update-ssr-imports/migration_spec.ts @@ -19,6 +19,14 @@ describe('CommonEngine migration', () => { let tree: UnitTestTree; beforeEach(() => { tree = new UnitTestTree(new EmptyTree()); + tree.create( + 'package.json', + JSON.stringify({ + dependencies: { + '@angular/ssr': '0.0.0', + }, + }), + ); }); function runMigration(): Promise<UnitTestTree> { diff --git a/packages/schematics/angular/migrations/use-application-builder/migration.ts b/packages/schematics/angular/migrations/use-application-builder/migration.ts index 40f2740e9463..464f6b4bf560 100644 --- a/packages/schematics/angular/migrations/use-application-builder/migration.ts +++ b/packages/schematics/angular/migrations/use-application-builder/migration.ts @@ -151,7 +151,10 @@ function* updateBuildTarget( // Update server file const ssrMainFile = serverTarget?.options?.['main']; if (typeof ssrMainFile === 'string') { - yield deleteFile(ssrMainFile); + // Do not delete the server main file if it's the same as the browser file. + if (buildTarget.options?.browser !== ssrMainFile) { + yield deleteFile(ssrMainFile); + } yield externalSchematic('@schematics/angular', 'ssr', { project: projectName, @@ -457,8 +460,12 @@ function deleteFile(path: string): Rule { } function updateJsonFile(path: string, updater: (json: JSONFile) => void): Rule { - return (tree) => { - updater(new JSONFile(tree, path)); + return (tree, ctx) => { + if (tree.exists(path)) { + updater(new JSONFile(tree, path)); + } else { + ctx.logger.info(`Skipping updating '${path}' as it does not exist.`); + } }; } diff --git a/packages/schematics/angular/ng-new/schema.json b/packages/schematics/angular/ng-new/schema.json index 870460ae8817..5b214c73b141 100644 --- a/packages/schematics/angular/ng-new/schema.json +++ b/packages/schematics/angular/ng-new/schema.json @@ -3,15 +3,15 @@ "$id": "SchematicsAngularNgNew", "title": "Angular Ng New Options Schema", "type": "object", - "description": "Creates a new project by combining the workspace and application schematics.", + "description": "Creates a new Angular workspace and an initial project. This schematic sets up the foundation for your Angular development, generating the workspace configuration files and an optional starter application. You can customize various aspects of the workspace and the initial project, such as routing, styling, and testing.", "additionalProperties": false, "properties": { "directory": { "type": "string", - "description": "The directory name to create the workspace in." + "description": "The directory where the new workspace and project should be created. If not specified, the workspace will be created in the current directory." }, "name": { - "description": "The name of the new workspace and initial project.", + "description": "The name for the new workspace and the initial project. This name will be used for the root directory and various identifiers throughout the project.", "type": "string", "$default": { "$source": "argv", @@ -20,18 +20,18 @@ "x-prompt": "What name would you like to use for the new workspace and initial project?" }, "skipInstall": { - "description": "Do not install dependency packages.", + "description": "Skip the automatic installation of packages. You will need to manually install the dependencies later.", "type": "boolean", "default": false }, "skipGit": { - "description": "Do not initialize a git repository.", + "description": "Do not initialize a Git repository in the new workspace. By default, a Git repository is initialized to help you track changes to your project.", "type": "boolean", "default": false, "alias": "g" }, "commit": { - "description": "Initial git repository commit information.", + "description": "Configure the initial Git commit for the new repository.", "oneOf": [ { "type": "boolean" }, { @@ -54,24 +54,24 @@ "default": true }, "newProjectRoot": { - "description": "The path where new projects will be created, relative to the new workspace root.", + "description": "The path where new projects will be created within the workspace, relative to the workspace root. By default, new projects are created in the `projects` directory.", "type": "string", "default": "projects" }, "inlineStyle": { - "description": "Include styles inline in the component TS file. By default, an external styles file is created and referenced in the component TypeScript file.", + "description": "Include the styles for the initial application's root component directly within the `app.component.ts` file. By default, a separate stylesheet file (e.g., `app.component.css`) is created.", "type": "boolean", "alias": "s", "x-user-analytics": "ep.ng_inline_style" }, "inlineTemplate": { - "description": "Include template inline in the component TS file. By default, an external template file is created and referenced in the component TypeScript file.", + "description": "Include the HTML template for the initial application's root component directly within the `app.component.ts` file. By default, a separate template file (e.g., `app.component.html`) is created.", "type": "boolean", "alias": "t", "x-user-analytics": "ep.ng_inline_template" }, "viewEncapsulation": { - "description": "The view encapsulation strategy to use in the initial project.", + "description": "Sets the view encapsulation mode for components in the initial project. This determines how component styles are scoped and applied. Options include: `Emulated` (default, styles are scoped to the component), `None` (styles are global), and `ShadowDom` (styles are encapsulated using Shadow DOM).", "enum": ["Emulated", "None", "ShadowDom"], "type": "string" }, @@ -85,41 +85,41 @@ }, "routing": { "type": "boolean", - "description": "Enable routing in the initial project.", + "description": "Enable routing in the initial application project. This sets up the necessary files and modules for managing navigation between different views in your application.", "x-user-analytics": "ep.ng_routing" }, "prefix": { "type": "string", "format": "html-selector", - "description": "The prefix to apply to generated selectors for the initial project.", + "description": "The prefix to apply to generated selectors for the initial project. For example, if the prefix is `my-app` and you generate a component named `my-component`, the selector will be `my-app-my-component`.", "minLength": 1, "default": "app", "alias": "p" }, "style": { - "description": "The file extension or preprocessor to use for style files.", + "description": "The type of stylesheet files to be created for components in the initial project.", "type": "string", "enum": ["css", "scss", "sass", "less"], "x-user-analytics": "ep.ng_style" }, "skipTests": { - "description": "Do not generate \"spec.ts\" test files for the new project.", + "description": "Skip the generation of unit test files `spec.ts`.", "type": "boolean", "default": false, "alias": "S" }, "createApplication": { - "description": "Create a new initial application project in the 'src' folder of the new workspace. When false, creates an empty workspace with no initial application. You can then use the generate application command so that all applications are created in the projects folder.", + "description": "Create a new initial application project in the new workspace. When false, creates an empty workspace with no initial application. You can then use the `ng generate application` command to create applications in the `projects` directory.", "type": "boolean", "default": true }, "minimal": { - "description": "Create a workspace without any testing frameworks. (Use for learning purposes only.)", + "description": "Generate a minimal Angular workspace without any testing frameworks. This is intended for learning purposes and simple experimentation, not for production applications.", "type": "boolean", "default": false }, "strict": { - "description": "Creates a workspace with stricter type checking and stricter bundle budgets settings. This setting helps improve maintainability and catch bugs ahead of time. For more information, see https://angular.dev/tools/cli/template-typecheck#strict-mode", + "description": "Enable stricter type checking and stricter bundle budgets settings. This setting helps improve maintainability and catch bugs ahead of time. For more information, see https://angular.dev/tools/cli/template-typecheck#strict-mode", "type": "boolean", "default": true }, @@ -135,16 +135,16 @@ "x-user-analytics": "ep.ng_standalone" }, "ssr": { - "description": "Creates an application with Server-Side Rendering (SSR) and Static Site Generation (SSG/Prerendering) enabled.", + "description": "Configure the initial application for Server-Side Rendering (SSR) and Static Site Generation (SSG/Prerendering).", "type": "boolean", "x-user-analytics": "ep.ng_ssr" }, "serverRouting": { - "description": "Creates a server application using the Server Routing and App Engine APIs (Developer Preview).", + "description": "Create a server application in the initial project using the Server Routing and App Engine APIs (Developer Preview).", "type": "boolean" }, "experimentalZoneless": { - "description": "Create an application that does not utilize zone.js.", + "description": "Create an initial application that does not utilize `zone.js`.", "type": "boolean", "default": false } diff --git a/packages/schematics/angular/package.json b/packages/schematics/angular/package.json index 5c4ca5f913dd..146f4bb1e622 100644 --- a/packages/schematics/angular/package.json +++ b/packages/schematics/angular/package.json @@ -17,8 +17,8 @@ }, "schematics": "./collection.json", "dependencies": { - "@angular-devkit/core": "0.0.0-PLACEHOLDER", - "@angular-devkit/schematics": "0.0.0-PLACEHOLDER", + "@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER", + "@angular-devkit/schematics": "workspace:0.0.0-PLACEHOLDER", "jsonc-parser": "3.3.1" } } diff --git a/packages/schematics/angular/pipe/schema.json b/packages/schematics/angular/pipe/schema.json index ce9ba2699b7f..62dc7fa217b4 100644 --- a/packages/schematics/angular/pipe/schema.json +++ b/packages/schematics/angular/pipe/schema.json @@ -4,11 +4,11 @@ "title": "Angular Pipe Options Schema", "type": "object", "additionalProperties": false, - "description": "Creates a new, generic pipe definition in the given project.", + "description": "Creates a new pipe in your project. Pipes are used to transform data for display in templates. They take input values and apply a specific transformation, such as formatting dates, currency, or filtering arrays. This schematic generates the necessary files and boilerplate code for a new pipe.", "properties": { "name": { "type": "string", - "description": "The name of the pipe.", + "description": "The name for the new pipe. This will be used to create the pipe's class and spec files (e.g., `my-pipe.pipe.ts` and `my-pipe.pipe.spec.ts`).", "$default": { "$source": "argv", "index": 0 @@ -21,12 +21,12 @@ "$default": { "$source": "workingDirectory" }, - "description": "The path at which to create the pipe, relative to the workspace root.", + "description": "The path where the pipe files should be created, relative to the workspace root. If not provided, the pipe will be created in the current directory.", "visible": false }, "project": { "type": "string", - "description": "The name of the project.", + "description": "The name of the project where the pipe should be created. If not specified, the CLI will determine the project from the current directory.", "$default": { "$source": "projectName" } @@ -34,33 +34,33 @@ "flat": { "type": "boolean", "default": true, - "description": "When true (the default) creates files at the top level of the project." + "description": "Creates the new pipe files at the top level of the current project. If set to false, a new folder with the pipe's name will be created to contain the files." }, "skipTests": { "type": "boolean", - "description": "Do not create \"spec.ts\" test files for the new pipe.", + "description": "Prevent the generation of a unit test file `spec.ts` for the new pipe.", "default": false }, "skipImport": { "type": "boolean", "default": false, - "description": "Do not import this pipe into the owning NgModule." + "description": "Do not automatically import the new pipe into its closest NgModule." }, "standalone": { - "description": "Whether the generated pipe is standalone.", + "description": "Generate a standalone pipe. Standalone pipes are self-contained and don't need to be declared in an NgModule. They can be used independently or imported directly into other standalone components, directives, or pipes.", "type": "boolean", "default": true, "x-user-analytics": "ep.ng_standalone" }, "module": { "type": "string", - "description": "The declaring NgModule.", + "description": "Specify the NgModule where the pipe should be declared. If not provided, the CLI will attempt to find the closest NgModule in the pipe's path.", "alias": "m" }, "export": { "type": "boolean", "default": false, - "description": "The declaring NgModule exports this pipe." + "description": "Automatically export the pipe from the specified NgModule, making it accessible to other modules in the application." } }, "required": ["name", "project"] diff --git a/packages/schematics/angular/resolver/schema.json b/packages/schematics/angular/resolver/schema.json index aa0d5016796b..a364e9271397 100644 --- a/packages/schematics/angular/resolver/schema.json +++ b/packages/schematics/angular/resolver/schema.json @@ -1,14 +1,14 @@ { "$schema": "http://json-schema.org/draft-07/schema", "$id": "SchematicsAngularResolver", - "title": "Angular resolver Options Schema", + "title": "Angular Resolver Options Schema", "type": "object", "additionalProperties": false, - "description": "Generates a new, generic resolver definition in the given project.", + "description": "Creates a new resolver in your project. Resolvers are used to pre-fetch data before a route is activated, ensuring that the necessary data is available before the component is displayed. This can improve the user experience by preventing delays and loading states. This schematic generates a new resolver with the specified name and options.", "properties": { "name": { "type": "string", - "description": "The name of the new resolver.", + "description": "The name for the new resolver. This will be used to create the resolver's class and spec files (e.g., `my-resolver.resolver.ts` and `my-resolver.resolver.spec.ts`).", "$default": { "$source": "argv", "index": 0 @@ -17,17 +17,17 @@ }, "skipTests": { "type": "boolean", - "description": "Do not create \"spec.ts\" test files for the new resolver.", + "description": "Skip the generation of a unit test file `spec.ts` for the new resolver.", "default": false }, "flat": { "type": "boolean", - "description": "When true (the default), creates the new files at the top level of the current project.", + "description": "Creates the new resolver files at the top level of the current project. If set to false, a new folder with the resolver's name will be created to contain the files.", "default": true }, "functional": { "type": "boolean", - "description": "Creates the resolver as a `ResolveFn`.", + "description": "Creates the resolver as a function `ResolveFn` instead of a class. Functional resolvers can be simpler for basic scenarios.", "default": true }, "path": { @@ -36,12 +36,12 @@ "$default": { "$source": "workingDirectory" }, - "description": "The path at which to create the interface that defines the resolver, relative to the current workspace.", + "description": "The path where the resolver files should be created, relative to the current workspace. If not provided, the resolver will be created in the current directory.", "visible": false }, "project": { "type": "string", - "description": "The name of the project.", + "description": "The name of the project where the resolver should be created. If not specified, the CLI will determine the project from the current directory.", "$default": { "$source": "projectName" } diff --git a/packages/schematics/angular/server/files/application-builder/ngmodule-src/app/app.module.server.ts.template b/packages/schematics/angular/server/files/application-builder/ngmodule-src/app/app.module.server.ts.template index 23b7b3bbd47c..107232f9107f 100644 --- a/packages/schematics/angular/server/files/application-builder/ngmodule-src/app/app.module.server.ts.template +++ b/packages/schematics/angular/server/files/application-builder/ngmodule-src/app/app.module.server.ts.template @@ -1,13 +1,13 @@ import { NgModule } from '@angular/core'; import { ServerModule } from '@angular/platform-server';<% if(serverRouting) { %> -import { provideServerRoutesConfig } from '@angular/ssr';<% } %> +import { provideServerRouting } from '@angular/ssr';<% } %> import { AppComponent } from './app.component'; import { AppModule } from './app.module';<% if(serverRouting) { %> import { serverRoutes } from './app.routes.server';<% } %> @NgModule({ imports: [AppModule, ServerModule],<% if(serverRouting) { %> - providers: [provideServerRoutesConfig(serverRoutes)],<% } %> + providers: [provideServerRouting(serverRoutes)],<% } %> bootstrap: [AppComponent], }) export class AppServerModule {} diff --git a/packages/schematics/angular/server/files/application-builder/standalone-src/app/app.config.server.ts.template b/packages/schematics/angular/server/files/application-builder/standalone-src/app/app.config.server.ts.template index 2ee1daaa53b0..a7fd3d0b4fe7 100644 --- a/packages/schematics/angular/server/files/application-builder/standalone-src/app/app.config.server.ts.template +++ b/packages/schematics/angular/server/files/application-builder/standalone-src/app/app.config.server.ts.template @@ -1,13 +1,13 @@ import { mergeApplicationConfig, ApplicationConfig } from '@angular/core'; import { provideServerRendering } from '@angular/platform-server';<% if(serverRouting) { %> -import { provideServerRoutesConfig } from '@angular/ssr';<% } %> +import { provideServerRouting } from '@angular/ssr';<% } %> import { appConfig } from './app.config';<% if(serverRouting) { %> import { serverRoutes } from './app.routes.server';<% } %> const serverConfig: ApplicationConfig = { providers: [ provideServerRendering(),<% if(serverRouting) { %> - provideServerRoutesConfig(serverRoutes)<% } %> + provideServerRouting(serverRoutes)<% } %> ] }; diff --git a/packages/schematics/angular/server/schema.json b/packages/schematics/angular/server/schema.json index ca5ad0e6fdc4..bad36a9ee36a 100644 --- a/packages/schematics/angular/server/schema.json +++ b/packages/schematics/angular/server/schema.json @@ -4,22 +4,22 @@ "title": "Angular Server App Options Schema", "type": "object", "additionalProperties": false, - "description": "Pass this schematic to the \"run\" command to set up server-side rendering for an app.", + "description": "Sets up server-side rendering (SSR) for your Angular application. SSR allows your app to be rendered on the server, improving initial load performance and SEO. This schematic configures your project for SSR and generates the necessary files.", "properties": { "project": { "type": "string", - "description": "The name of the project.", + "description": "The name of the project to enable server-side rendering for.", "$default": { "$source": "projectName" } }, "skipInstall": { - "description": "Do not install packages for dependencies.", + "description": "Skip the automatic installation of packages. You will need to manually install the dependencies later.", "type": "boolean", "default": false }, "serverRouting": { - "description": "Creates a server application using the Server Routing and App Engine APIs (Developer Preview).", + "description": "Configure the server application to use the Server Routing and App Engine APIs (Developer Preview).", "type": "boolean" } }, diff --git a/packages/schematics/angular/service-worker/index.ts b/packages/schematics/angular/service-worker/index.ts index 46092f449d37..e32969d9d0c6 100644 --- a/packages/schematics/angular/service-worker/index.ts +++ b/packages/schematics/angular/service-worker/index.ts @@ -122,7 +122,10 @@ export default function (options: ServiceWorkerOptions): Rule { let browserEntryPoint: string | undefined; const ngswConfigPath = join(normalize(project.root), 'ngsw-config.json'); - if (buildTarget.builder === Builders.Application) { + if ( + buildTarget.builder === Builders.Application || + buildTarget.builder === Builders.BuildApplication + ) { browserEntryPoint = buildOptions.browser as string; const productionConf = buildTarget.configurations?.production; if (productionConf) { diff --git a/packages/schematics/angular/service-worker/schema.json b/packages/schematics/angular/service-worker/schema.json index af19ad3384fe..8eba57a14432 100644 --- a/packages/schematics/angular/service-worker/schema.json +++ b/packages/schematics/angular/service-worker/schema.json @@ -4,18 +4,18 @@ "title": "Angular Service Worker Options Schema", "type": "object", "additionalProperties": false, - "description": "Pass this schematic to the \"run\" command to create a service worker", + "description": "Adds a service worker to your project. Service workers enable your application to work offline or on low-quality networks by caching assets and intercepting network requests. This schematic configures your project to use a service worker.", "properties": { "project": { "type": "string", - "description": "The name of the project.", + "description": "The name of the project to add the service worker to. If not specified, the CLI will determine the project from the current directory.", "$default": { "$source": "projectName" } }, "target": { "type": "string", - "description": "The target to apply service worker to.", + "description": "The build target to apply the service worker to. This is typically `build`, indicating that the service worker should be generated during the standard build process.", "default": "build" } }, diff --git a/packages/schematics/angular/service/schema.json b/packages/schematics/angular/service/schema.json index bd04386e6280..d5a4d0418acd 100644 --- a/packages/schematics/angular/service/schema.json +++ b/packages/schematics/angular/service/schema.json @@ -4,11 +4,11 @@ "title": "Angular Service Options Schema", "type": "object", "additionalProperties": false, - "description": "Creates a new, generic service definition in the given project.", + "description": "Creates a new service in your project. Services are used to encapsulate reusable logic, such as data access, API calls, or utility functions. This schematic simplifies the process of generating a new service with the necessary files and boilerplate code.", "properties": { "name": { "type": "string", - "description": "The name of the service.", + "description": "The name for the new service. This will be used to create the service's class and spec files (e.g., `my-service.service.ts` and `my-service.service.spec.ts`).", "$default": { "$source": "argv", "index": 0 @@ -20,12 +20,12 @@ "$default": { "$source": "workingDirectory" }, - "description": "The path at which to create the service, relative to the workspace root.", + "description": "The path where the service files should be created, relative to the workspace root. If not provided, the service will be created in the project's `src/app` directory.", "visible": false }, "project": { "type": "string", - "description": "The name of the project.", + "description": "The name of the project where the service should be added. If not specified, the CLI will determine the project from the current directory.", "$default": { "$source": "projectName" } @@ -33,11 +33,11 @@ "flat": { "type": "boolean", "default": true, - "description": "When true (the default), creates files at the top level of the project." + "description": "Creates files at the top level of the project or the given path. If set to false, a new folder with the service's name will be created to contain the files." }, "skipTests": { "type": "boolean", - "description": "Do not create \"spec.ts\" test files for the new service.", + "description": "Skip the generation of a unit test file `spec.ts` for the service.", "default": false } }, diff --git a/packages/schematics/angular/ssr/files/application-builder-common-engine/server.ts.template b/packages/schematics/angular/ssr/files/application-builder-common-engine/server.ts.template index 7e8b13608374..63a70ae893f6 100644 --- a/packages/schematics/angular/ssr/files/application-builder-common-engine/server.ts.template +++ b/packages/schematics/angular/ssr/files/application-builder-common-engine/server.ts.template @@ -63,3 +63,5 @@ if (isMainModule(import.meta.url)) { console.log(`Node Express server listening on http://localhost:${port}`); }); } + +export default app; diff --git a/packages/schematics/angular/ssr/files/application-builder/server.ts.template b/packages/schematics/angular/ssr/files/application-builder/server.ts.template index 877173580ff0..1d07f023a713 100644 --- a/packages/schematics/angular/ssr/files/application-builder/server.ts.template +++ b/packages/schematics/angular/ssr/files/application-builder/server.ts.template @@ -61,6 +61,6 @@ if (isMainModule(import.meta.url)) { } /** - * The request handler used by the Angular CLI (dev-server and during build). + * Request handler used by the Angular CLI (for dev-server and during build) or Firebase Cloud Functions. */ export const reqHandler = createNodeRequestHandler(app); diff --git a/packages/schematics/angular/ssr/schema.json b/packages/schematics/angular/ssr/schema.json index 788ad7fec3d4..669f1449ad13 100644 --- a/packages/schematics/angular/ssr/schema.json +++ b/packages/schematics/angular/ssr/schema.json @@ -3,21 +3,22 @@ "$id": "SchematicsAngularSSR", "title": "Angular SSR Options Schema", "type": "object", + "description": "Enables Server-Side Rendering (SSR) for your Angular application. SSR allows your app to be rendered on the server, which can significantly improve its initial load performance and Search Engine Optimization (SEO). This schematic configures your project for SSR, generating the necessary files and making the required modifications to your project's structure.", "properties": { "project": { "type": "string", - "description": "The name of the project.", + "description": "The name of the project you want to enable SSR for.", "$default": { "$source": "projectName" } }, "skipInstall": { - "description": "Skip installing dependency packages.", + "description": "Skip the automatic installation of packages. You will need to manually install the dependencies later.", "type": "boolean", "default": false }, "serverRouting": { - "description": "Creates a server application using the Server Routing and App Engine APIs (Developer Preview).", + "description": "Configure the server application to use the Angular Server Routing API and App Engine APIs (currently in Developer Preview).", "type": "boolean" } }, diff --git a/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/BUILD.bazel b/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/BUILD.bazel index 6e9deb1c7742..3f1e3fd74eeb 100644 --- a/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/BUILD.bazel +++ b/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/BUILD.bazel @@ -1,11 +1,11 @@ load("//tools:interop.bzl", "ts_project") # files fetched on 2024-11-28 from -# https://github.com/microsoft/TypeScript/releases/tag/v5.7.2 +# https://github.com/microsoft/TypeScript/releases/tag/v5.8-beta # Commands to download: -# curl https://raw.githubusercontent.com/microsoft/TypeScript/v5.7.2/lib/typescript.d.ts -o packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.d.ts -# curl https://raw.githubusercontent.com/microsoft/TypeScript/v5.7.2/lib/typescript.js -o packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.js +# curl https://raw.githubusercontent.com/microsoft/TypeScript/v5.8-beta/lib/typescript.d.ts -o packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.d.ts +# curl https://raw.githubusercontent.com/microsoft/TypeScript/v5.8-beta/lib/typescript.js -o packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.js licenses(["notice"]) # Apache 2.0 diff --git a/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.d.ts b/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.d.ts index 6780dd1ddb94..e7d26171cf4c 100644 --- a/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.d.ts +++ b/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.d.ts @@ -1486,6 +1486,10 @@ declare namespace ts { command: CommandTypes.Quickinfo; arguments: FileLocationRequestArgs; } + export interface QuickInfoRequestArgs extends FileLocationRequestArgs { + /** TODO */ + verbosityLevel?: number; + } /** * Body of QuickInfoResponse. */ @@ -1519,6 +1523,10 @@ declare namespace ts { * JSDoc tags associated with symbol. */ tags: JSDocTagInfo[]; + /** + * TODO + */ + canIncreaseVerbosityLevel?: boolean; } /** * Quickinfo response message. @@ -2508,6 +2516,7 @@ declare namespace ts { ES2022 = "es2022", ESNext = "esnext", Node16 = "node16", + Node18 = "node18", NodeNext = "nodenext", Preserve = "preserve", } @@ -3633,7 +3642,7 @@ declare namespace ts { readDirectory(rootDir: string, extensions: readonly string[], excludes: readonly string[] | undefined, includes: readonly string[] | undefined, depth?: number): string[]; } } - const versionMajorMinor = "5.7"; + const versionMajorMinor = "5.8"; /** The version of the TypeScript compiler release */ const version: string; /** @@ -6279,6 +6288,7 @@ declare namespace ts { getBigIntType(): Type; getBigIntLiteralType(value: PseudoBigInt): BigIntLiteralType; getBooleanType(): Type; + getUnknownType(): Type; getFalseType(): Type; getTrueType(): Type; getVoidType(): Type; @@ -6338,6 +6348,7 @@ declare namespace ts { * and the operation is cancelled, then it should be discarded, otherwise it is safe to keep. */ runWithCancellationToken<T>(token: CancellationToken, cb: (checker: TypeChecker) => T): T; + getTypeArgumentsForResolvedSignature(signature: Signature): readonly Type[] | undefined; } enum NodeBuilderFlags { None = 0, @@ -6841,11 +6852,15 @@ declare namespace ts { String = 0, Number = 1, } + type ElementWithComputedPropertyName = (ClassElement | ObjectLiteralElement) & { + name: ComputedPropertyName; + }; interface IndexInfo { keyType: Type; type: Type; isReadonly: boolean; declaration?: IndexSignatureDeclaration; + components?: ElementWithComputedPropertyName[]; } enum InferencePriority { None = 0, @@ -7016,6 +7031,7 @@ declare namespace ts { /** @deprecated */ keyofStringsOnly?: boolean; lib?: string[]; + libReplacement?: boolean; locale?: string; mapRoot?: string; maxNodeModuleJsDepth?: number; @@ -7092,6 +7108,7 @@ declare namespace ts { /** Paths used to compute primary types search locations */ typeRoots?: string[]; verbatimModuleSyntax?: boolean; + erasableSyntaxOnly?: boolean; esModuleInterop?: boolean; useDefineForClassFields?: boolean; [option: string]: CompilerOptionsValue | TsConfigSourceFile | undefined; @@ -7123,6 +7140,7 @@ declare namespace ts { ES2022 = 7, ESNext = 99, Node16 = 100, + Node18 = 101, NodeNext = 199, Preserve = 200, } @@ -7415,8 +7433,9 @@ declare namespace ts { NonNullAssertions = 4, PartiallyEmittedExpressions = 8, ExpressionsWithTypeArguments = 16, - Assertions = 6, - All = 31, + Satisfies = 32, + Assertions = 38, + All = 63, ExcludeJSDocTypeAssertion = -2147483648, } type ImmediatelyInvokedFunctionExpression = CallExpression & { @@ -10746,6 +10765,7 @@ declare namespace ts { displayParts?: SymbolDisplayPart[]; documentation?: SymbolDisplayPart[]; tags?: JSDocTagInfo[]; + canIncreaseVerbosityLevel?: boolean; } type RenameInfo = RenameInfoSuccess | RenameInfoFailure; interface RenameInfoSuccess { diff --git a/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.js b/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.js index 33387eadeb84..c709e47a4cc6 100644 --- a/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.js +++ b/packages/schematics/angular/third_party/github.com/Microsoft/TypeScript/lib/typescript.js @@ -436,6 +436,7 @@ __export(typescript_exports, { createPrinterWithRemoveCommentsNeverAsciiEscape: () => createPrinterWithRemoveCommentsNeverAsciiEscape, createPrinterWithRemoveCommentsOmitTrailingSemicolon: () => createPrinterWithRemoveCommentsOmitTrailingSemicolon, createProgram: () => createProgram, + createProgramDiagnostics: () => createProgramDiagnostics, createProgramHost: () => createProgramHost, createPropertyNameNodeForIdentifierOrLiteral: () => createPropertyNameNodeForIdentifierOrLiteral, createQueue: () => createQueue, @@ -605,6 +606,8 @@ __export(typescript_exports, { forEachLeadingCommentRange: () => forEachLeadingCommentRange, forEachNameInAccessChainWalkingLeft: () => forEachNameInAccessChainWalkingLeft, forEachNameOfDefaultExport: () => forEachNameOfDefaultExport, + forEachOptionsSyntaxByName: () => forEachOptionsSyntaxByName, + forEachProjectReference: () => forEachProjectReference, forEachPropertyAssignment: () => forEachPropertyAssignment, forEachResolvedProjectReference: () => forEachResolvedProjectReference, forEachReturnStatement: () => forEachReturnStatement, @@ -844,6 +847,8 @@ __export(typescript_exports, { getLeadingCommentRangesOfNode: () => getLeadingCommentRangesOfNode, getLeftmostAccessExpression: () => getLeftmostAccessExpression, getLeftmostExpression: () => getLeftmostExpression, + getLibFileNameFromLibReference: () => getLibFileNameFromLibReference, + getLibNameFromLibReference: () => getLibNameFromLibReference, getLibraryNameFromLibFileName: () => getLibraryNameFromLibFileName, getLineAndCharacterOfPosition: () => getLineAndCharacterOfPosition, getLineInfo: () => getLineInfo, @@ -916,6 +921,8 @@ __export(typescript_exports, { getOptionFromName: () => getOptionFromName, getOptionsForLibraryResolution: () => getOptionsForLibraryResolution, getOptionsNameMap: () => getOptionsNameMap, + getOptionsSyntaxByArrayElementValue: () => getOptionsSyntaxByArrayElementValue, + getOptionsSyntaxByValue: () => getOptionsSyntaxByValue, getOrCreateEmitNode: () => getOrCreateEmitNode, getOrUpdate: () => getOrUpdate, getOriginalNode: () => getOriginalNode, @@ -952,7 +959,6 @@ __export(typescript_exports, { getPrivateIdentifier: () => getPrivateIdentifier, getProperties: () => getProperties, getProperty: () => getProperty, - getPropertyArrayElementValue: () => getPropertyArrayElementValue, getPropertyAssignmentAliasLikeExpression: () => getPropertyAssignmentAliasLikeExpression, getPropertyNameForPropertyNameNode: () => getPropertyNameForPropertyNameNode, getPropertyNameFromType: () => getPropertyNameFromType, @@ -1863,6 +1869,7 @@ __export(typescript_exports, { moduleResolutionUsesNodeModules: () => moduleResolutionUsesNodeModules, moduleSpecifierToValidIdentifier: () => moduleSpecifierToValidIdentifier, moduleSpecifiers: () => ts_moduleSpecifiers_exports, + moduleSupportsImportAttributes: () => moduleSupportsImportAttributes, moduleSymbolToValidIdentifier: () => moduleSymbolToValidIdentifier, moveEmitHelpers: () => moveEmitHelpers, moveRangeEnd: () => moveRangeEnd, @@ -2277,8 +2284,8 @@ __export(typescript_exports, { module.exports = __toCommonJS(typescript_exports); // src/compiler/corePublic.ts -var versionMajorMinor = "5.7"; -var version = "5.7.2"; +var versionMajorMinor = "5.8"; +var version = "5.8.0-beta"; var Comparison = /* @__PURE__ */ ((Comparison3) => { Comparison3[Comparison3["LessThan"] = -1] = "LessThan"; Comparison3[Comparison3["EqualTo"] = 0] = "EqualTo"; @@ -6531,6 +6538,7 @@ var ObjectFlags = /* @__PURE__ */ ((ObjectFlags3) => { ObjectFlags3[ObjectFlags3["IsGenericObjectType"] = 4194304] = "IsGenericObjectType"; ObjectFlags3[ObjectFlags3["IsGenericIndexType"] = 8388608] = "IsGenericIndexType"; ObjectFlags3[ObjectFlags3["IsGenericType"] = 12582912] = "IsGenericType"; + ObjectFlags3[ObjectFlags3["IsNarrowingType"] = 16777216] = "IsNarrowingType"; ObjectFlags3[ObjectFlags3["ContainsIntersections"] = 16777216] = "ContainsIntersections"; ObjectFlags3[ObjectFlags3["IsUnknownLikeUnionComputed"] = 33554432] = "IsUnknownLikeUnionComputed"; ObjectFlags3[ObjectFlags3["IsUnknownLikeUnion"] = 67108864] = "IsUnknownLikeUnion"; @@ -6727,6 +6735,7 @@ var ModuleKind = /* @__PURE__ */ ((ModuleKind3) => { ModuleKind3[ModuleKind3["ES2022"] = 7] = "ES2022"; ModuleKind3[ModuleKind3["ESNext"] = 99] = "ESNext"; ModuleKind3[ModuleKind3["Node16"] = 100] = "Node16"; + ModuleKind3[ModuleKind3["Node18"] = 101] = "Node18"; ModuleKind3[ModuleKind3["NodeNext"] = 199] = "NodeNext"; ModuleKind3[ModuleKind3["Preserve"] = 200] = "Preserve"; return ModuleKind3; @@ -7141,8 +7150,9 @@ var OuterExpressionKinds = /* @__PURE__ */ ((OuterExpressionKinds2) => { OuterExpressionKinds2[OuterExpressionKinds2["NonNullAssertions"] = 4] = "NonNullAssertions"; OuterExpressionKinds2[OuterExpressionKinds2["PartiallyEmittedExpressions"] = 8] = "PartiallyEmittedExpressions"; OuterExpressionKinds2[OuterExpressionKinds2["ExpressionsWithTypeArguments"] = 16] = "ExpressionsWithTypeArguments"; - OuterExpressionKinds2[OuterExpressionKinds2["Assertions"] = 6] = "Assertions"; - OuterExpressionKinds2[OuterExpressionKinds2["All"] = 31] = "All"; + OuterExpressionKinds2[OuterExpressionKinds2["Satisfies"] = 32] = "Satisfies"; + OuterExpressionKinds2[OuterExpressionKinds2["Assertions"] = 38] = "Assertions"; + OuterExpressionKinds2[OuterExpressionKinds2["All"] = 63] = "All"; OuterExpressionKinds2[OuterExpressionKinds2["ExcludeJSDocTypeAssertion"] = -2147483648] = "ExcludeJSDocTypeAssertion"; return OuterExpressionKinds2; })(OuterExpressionKinds || {}); @@ -8871,23 +8881,105 @@ function resolvePath(path, ...paths) { function getNormalizedPathComponents(path, currentDirectory) { return reducePathComponents(getPathComponents(path, currentDirectory)); } -function getNormalizedAbsolutePath(fileName, currentDirectory) { - return getPathFromPathComponents(getNormalizedPathComponents(fileName, currentDirectory)); +function getNormalizedAbsolutePath(path, currentDirectory) { + let rootLength = getRootLength(path); + if (rootLength === 0 && currentDirectory) { + path = combinePaths(currentDirectory, path); + rootLength = getRootLength(path); + } else { + path = normalizeSlashes(path); + } + const simpleNormalized = simpleNormalizePath(path); + if (simpleNormalized !== void 0) { + return simpleNormalized.length > rootLength ? removeTrailingDirectorySeparator(simpleNormalized) : simpleNormalized; + } + const length2 = path.length; + const root = path.substring(0, rootLength); + let normalized; + let index = rootLength; + let segmentStart = index; + let normalizedUpTo = index; + let seenNonDotDotSegment = rootLength !== 0; + while (index < length2) { + segmentStart = index; + let ch = path.charCodeAt(index); + while (ch === 47 /* slash */ && index + 1 < length2) { + index++; + ch = path.charCodeAt(index); + } + if (index > segmentStart) { + normalized ?? (normalized = path.substring(0, segmentStart - 1)); + segmentStart = index; + } + let segmentEnd = path.indexOf(directorySeparator, index + 1); + if (segmentEnd === -1) { + segmentEnd = length2; + } + const segmentLength = segmentEnd - segmentStart; + if (segmentLength === 1 && path.charCodeAt(index) === 46 /* dot */) { + normalized ?? (normalized = path.substring(0, normalizedUpTo)); + } else if (segmentLength === 2 && path.charCodeAt(index) === 46 /* dot */ && path.charCodeAt(index + 1) === 46 /* dot */) { + if (!seenNonDotDotSegment) { + if (normalized !== void 0) { + normalized += normalized.length === rootLength ? ".." : "/.."; + } else { + normalizedUpTo = index + 2; + } + } else if (normalized === void 0) { + if (normalizedUpTo - 2 >= 0) { + normalized = path.substring(0, Math.max(rootLength, path.lastIndexOf(directorySeparator, normalizedUpTo - 2))); + } else { + normalized = path.substring(0, normalizedUpTo); + } + } else { + const lastSlash = normalized.lastIndexOf(directorySeparator); + if (lastSlash !== -1) { + normalized = normalized.substring(0, Math.max(rootLength, lastSlash)); + } else { + normalized = root; + } + if (normalized.length === rootLength) { + seenNonDotDotSegment = rootLength !== 0; + } + } + } else if (normalized !== void 0) { + if (normalized.length !== rootLength) { + normalized += directorySeparator; + } + seenNonDotDotSegment = true; + normalized += path.substring(segmentStart, segmentEnd); + } else { + seenNonDotDotSegment = true; + normalizedUpTo = segmentEnd; + } + index = segmentEnd + 1; + } + return normalized ?? (length2 > rootLength ? removeTrailingDirectorySeparator(path) : path); } function normalizePath(path) { path = normalizeSlashes(path); + let normalized = simpleNormalizePath(path); + if (normalized !== void 0) { + return normalized; + } + normalized = getNormalizedAbsolutePath(path, ""); + return normalized && hasTrailingDirectorySeparator(path) ? ensureTrailingDirectorySeparator(normalized) : normalized; +} +function simpleNormalizePath(path) { if (!relativePathSegmentRegExp.test(path)) { return path; } - const simplified = path.replace(/\/\.\//g, "/").replace(/^\.\//, ""); + let simplified = path.replace(/\/\.\//g, "/"); + if (simplified.startsWith("./")) { + simplified = simplified.slice(2); + } if (simplified !== path) { path = simplified; if (!relativePathSegmentRegExp.test(path)) { return path; } } - const normalized = getPathFromPathComponents(reducePathComponents(getPathComponents(path))); - return normalized && hasTrailingDirectorySeparator(path) ? ensureTrailingDirectorySeparator(normalized) : normalized; + return void 0; } function getPathWithoutRoot(pathComponents2) { if (pathComponents2.length === 0) return ""; @@ -9315,6 +9407,7 @@ var Diagnostics = { _0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enabled_Consider_using_import_type_where_0_is_imported: diag(1291, 1 /* Error */, "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1291", "'{0}' resolves to a type and must be marked type-only in this file before re-exporting when '{1}' is enabled. Consider using 'import type' where '{0}' is imported."), _0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enabled_Consider_using_export_type_0_as_default: diag(1292, 1 /* Error */, "_0_resolves_to_a_type_and_must_be_marked_type_only_in_this_file_before_re_exporting_when_1_is_enable_1292", "'{0}' resolves to a type and must be marked type-only in this file before re-exporting when '{1}' is enabled. Consider using 'export type { {0} as default }'."), ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve: diag(1293, 1 /* Error */, "ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_module_is_set_to_preserve_1293", "ESM syntax is not allowed in a CommonJS module when 'module' is set to 'preserve'."), + This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled: diag(1294, 1 /* Error */, "This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled_1294", "This syntax is not allowed when 'erasableSyntaxOnly' is enabled."), with_statements_are_not_allowed_in_an_async_function_block: diag(1300, 1 /* Error */, "with_statements_are_not_allowed_in_an_async_function_block_1300", "'with' statements are not allowed in an async function block."), await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules: diag(1308, 1 /* Error */, "await_expressions_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_1308", "'await' expressions are only allowed within async functions and at the top levels of modules."), The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level: diag(1309, 1 /* Error */, "The_current_file_is_a_CommonJS_module_and_cannot_use_await_at_the_top_level_1309", "The current file is a CommonJS module and cannot use 'await' at the top level."), @@ -9329,8 +9422,8 @@ var Diagnostics = { Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member: diag(1320, 1 /* Error */, "Type_of_await_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member_1320", "Type of 'await' operand must either be a valid promise or must not contain a callable 'then' member."), Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member: diag(1321, 1 /* Error */, "Type_of_yield_operand_in_an_async_generator_must_either_be_a_valid_promise_or_must_not_contain_a_cal_1321", "Type of 'yield' operand in an async generator must either be a valid promise or must not contain a callable 'then' member."), Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member: diag(1322, 1 /* Error */, "Type_of_iterated_elements_of_a_yield_Asterisk_operand_must_either_be_a_valid_promise_or_must_not_con_1322", "Type of iterated elements of a 'yield*' operand must either be a valid promise or must not contain a callable 'then' member."), - Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd_system_umd_node16_or_nodenext: diag(1323, 1 /* Error */, "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323", "Dynamic imports are only supported when the '--module' flag is set to 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16', or 'nodenext'."), - Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodenext_or_preserve: diag(1324, 1 /* Error */, "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodene_1324", "Dynamic imports only support a second argument when the '--module' option is set to 'esnext', 'node16', 'nodenext', or 'preserve'."), + Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd_system_umd_node16_node18_or_nodenext: diag(1323, 1 /* Error */, "Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd__1323", "Dynamic imports are only supported when the '--module' flag is set to 'es2020', 'es2022', 'esnext', 'commonjs', 'amd', 'system', 'umd', 'node16', 'node18', or 'nodenext'."), + Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_nodenext_or_preserve: diag(1324, 1 /* Error */, "Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_1324", "Dynamic imports only support a second argument when the '--module' option is set to 'esnext', 'node16', 'node18', 'nodenext', or 'preserve'."), Argument_of_dynamic_import_cannot_be_spread_element: diag(1325, 1 /* Error */, "Argument_of_dynamic_import_cannot_be_spread_element_1325", "Argument of dynamic import cannot be spread element."), This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot_have_type_arguments: diag(1326, 1 /* Error */, "This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot__1326", "This use of 'import' is invalid. 'import()' calls can be written, but they must have parentheses and cannot have type arguments."), String_literal_with_double_quotes_expected: diag(1327, 1 /* Error */, "String_literal_with_double_quotes_expected_1327", "String literal with double quotes expected."), @@ -9347,7 +9440,7 @@ var Diagnostics = { Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here: diag(1339, 1 /* Error */, "Module_0_does_not_refer_to_a_value_but_is_used_as_a_value_here_1339", "Module '{0}' does not refer to a value, but is used as a value here."), Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0: diag(1340, 1 /* Error */, "Module_0_does_not_refer_to_a_type_but_is_used_as_a_type_here_Did_you_mean_typeof_import_0_1340", "Module '{0}' does not refer to a type, but is used as a type here. Did you mean 'typeof import('{0}')'?"), Class_constructor_may_not_be_an_accessor: diag(1341, 1 /* Error */, "Class_constructor_may_not_be_an_accessor_1341", "Class constructor may not be an accessor."), - The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system_node16_or_nodenext: diag(1343, 1 /* Error */, "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343", "The 'import.meta' meta-property is only allowed when the '--module' option is 'es2020', 'es2022', 'esnext', 'system', 'node16', or 'nodenext'."), + The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system_node16_node18_or_nodenext: diag(1343, 1 /* Error */, "The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system__1343", "The 'import.meta' meta-property is only allowed when the '--module' option is 'es2020', 'es2022', 'esnext', 'system', 'node16', 'node18', or 'nodenext'."), A_label_is_not_allowed_here: diag(1344, 1 /* Error */, "A_label_is_not_allowed_here_1344", "'A label is not allowed here."), An_expression_of_type_void_cannot_be_tested_for_truthiness: diag(1345, 1 /* Error */, "An_expression_of_type_void_cannot_be_tested_for_truthiness_1345", "An expression of type 'void' cannot be tested for truthiness."), This_parameter_is_not_allowed_with_use_strict_directive: diag(1346, 1 /* Error */, "This_parameter_is_not_allowed_with_use_strict_directive_1346", "This parameter is not allowed with 'use strict' directive."), @@ -9377,7 +9470,7 @@ var Diagnostics = { await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module: diag(1375, 1 /* Error */, "await_expressions_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_fi_1375", "'await' expressions are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module."), _0_was_imported_here: diag(1376, 3 /* Message */, "_0_was_imported_here_1376", "'{0}' was imported here."), _0_was_exported_here: diag(1377, 3 /* Message */, "_0_was_exported_here_1377", "'{0}' was exported here."), - Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher: diag(1378, 1 /* Error */, "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378", "Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher."), + Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher: diag(1378, 1 /* Error */, "Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_n_1378", "Top-level 'await' expressions are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'node18', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher."), An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type: diag(1379, 1 /* Error */, "An_import_alias_cannot_reference_a_declaration_that_was_exported_using_export_type_1379", "An import alias cannot reference a declaration that was exported using 'export type'."), An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type: diag(1380, 1 /* Error */, "An_import_alias_cannot_reference_a_declaration_that_was_imported_using_import_type_1380", "An import alias cannot reference a declaration that was imported using 'import type'."), Unexpected_token_Did_you_mean_or_rbrace: diag(1381, 1 /* Error */, "Unexpected_token_Did_you_mean_or_rbrace_1381", "Unexpected token. Did you mean `{'}'}` or `}`?"), @@ -9428,7 +9521,7 @@ var Diagnostics = { File_redirects_to_file_0: diag(1429, 3 /* Message */, "File_redirects_to_file_0_1429", "File redirects to file '{0}'"), The_file_is_in_the_program_because_Colon: diag(1430, 3 /* Message */, "The_file_is_in_the_program_because_Colon_1430", "The file is in the program because:"), for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module: diag(1431, 1 /* Error */, "for_await_loops_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_1431", "'for await' loops are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module."), - Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher: diag(1432, 1 /* Error */, "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432", "Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher."), + Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher: diag(1432, 1 /* Error */, "Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_nod_1432", "Top-level 'for await' loops are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'node18', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher."), Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters: diag(1433, 1 /* Error */, "Neither_decorators_nor_modifiers_may_be_applied_to_this_parameters_1433", "Neither decorators nor modifiers may be applied to 'this' parameters."), Unexpected_keyword_or_identifier: diag(1434, 1 /* Error */, "Unexpected_keyword_or_identifier_1434", "Unexpected keyword or identifier."), Unknown_keyword_or_identifier_Did_you_mean_0: diag(1435, 1 /* Error */, "Unknown_keyword_or_identifier_Did_you_mean_0_1435", "Unknown keyword or identifier. Did you mean '{0}'?"), @@ -10070,9 +10163,9 @@ var Diagnostics = { Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializers: diag(2818, 1 /* Error */, "Duplicate_identifier_0_Compiler_reserves_name_1_when_emitting_super_references_in_static_initializer_2818", "Duplicate identifier '{0}'. Compiler reserves name '{1}' when emitting 'super' references in static initializers."), Namespace_name_cannot_be_0: diag(2819, 1 /* Error */, "Namespace_name_cannot_be_0_2819", "Namespace name cannot be '{0}'."), Type_0_is_not_assignable_to_type_1_Did_you_mean_2: diag(2820, 1 /* Error */, "Type_0_is_not_assignable_to_type_1_Did_you_mean_2_2820", "Type '{0}' is not assignable to type '{1}'. Did you mean '{2}'?"), - Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve: diag(2821, 1 /* Error */, "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2821", "Import assertions are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'."), + Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_nodenext_or_preserve: diag(2821, 1 /* Error */, "Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_nodenext_or_pres_2821", "Import assertions are only supported when the '--module' option is set to 'esnext', 'node18', 'nodenext', or 'preserve'."), Import_assertions_cannot_be_used_with_type_only_imports_or_exports: diag(2822, 1 /* Error */, "Import_assertions_cannot_be_used_with_type_only_imports_or_exports_2822", "Import assertions cannot be used with type-only imports or exports."), - Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve: diag(2823, 1 /* Error */, "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve_2823", "Import attributes are only supported when the '--module' option is set to 'esnext', 'nodenext', or 'preserve'."), + Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_nodenext_or_preserve: diag(2823, 1 /* Error */, "Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_nodenext_or_pres_2823", "Import attributes are only supported when the '--module' option is set to 'esnext', 'node18', 'nodenext', or 'preserve'."), Cannot_find_namespace_0_Did_you_mean_1: diag(2833, 1 /* Error */, "Cannot_find_namespace_0_Did_you_mean_1_2833", "Cannot find namespace '{0}'. Did you mean '{1}'?"), Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_node16_or_nodenext_Consider_adding_an_extension_to_the_import_path: diag(2834, 1 /* Error */, "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2834", "Relative import paths need explicit file extensions in ECMAScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Consider adding an extension to the import path."), Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_node16_or_nodenext_Did_you_mean_0: diag(2835, 1 /* Error */, "Relative_import_paths_need_explicit_file_extensions_in_ECMAScript_imports_when_moduleResolution_is_n_2835", "Relative import paths need explicit file extensions in ECMAScript imports when '--moduleResolution' is 'node16' or 'nodenext'. Did you mean '{0}'?"), @@ -10092,7 +10185,7 @@ var Diagnostics = { The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_Symbol_dispose_method_or_be_null_or_undefined: diag(2851, 1 /* Error */, "The_initializer_of_an_await_using_declaration_must_be_either_an_object_with_a_Symbol_asyncDispose_or_2851", "The initializer of an 'await using' declaration must be either an object with a '[Symbol.asyncDispose]()' or '[Symbol.dispose]()' method, or be 'null' or 'undefined'."), await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules: diag(2852, 1 /* Error */, "await_using_statements_are_only_allowed_within_async_functions_and_at_the_top_levels_of_modules_2852", "'await using' statements are only allowed within async functions and at the top levels of modules."), await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_this_file_has_no_imports_or_exports_Consider_adding_an_empty_export_to_make_this_file_a_module: diag(2853, 1 /* Error */, "await_using_statements_are_only_allowed_at_the_top_level_of_a_file_when_that_file_is_a_module_but_th_2853", "'await using' statements are only allowed at the top level of a file when that file is a module, but this file has no imports or exports. Consider adding an empty 'export {}' to make this file a module."), - Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher: diag(2854, 1 /* Error */, "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854", "Top-level 'await using' statements are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher."), + Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher: diag(2854, 1 /* Error */, "Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_sys_2854", "Top-level 'await using' statements are only allowed when the 'module' option is set to 'es2022', 'esnext', 'system', 'node16', 'node18', 'nodenext', or 'preserve', and the 'target' option is set to 'es2017' or higher."), Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super: diag(2855, 1 /* Error */, "Class_field_0_defined_by_the_parent_class_is_not_accessible_in_the_child_class_via_super_2855", "Class field '{0}' defined by the parent class is not accessible in the child class via super."), Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls: diag(2856, 1 /* Error */, "Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls_2856", "Import attributes are not allowed on statements that compile to CommonJS 'require' calls."), Import_attributes_cannot_be_used_with_type_only_imports_or_exports: diag(2857, 1 /* Error */, "Import_attributes_cannot_be_used_with_type_only_imports_or_exports_2857", "Import attributes cannot be used with type-only imports or exports."), @@ -10118,6 +10211,7 @@ var Diagnostics = { This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_during_emit_because_it_is_not_a_relative_path: diag(2877, 1 /* Error */, "This_import_uses_a_0_extension_to_resolve_to_an_input_TypeScript_file_but_will_not_be_rewritten_duri_2877", "This import uses a '{0}' extension to resolve to an input TypeScript file, but will not be rewritten during emit because it is not a relative path."), This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_between_the_projects_output_files_is_not_the_same_as_the_relative_path_between_its_input_files: diag(2878, 1 /* Error */, "This_import_path_is_unsafe_to_rewrite_because_it_resolves_to_another_project_and_the_relative_path_b_2878", "This import path is unsafe to rewrite because it resolves to another project, and the relative path between the projects' output files is not the same as the relative path between its input files."), Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found: diag(2879, 1 /* Error */, "Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found_2879", "Using JSX fragments requires fragment factory '{0}' to be in scope, but it could not be found."), + Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_asserts: diag(2880, 1 /* Error */, "Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_asserts_2880", "Import assertions have been replaced by import attributes. Use 'with' instead of 'asserts'."), Import_declaration_0_is_using_private_name_1: diag(4e3, 1 /* Error */, "Import_declaration_0_is_using_private_name_1_4000", "Import declaration '{0}' is using private name '{1}'."), Type_parameter_0_of_exported_class_has_or_is_using_private_name_1: diag(4002, 1 /* Error */, "Type_parameter_0_of_exported_class_has_or_is_using_private_name_1_4002", "Type parameter '{0}' of exported class has or is using private name '{1}'."), Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1: diag(4004, 1 /* Error */, "Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1_4004", "Type parameter '{0}' of exported interface has or is using private name '{1}'."), @@ -10227,6 +10321,8 @@ var Diagnostics = { Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next: diag(4124, 1 /* Error */, "Compiler_option_0_of_value_1_is_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_w_4124", "Compiler option '{0}' of value '{1}' is unstable. Use nightly TypeScript to silence this error. Try updating with 'npm install -D typescript@next'."), Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given: diag(4125, 1 /* Error */, "Each_declaration_of_0_1_differs_in_its_value_where_2_was_expected_but_3_was_given_4125", "Each declaration of '{0}.{1}' differs in its value, where '{2}' was expected but '{3}' was given."), One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value: diag(4126, 1 /* Error */, "One_value_of_0_1_is_the_string_2_and_the_other_is_assumed_to_be_an_unknown_numeric_value_4126", "One value of '{0}.{1}' is the string '{2}', and the other is assumed to be an unknown numeric value."), + This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic: diag(4127, 1 /* Error */, "This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic_4127", "This member cannot have an 'override' modifier because its name is dynamic."), + This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic: diag(4128, 1 /* Error */, "This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic_4128", "This member cannot have a JSDoc comment with an '@override' tag because its name is dynamic."), The_current_host_does_not_support_the_0_option: diag(5001, 1 /* Error */, "The_current_host_does_not_support_the_0_option_5001", "The current host does not support the '{0}' option."), Cannot_find_the_common_subdirectory_path_for_the_input_files: diag(5009, 1 /* Error */, "Cannot_find_the_common_subdirectory_path_for_the_input_files_5009", "Cannot find the common subdirectory path for the input files."), File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0: diag(5010, 1 /* Error */, "File_specification_cannot_end_in_a_recursive_directory_wildcard_Asterisk_Asterisk_Colon_0_5010", "File specification cannot end in a recursive directory wildcard ('**'): '{0}'."), @@ -10799,11 +10895,13 @@ var Diagnostics = { Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types: diag(6718, 3 /* Message */, "Specify_emit_Slashchecking_behavior_for_imports_that_are_only_used_for_types_6718", "Specify emit/checking behavior for imports that are only used for types."), Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files: diag(6719, 3 /* Message */, "Require_sufficient_annotation_on_exports_so_other_tools_can_trivially_generate_declaration_files_6719", "Require sufficient annotation on exports so other tools can trivially generate declaration files."), Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any: diag(6720, 3 /* Message */, "Built_in_iterators_are_instantiated_with_a_TReturn_type_of_undefined_instead_of_any_6720", "Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'."), + Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript: diag(6721, 3 /* Message */, "Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript_6721", "Do not allow runtime constructs that are not part of ECMAScript."), Default_catch_clause_variables_as_unknown_instead_of_any: diag(6803, 3 /* Message */, "Default_catch_clause_variables_as_unknown_instead_of_any_6803", "Default catch clause variables as 'unknown' instead of 'any'."), Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_in_the_output_file_s_format_based_on_the_module_setting: diag(6804, 3 /* Message */, "Do_not_transform_or_elide_any_imports_or_exports_not_marked_as_type_only_ensuring_they_are_written_i_6804", "Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting."), Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported: diag(6805, 3 /* Message */, "Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported_6805", "Disable full type checking (only critical parse and emit errors will be reported)."), Check_side_effect_imports: diag(6806, 3 /* Message */, "Check_side_effect_imports_6806", "Check side effect imports."), This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2: diag(6807, 1 /* Error */, "This_operation_can_be_simplified_This_shift_is_identical_to_0_1_2_6807", "This operation can be simplified. This shift is identical to `{0} {1} {2}`."), + Enable_lib_replacement: diag(6808, 3 /* Message */, "Enable_lib_replacement_6808", "Enable lib replacement."), one_of_Colon: diag(6900, 3 /* Message */, "one_of_Colon_6900", "one of:"), one_or_more_Colon: diag(6901, 3 /* Message */, "one_or_more_Colon_6901", "one or more:"), type_Colon: diag(6902, 3 /* Message */, "type_Colon_6902", "type:"), @@ -14547,6 +14645,7 @@ function sortAndDeduplicateDiagnostics(diagnostics) { } var targetToLibMap = /* @__PURE__ */ new Map([ [99 /* ESNext */, "lib.esnext.full.d.ts"], + [11 /* ES2024 */, "lib.es2024.full.d.ts"], [10 /* ES2023 */, "lib.es2023.full.d.ts"], [9 /* ES2022 */, "lib.es2022.full.d.ts"], [8 /* ES2021 */, "lib.es2021.full.d.ts"], @@ -14562,6 +14661,7 @@ function getDefaultLibFileName(options) { const target = getEmitScriptTarget(options); switch (target) { case 99 /* ESNext */: + case 11 /* ES2024 */: case 10 /* ES2023 */: case 9 /* ES2022 */: case 8 /* ES2021 */: @@ -16769,6 +16869,9 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( "trunc", "fround", "cbrt" + ], + esnext: [ + "f16round" ] })), Map: new Map(Object.entries({ @@ -16938,6 +17041,10 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( "setBigUint64", "getBigInt64", "getBigUint64" + ], + esnext: [ + "setFloat16", + "getFloat16" ] })), BigInt: new Map(Object.entries({ @@ -17041,6 +17148,9 @@ var getScriptTargetFeatures = /* @__PURE__ */ memoize( "with" ] })), + Float16Array: new Map(Object.entries({ + esnext: emptyArray + })), Float32Array: new Map(Object.entries({ es2022: [ "at" @@ -17220,7 +17330,7 @@ function getNonAugmentationDeclaration(symbol) { return (_a = symbol.declarations) == null ? void 0 : _a.find((d) => !isExternalModuleAugmentation(d) && !(isModuleDeclaration(d) && isGlobalScopeAugmentation(d))); } function isCommonJSContainingModuleKind(kind) { - return kind === 1 /* CommonJS */ || kind === 100 /* Node16 */ || kind === 199 /* NodeNext */; + return kind === 1 /* CommonJS */ || 100 /* Node16 */ <= kind && kind <= 199 /* NodeNext */; } function isEffectiveExternalModule(node, compilerOptions) { return isExternalModule(node) || isCommonJSContainingModuleKind(getEmitModuleKind(compilerOptions)) && !!node.commonJsModuleIndicator; @@ -17934,9 +18044,6 @@ function forEachPropertyAssignment(objectLiteral, key, callback, key2) { return key === propName || key2 && key2 === propName ? callback(property) : void 0; }); } -function getPropertyArrayElementValue(objectLiteral, propKey, elementValue) { - return forEachPropertyAssignment(objectLiteral, propKey, (property) => isArrayLiteralExpression(property.initializer) ? find(property.initializer.elements, (element) => isStringLiteral(element) && element.text === elementValue) : void 0); -} function getTsConfigObjectLiteralExpression(tsConfigSourceFile) { if (tsConfigSourceFile && tsConfigSourceFile.statements.length) { const expression = tsConfigSourceFile.statements[0].expression; @@ -21765,7 +21872,7 @@ var _computedOptions = createComputedCompilerOptions({ dependencies: ["module"], computeValue: (compilerOptions) => { const target = compilerOptions.target === 0 /* ES3 */ ? void 0 : compilerOptions.target; - return target ?? (compilerOptions.module === 100 /* Node16 */ && 9 /* ES2022 */ || compilerOptions.module === 199 /* NodeNext */ && 99 /* ESNext */ || 1 /* ES5 */); + return target ?? (compilerOptions.module === 100 /* Node16 */ && 9 /* ES2022 */ || compilerOptions.module === 101 /* Node18 */ && 9 /* ES2022 */ || compilerOptions.module === 199 /* NodeNext */ && 99 /* ESNext */ || 1 /* ES5 */); } }, module: { @@ -21784,6 +21891,7 @@ var _computedOptions = createComputedCompilerOptions({ moduleResolution = 2 /* Node10 */; break; case 100 /* Node16 */: + case 101 /* Node18 */: moduleResolution = 3 /* Node16 */; break; case 199 /* NodeNext */: @@ -21803,7 +21911,11 @@ var _computedOptions = createComputedCompilerOptions({ moduleDetection: { dependencies: ["module", "target"], computeValue: (compilerOptions) => { - return compilerOptions.moduleDetection || (_computedOptions.module.computeValue(compilerOptions) === 100 /* Node16 */ || _computedOptions.module.computeValue(compilerOptions) === 199 /* NodeNext */ ? 3 /* Force */ : 2 /* Auto */); + if (compilerOptions.moduleDetection !== void 0) { + return compilerOptions.moduleDetection; + } + const moduleKind = _computedOptions.module.computeValue(compilerOptions); + return 100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */ ? 3 /* Force */ : 2 /* Auto */; } }, isolatedModules: { @@ -21820,6 +21932,7 @@ var _computedOptions = createComputedCompilerOptions({ } switch (_computedOptions.module.computeValue(compilerOptions)) { case 100 /* Node16 */: + case 101 /* Node18 */: case 199 /* NodeNext */: case 200 /* Preserve */: return true; @@ -22013,6 +22126,9 @@ function unusedLabelIsError(options) { function moduleResolutionSupportsPackageJsonExportsAndImports(moduleResolution) { return moduleResolution >= 3 /* Node16 */ && moduleResolution <= 99 /* NodeNext */ || moduleResolution === 100 /* Bundler */; } +function moduleSupportsImportAttributes(moduleKind) { + return 101 /* Node18 */ <= moduleKind && moduleKind <= 199 /* NodeNext */ || moduleKind === 200 /* Preserve */ || moduleKind === 99 /* ESNext */; +} function getStrictOptionValue(compilerOptions, flag) { return compilerOptions[flag] === void 0 ? !!compilerOptions.strict : !!compilerOptions[flag]; } @@ -22763,7 +22879,7 @@ function isValidBigIntString(s, roundTripOnly) { return success && result === 10 /* BigIntLiteral */ && scanner2.getTokenEnd() === s.length + 1 && !(flags & 512 /* ContainsSeparator */) && (!roundTripOnly || s === pseudoBigIntToString({ negative, base10Value: parsePseudoBigInt(scanner2.getTokenValue()) })); } function isValidTypeOnlyAliasUseSite(useSite) { - return !!(useSite.flags & 33554432 /* Ambient */) || isPartOfTypeQuery(useSite) || isIdentifierInNonEmittingHeritageClause(useSite) || isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(useSite) || !(isExpressionNode(useSite) || isShorthandPropertyNameUseSite(useSite)); + return !!(useSite.flags & 33554432 /* Ambient */) || isInJSDoc(useSite) || isPartOfTypeQuery(useSite) || isIdentifierInNonEmittingHeritageClause(useSite) || isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(useSite) || !(isExpressionNode(useSite) || isShorthandPropertyNameUseSite(useSite)); } function isShorthandPropertyNameUseSite(useSite) { return isIdentifier(useSite) && isShorthandPropertyAssignment(useSite.parent) && useSite.parent.name === useSite; @@ -23935,6 +24051,64 @@ function getNodeAtPosition(sourceFile, position, includeJSDoc) { function isNewScopeNode(node) { return isFunctionLike(node) || isJSDocSignature(node) || isMappedTypeNode(node); } +function getLibNameFromLibReference(libReference) { + return toFileNameLowerCase(libReference.fileName); +} +function getLibFileNameFromLibReference(libReference) { + const libName = getLibNameFromLibReference(libReference); + return libMap.get(libName); +} +function forEachResolvedProjectReference(resolvedProjectReferences, cb) { + return forEachProjectReference( + /*projectReferences*/ + void 0, + resolvedProjectReferences, + (resolvedRef, parent2) => resolvedRef && cb(resolvedRef, parent2) + ); +} +function forEachProjectReference(projectReferences, resolvedProjectReferences, cbResolvedRef, cbRef) { + let seenResolvedRefs; + return worker( + projectReferences, + resolvedProjectReferences, + /*parent*/ + void 0 + ); + function worker(projectReferences2, resolvedProjectReferences2, parent2) { + if (cbRef) { + const result = cbRef(projectReferences2, parent2); + if (result) return result; + } + let skipChildren; + return forEach( + resolvedProjectReferences2, + (resolvedRef, index) => { + if (resolvedRef && (seenResolvedRefs == null ? void 0 : seenResolvedRefs.has(resolvedRef.sourceFile.path))) { + (skipChildren ?? (skipChildren = /* @__PURE__ */ new Set())).add(resolvedRef); + return void 0; + } + const result = cbResolvedRef(resolvedRef, parent2, index); + if (result || !resolvedRef) return result; + (seenResolvedRefs || (seenResolvedRefs = /* @__PURE__ */ new Set())).add(resolvedRef.sourceFile.path); + } + ) || forEach( + resolvedProjectReferences2, + (resolvedRef) => resolvedRef && !(skipChildren == null ? void 0 : skipChildren.has(resolvedRef)) ? worker(resolvedRef.commandLine.projectReferences, resolvedRef.references, resolvedRef) : void 0 + ); + } +} +function getOptionsSyntaxByArrayElementValue(optionsObject, name, value) { + return optionsObject && getPropertyArrayElementValue(optionsObject, name, value); +} +function getPropertyArrayElementValue(objectLiteral, propKey, elementValue) { + return forEachPropertyAssignment(objectLiteral, propKey, (property) => isArrayLiteralExpression(property.initializer) ? find(property.initializer.elements, (element) => isStringLiteral(element) && element.text === elementValue) : void 0); +} +function getOptionsSyntaxByValue(optionsObject, name, value) { + return forEachOptionsSyntaxByName(optionsObject, name, (property) => isStringLiteral(property.initializer) && property.initializer.text === value ? property.initializer : void 0); +} +function forEachOptionsSyntaxByName(optionsObject, name, callback) { + return forEachPropertyAssignment(optionsObject, name, callback); +} // src/compiler/factory/baseNodeFactory.ts function createBaseNodeFactory() { @@ -26552,6 +26726,8 @@ function createNodeFactory(flags, baseFactory2) { node.colonToken = colonToken ?? createToken(59 /* ColonToken */); node.whenFalse = parenthesizerRules().parenthesizeBranchOfConditionalExpression(whenFalse); node.transformFlags |= propagateChildFlags(node.condition) | propagateChildFlags(node.questionToken) | propagateChildFlags(node.whenTrue) | propagateChildFlags(node.colonToken) | propagateChildFlags(node.whenFalse); + node.flowNodeWhenFalse = void 0; + node.flowNodeWhenTrue = void 0; return node; } function updateConditionalExpression(node, condition, questionToken, whenTrue, colonToken, whenFalse) { @@ -28355,7 +28531,7 @@ function createNodeFactory(flags, baseFactory2) { function isIgnorableParen(node) { return isParenthesizedExpression(node) && nodeIsSynthesized(node) && nodeIsSynthesized(getSourceMapRange(node)) && nodeIsSynthesized(getCommentRange(node)) && !some(getSyntheticLeadingComments(node)) && !some(getSyntheticTrailingComments(node)); } - function restoreOuterExpressions(outerExpression, innerExpression, kinds = 31 /* All */) { + function restoreOuterExpressions(outerExpression, innerExpression, kinds = 63 /* All */) { if (outerExpression && isOuterExpression(outerExpression, kinds) && !isIgnorableParen(outerExpression)) { return updateOuterExpression( outerExpression, @@ -28401,7 +28577,7 @@ function createNodeFactory(flags, baseFactory2) { } } function createCallBinding(expression, recordTempVariable, languageVersion, cacheIdentifiers = false) { - const callee = skipOuterExpressions(expression, 31 /* All */); + const callee = skipOuterExpressions(expression, 63 /* All */); let thisArg; let target; if (isSuperProperty(callee)) { @@ -31404,7 +31580,7 @@ function getJSDocTypeAssertionType(node) { Debug.assertIsDefined(type); return type; } -function isOuterExpression(node, kinds = 31 /* All */) { +function isOuterExpression(node, kinds = 63 /* All */) { switch (node.kind) { case 217 /* ParenthesizedExpression */: if (kinds & -2147483648 /* ExcludeJSDocTypeAssertion */ && isJSDocTypeAssertion(node)) { @@ -31413,8 +31589,9 @@ function isOuterExpression(node, kinds = 31 /* All */) { return (kinds & 1 /* Parentheses */) !== 0; case 216 /* TypeAssertionExpression */: case 234 /* AsExpression */: - case 238 /* SatisfiesExpression */: return (kinds & 2 /* TypeAssertions */) !== 0; + case 238 /* SatisfiesExpression */: + return (kinds & (2 /* TypeAssertions */ | 32 /* Satisfies */)) !== 0; case 233 /* ExpressionWithTypeArguments */: return (kinds & 16 /* ExpressionsWithTypeArguments */) !== 0; case 235 /* NonNullExpression */: @@ -31424,13 +31601,13 @@ function isOuterExpression(node, kinds = 31 /* All */) { } return false; } -function skipOuterExpressions(node, kinds = 31 /* All */) { +function skipOuterExpressions(node, kinds = 63 /* All */) { while (isOuterExpression(node, kinds)) { node = node.expression; } return node; } -function walkUpOuterExpressions(node, kinds = 31 /* All */) { +function walkUpOuterExpressions(node, kinds = 63 /* All */) { let parent2 = node.parent; while (isOuterExpression(parent2, kinds)) { parent2 = parent2.parent; @@ -39306,6 +39483,7 @@ var Parser; const node = factory2.createExpressionWithTypeArguments(expression, typeArguments); const res = finishNode(node, pos); if (usedBrace) { + skipWhitespace(); parseExpected(20 /* CloseBraceToken */); } return res; @@ -40351,6 +40529,8 @@ var libEntries = [ ["esnext.regexp", "lib.es2024.regexp.d.ts"], ["esnext.string", "lib.es2024.string.d.ts"], ["esnext.iterator", "lib.esnext.iterator.d.ts"], + ["esnext.promise", "lib.esnext.promise.d.ts"], + ["esnext.float16", "lib.esnext.float16.d.ts"], ["decorators", "lib.decorators.d.ts"], ["decorators.legacy", "lib.decorators.legacy.d.ts"] ]; @@ -40677,6 +40857,7 @@ var moduleOptionDeclaration = { es2022: 7 /* ES2022 */, esnext: 99 /* ESNext */, node16: 100 /* Node16 */, + node18: 101 /* Node18 */, nodenext: 199 /* NodeNext */, preserve: 200 /* Preserve */ })), @@ -40929,6 +41110,23 @@ var commandOptionsWithoutBuild = [ affectsBuildInfo: true, affectsSemanticDiagnostics: true }, + { + name: "erasableSyntaxOnly", + type: "boolean", + category: Diagnostics.Interop_Constraints, + description: Diagnostics.Do_not_allow_runtime_constructs_that_are_not_part_of_ECMAScript, + defaultValueDescription: false, + affectsBuildInfo: true, + affectsSemanticDiagnostics: true + }, + { + name: "libReplacement", + type: "boolean", + affectsProgramStructure: true, + category: Diagnostics.Language_and_Environment, + description: Diagnostics.Enable_lib_replacement, + defaultValueDescription: true + }, // Strict Type Checks { name: "strict", @@ -45099,9 +45297,7 @@ function tryFileLookup(fileName, onlyRecordFailures, state) { } function loadNodeModuleFromDirectory(extensions, candidate, onlyRecordFailures, state, considerPackageJson = true) { const packageInfo = considerPackageJson ? getPackageJsonInfo(candidate, onlyRecordFailures, state) : void 0; - const packageJsonContent = packageInfo && packageInfo.contents.packageJsonContent; - const versionPaths = packageInfo && getVersionPathsOfPackageJsonInfo(packageInfo, state); - return withPackageId(packageInfo, loadNodeModuleFromDirectoryWorker(extensions, candidate, onlyRecordFailures, state, packageJsonContent, versionPaths), state); + return withPackageId(packageInfo, loadNodeModuleFromDirectoryWorker(extensions, candidate, onlyRecordFailures, state, packageInfo), state); } function getEntrypointsFromPackageJsonInfo(packageJsonInfo, options, host, cache, resolveJs) { if (!resolveJs && packageJsonInfo.contents.resolvedEntrypoints !== void 0) { @@ -45119,8 +45315,7 @@ function getEntrypointsFromPackageJsonInfo(packageJsonInfo, options, host, cache /*onlyRecordFailures*/ false, loadPackageJsonMainState, - packageJsonInfo.contents.packageJsonContent, - getVersionPathsOfPackageJsonInfo(packageJsonInfo, loadPackageJsonMainState) + packageJsonInfo ); entrypoints = append(entrypoints, mainResolution == null ? void 0 : mainResolution.path); if (features & 8 /* Exports */ && packageJsonInfo.contents.packageJsonContent.exports) { @@ -45323,13 +45518,14 @@ function getPackageJsonInfo(packageDirectory, onlyRecordFailures, state) { (_f = state.failedLookupLocations) == null ? void 0 : _f.push(packageJsonPath); } } -function loadNodeModuleFromDirectoryWorker(extensions, candidate, onlyRecordFailures, state, jsonContent, versionPaths) { +function loadNodeModuleFromDirectoryWorker(extensions, candidate, onlyRecordFailures, state, packageJson) { + const versionPaths = packageJson && getVersionPathsOfPackageJsonInfo(packageJson, state); let packageFile; - if (jsonContent) { + if (packageJson && arePathsEqual(packageJson == null ? void 0 : packageJson.packageDirectory, candidate, state.host)) { if (state.isConfigLookup) { - packageFile = readPackageJsonTSConfigField(jsonContent, candidate, state); + packageFile = readPackageJsonTSConfigField(packageJson.contents.packageJsonContent, packageJson.packageDirectory, state); } else { - packageFile = extensions & 4 /* Declaration */ && readPackageJsonTypesFields(jsonContent, candidate, state) || extensions & (3 /* ImplementationFiles */ | 4 /* Declaration */) && readPackageJsonMainField(jsonContent, candidate, state) || void 0; + packageFile = extensions & 4 /* Declaration */ && readPackageJsonTypesFields(packageJson.contents.packageJsonContent, packageJson.packageDirectory, state) || extensions & (3 /* ImplementationFiles */ | 4 /* Declaration */) && readPackageJsonMainField(packageJson.contents.packageJsonContent, packageJson.packageDirectory, state) || void 0; } } const loader = (extensions2, candidate2, onlyRecordFailures2, state2) => { @@ -45348,7 +45544,7 @@ function loadNodeModuleFromDirectoryWorker(extensions, candidate, onlyRecordFail const features = state2.features; const candidateIsFromPackageJsonField = state2.candidateIsFromPackageJsonField; state2.candidateIsFromPackageJsonField = true; - if ((jsonContent == null ? void 0 : jsonContent.type) !== "module") { + if ((packageJson == null ? void 0 : packageJson.contents.packageJsonContent.type) !== "module") { state2.features &= ~32 /* EsmMode */; } const result = nodeLoadModuleByRelativeName( @@ -45619,6 +45815,7 @@ function hasOneAsterisk(patternKey) { function getLoadModuleFromTargetExportOrImport(extensions, state, cache, redirectedReference, moduleName, scope, isImports) { return loadModuleFromTargetExportOrImport; function loadModuleFromTargetExportOrImport(target, subpath, pattern, key) { + var _a, _b; if (typeof target === "string") { if (!pattern && subpath.length > 0 && !endsWith(target, "/")) { if (state.traceEnabled) { @@ -45647,6 +45844,8 @@ function getLoadModuleFromTargetExportOrImport(extensions, state, cache, redirec redirectedReference, state.conditions ); + (_a = state.failedLookupLocations) == null ? void 0 : _a.push(...result.failedLookupLocations ?? emptyArray); + (_b = state.affectingLocations) == null ? void 0 : _b.push(...result.affectingLocations ?? emptyArray); return toSearchResult( result.resolvedModule ? { path: result.resolvedModule.resolvedFileName, @@ -45756,20 +45955,20 @@ function getLoadModuleFromTargetExportOrImport(extensions, state, cache, redirec void 0 ); function toAbsolutePath(path) { - var _a, _b; + var _a2, _b2; if (path === void 0) return path; - return getNormalizedAbsolutePath(path, (_b = (_a = state.host).getCurrentDirectory) == null ? void 0 : _b.call(_a)); + return getNormalizedAbsolutePath(path, (_b2 = (_a2 = state.host).getCurrentDirectory) == null ? void 0 : _b2.call(_a2)); } function combineDirectoryPath(root, dir) { return ensureTrailingDirectorySeparator(combinePaths(root, dir)); } function tryLoadInputFileForPath(finalPath, entry, packagePath, isImports2) { - var _a, _b, _c, _d; + var _a2, _b2, _c, _d; if (!state.isConfigLookup && (state.compilerOptions.declarationDir || state.compilerOptions.outDir) && !finalPath.includes("/node_modules/") && (state.compilerOptions.configFile ? containsPath(scope.packageDirectory, toAbsolutePath(state.compilerOptions.configFile.fileName), !useCaseSensitiveFileNames(state)) : true)) { const getCanonicalFileName = hostGetCanonicalFileName({ useCaseSensitiveFileNames: () => useCaseSensitiveFileNames(state) }); const commonSourceDirGuesses = []; if (state.compilerOptions.rootDir || state.compilerOptions.composite && state.compilerOptions.configFilePath) { - const commonDir = toAbsolutePath(getCommonSourceDirectory(state.compilerOptions, () => [], ((_b = (_a = state.host).getCurrentDirectory) == null ? void 0 : _b.call(_a)) || "", getCanonicalFileName)); + const commonDir = toAbsolutePath(getCommonSourceDirectory(state.compilerOptions, () => [], ((_b2 = (_a2 = state.host).getCurrentDirectory) == null ? void 0 : _b2.call(_a2)) || "", getCanonicalFileName)); commonSourceDirGuesses.push(commonDir); } else if (state.requestContainingDirectory) { const requestingFile = toAbsolutePath(combinePaths(state.requestContainingDirectory, "index.ts")); @@ -45825,8 +46024,8 @@ function getLoadModuleFromTargetExportOrImport(extensions, state, cache, redirec } return void 0; function getOutputDirectoriesForBaseDirectory(commonSourceDirGuess) { - var _a2, _b2; - const currentDir = state.compilerOptions.configFile ? ((_b2 = (_a2 = state.host).getCurrentDirectory) == null ? void 0 : _b2.call(_a2)) || "" : commonSourceDirGuess; + var _a3, _b3; + const currentDir = state.compilerOptions.configFile ? ((_b3 = (_a3 = state.host).getCurrentDirectory) == null ? void 0 : _b3.call(_a3)) || "" : commonSourceDirGuess; const candidateDirectories = []; if (state.compilerOptions.declarationDir) { candidateDirectories.push(toAbsolutePath(combineDirectoryPath(currentDir, state.compilerOptions.declarationDir))); @@ -45873,7 +46072,7 @@ function loadModuleFromNearestNodeModulesDirectoryTypesScope(moduleName, directo ); } function loadModuleFromNearestNodeModulesDirectoryWorker(extensions, moduleName, directory, state, typesScopeOnly, cache, redirectedReference) { - const mode = state.features === 0 ? void 0 : state.features & 32 /* EsmMode */ ? 99 /* ESNext */ : 1 /* CommonJS */; + const mode = state.features === 0 ? void 0 : state.features & 32 /* EsmMode */ || state.conditions.includes("import") ? 99 /* ESNext */ : 1 /* CommonJS */; const priorityExtensions = extensions & (1 /* TypeScript */ | 4 /* Declaration */); const secondaryExtensions = extensions & ~(1 /* TypeScript */ | 4 /* Declaration */); if (priorityExtensions) { @@ -45951,8 +46150,7 @@ function loadModuleFromSpecificNodeModulesDirectory(extensions, moduleName, node candidate, !nodeModulesDirectoryExists, state, - packageInfo.contents.packageJsonContent, - getVersionPathsOfPackageJsonInfo(packageInfo, state) + packageInfo ); return withPackageId(packageInfo, fromDirectory, state); } @@ -45962,8 +46160,7 @@ function loadModuleFromSpecificNodeModulesDirectory(extensions, moduleName, node candidate2, onlyRecordFailures, state2, - packageInfo && packageInfo.contents.packageJsonContent, - packageInfo && getVersionPathsOfPackageJsonInfo(packageInfo, state2) + packageInfo ); if (!pathAndExtension && packageInfo && (packageInfo.contents.packageJsonContent.exports === void 0 || packageInfo.contents.packageJsonContent.exports === null) && state2.features & 32 /* EsmMode */) { pathAndExtension = loadModuleFromFile(extensions2, combinePaths(candidate2, "index.js"), onlyRecordFailures, state2); @@ -46411,6 +46608,7 @@ function createBinder() { var preSwitchCaseFlow; var activeLabelList; var hasExplicitReturn; + var inReturnPosition; var hasFlowEffects; var emitFlags; var inStrictMode; @@ -46483,6 +46681,7 @@ function createBinder() { currentExceptionTarget = void 0; activeLabelList = void 0; hasExplicitReturn = false; + inReturnPosition = false; hasFlowEffects = false; inAssignmentPattern = false; emitFlags = 0 /* None */; @@ -46719,6 +46918,8 @@ function createBinder() { const saveContainer = container; const saveThisParentContainer = thisParentContainer; const savedBlockScopeContainer = blockScopeContainer; + const savedInReturnPosition = inReturnPosition; + if (node.kind === 219 /* ArrowFunction */ && node.body.kind !== 241 /* Block */) inReturnPosition = true; if (containerFlags & 1 /* IsContainer */) { if (node.kind !== 219 /* ArrowFunction */) { thisParentContainer = container; @@ -46796,6 +46997,7 @@ function createBinder() { } else { bindChildren(node); } + inReturnPosition = savedInReturnPosition; container = saveContainer; thisParentContainer = saveThisParentContainer; blockScopeContainer = savedBlockScopeContainer; @@ -46817,6 +47019,9 @@ function createBinder() { const saveInAssignmentPattern = inAssignmentPattern; inAssignmentPattern = false; if (checkUnreachable(node)) { + if (canHaveFlowNode(node) && node.flowNode) { + node.flowNode = void 0; + } bindEachChild(node); bindJSDoc(node); inAssignmentPattern = saveInAssignmentPattern; @@ -47012,7 +47217,9 @@ function createBinder() { case 36 /* ExclamationEqualsToken */: case 37 /* EqualsEqualsEqualsToken */: case 38 /* ExclamationEqualsEqualsToken */: - return isNarrowableOperand(expr.left) || isNarrowableOperand(expr.right) || isNarrowingTypeofOperands(expr.right, expr.left) || isNarrowingTypeofOperands(expr.left, expr.right) || (isBooleanLiteral(expr.right) && isNarrowingExpression(expr.left) || isBooleanLiteral(expr.left) && isNarrowingExpression(expr.right)); + const left = skipParentheses(expr.left); + const right = skipParentheses(expr.right); + return isNarrowableOperand(left) || isNarrowableOperand(right) || isNarrowingTypeofOperands(right, left) || isNarrowingTypeofOperands(left, right) || (isBooleanLiteral(right) && isNarrowingExpression(left) || isBooleanLiteral(left) && isNarrowingExpression(right)); case 104 /* InstanceOfKeyword */: return isNarrowableOperand(expr.left); case 103 /* InKeyword */: @@ -47204,13 +47411,16 @@ function createBinder() { function bindForStatement(node) { const preLoopLabel = setContinueTarget(node, createLoopLabel()); const preBodyLabel = createBranchLabel(); + const preIncrementorLabel = createBranchLabel(); const postLoopLabel = createBranchLabel(); bind(node.initializer); addAntecedent(preLoopLabel, currentFlow); currentFlow = preLoopLabel; bindCondition(node.condition, preBodyLabel, postLoopLabel); currentFlow = finishFlowLabel(preBodyLabel); - bindIterativeStatement(node.statement, postLoopLabel, preLoopLabel); + bindIterativeStatement(node.statement, postLoopLabel, preIncrementorLabel); + addAntecedent(preIncrementorLabel, currentFlow); + currentFlow = finishFlowLabel(preIncrementorLabel); bind(node.incrementor); addAntecedent(preLoopLabel, currentFlow); currentFlow = finishFlowLabel(postLoopLabel); @@ -47247,7 +47457,10 @@ function createBinder() { currentFlow = finishFlowLabel(postIfLabel); } function bindReturnOrThrow(node) { + const savedInReturnPosition = inReturnPosition; + inReturnPosition = true; bind(node.expression); + inReturnPosition = savedInReturnPosition; if (node.kind === 253 /* ReturnStatement */) { hasExplicitReturn = true; if (currentReturnTarget) { @@ -47608,10 +47821,16 @@ function createBinder() { hasFlowEffects = false; bindCondition(node.condition, trueLabel, falseLabel); currentFlow = finishFlowLabel(trueLabel); + if (inReturnPosition) { + node.flowNodeWhenTrue = currentFlow; + } bind(node.questionToken); bind(node.whenTrue); addAntecedent(postExpressionLabel, currentFlow); currentFlow = finishFlowLabel(falseLabel); + if (inReturnPosition) { + node.flowNodeWhenFalse = currentFlow; + } bind(node.colonToken); bind(node.whenFalse); addAntecedent(postExpressionLabel, currentFlow); @@ -50768,8 +50987,8 @@ function createTypeChecker(host) { writeSignature: (signature, enclosingDeclaration, flags, kind, writer) => { return signatureToString(signature, getParseTreeNode(enclosingDeclaration), flags, kind, writer); }, - writeType: (type, enclosingDeclaration, flags, writer) => { - return typeToString(type, getParseTreeNode(enclosingDeclaration), flags, writer); + writeType: (type, enclosingDeclaration, flags, writer, verbosityLevel, out) => { + return typeToString(type, getParseTreeNode(enclosingDeclaration), flags, writer, verbosityLevel, out); }, writeSymbol: (symbol, enclosingDeclaration, meaning, flags, writer) => { return symbolToString(symbol, getParseTreeNode(enclosingDeclaration), meaning, flags, writer); @@ -50885,6 +51104,7 @@ function createTypeChecker(host) { getNumberLiteralType, getBigIntType: () => bigintType, getBigIntLiteralType, + getUnknownType: () => unknownType, createPromiseType, createArrayType, getElementTypeOfArrayType, @@ -51001,8 +51221,13 @@ function createTypeChecker(host) { getMemberOverrideModifierStatus, isTypeParameterPossiblyReferenced, typeHasCallOrConstructSignatures, - getSymbolFlags + getSymbolFlags, + getTypeArgumentsForResolvedSignature }; + function getTypeArgumentsForResolvedSignature(signature) { + if (signature.mapper === void 0) return void 0; + return instantiateTypes((signature.target || signature).typeParameters, signature.mapper); + } function getCandidateSignaturesForStringLiteralCompletions(call, editingArgument) { const candidatesSet = /* @__PURE__ */ new Set(); const candidates = []; @@ -51379,6 +51604,12 @@ function createTypeChecker(host) { /*isReadonly*/ true ); + var anyBaseTypeIndexInfo = createIndexInfo( + stringType, + anyType, + /*isReadonly*/ + false + ); var iterationTypesCache = /* @__PURE__ */ new Map(); var noIterationTypes = { get yieldType() { @@ -51555,6 +51786,7 @@ function createTypeChecker(host) { [".jsx", ".jsx"], [".json", ".json"] ]; + var narrowableReturnTypeCache = /* @__PURE__ */ new Map(); initializeTypeChecker(); return checker; function isDefinitelyReferenceToGlobalSymbolObject(node) { @@ -52418,9 +52650,9 @@ function createTypeChecker(host) { const containerKind = grandparent.parent.kind; if (containerKind === 264 /* InterfaceDeclaration */ && heritageKind === 96 /* ExtendsKeyword */) { error2(errorLocation, Diagnostics.An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types, unescapeLeadingUnderscores(name)); - } else if (containerKind === 263 /* ClassDeclaration */ && heritageKind === 96 /* ExtendsKeyword */) { + } else if (isClassLike(grandparent.parent) && heritageKind === 96 /* ExtendsKeyword */) { error2(errorLocation, Diagnostics.A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values, unescapeLeadingUnderscores(name)); - } else if (containerKind === 263 /* ClassDeclaration */ && heritageKind === 119 /* ImplementsKeyword */) { + } else if (isClassLike(grandparent.parent) && heritageKind === 119 /* ImplementsKeyword */) { error2(errorLocation, Diagnostics.A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types, unescapeLeadingUnderscores(name)); } } else { @@ -53596,7 +53828,7 @@ function createTypeChecker(host) { moduleReference ); } - if (errorNode && (moduleResolutionKind === 3 /* Node16 */ || moduleResolutionKind === 99 /* NodeNext */)) { + if (errorNode && (moduleKind === 100 /* Node16 */ || moduleKind === 101 /* Node18 */)) { const isSyncImport = currentSourceFile.impliedNodeFormat === 1 /* CommonJS */ && !findAncestor(location, isImportCall) || !!findAncestor(location, isImportEqualsDeclaration); const overrideHost = findAncestor(location, (l) => isImportTypeNode(l) || isExportDeclaration(l) || isImportDeclaration(l) || isJSDocImportTag(l)); if (isSyncImport && sourceFile.impliedNodeFormat === 99 /* ESNext */ && !hasResolutionModeOverride(overrideHost)) { @@ -54690,14 +54922,18 @@ function createTypeChecker(host) { return writer2; } } - function typeToString(type, enclosingDeclaration, flags = 1048576 /* AllowUniqueESSymbolType */ | 16384 /* UseAliasDefinedOutsideCurrentScope */, writer = createTextWriter("")) { - const noTruncation = compilerOptions.noErrorTruncation || flags & 1 /* NoTruncation */; + function typeToString(type, enclosingDeclaration, flags = 1048576 /* AllowUniqueESSymbolType */ | 16384 /* UseAliasDefinedOutsideCurrentScope */, writer = createTextWriter(""), verbosityLevel, out) { + const noTruncation = compilerOptions.noErrorTruncation || flags & 1 /* NoTruncation */ || verbosityLevel !== void 0; const typeNode = nodeBuilder.typeToTypeNode( type, enclosingDeclaration, - toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | (noTruncation ? 1 /* NoTruncation */ : 0 /* None */), + toNodeBuilderFlags(flags) | 70221824 /* IgnoreErrors */ | (noTruncation ? 1 /* NoTruncation */ : 0), /*internalFlags*/ - void 0 + void 0, + /*tracker*/ + void 0, + verbosityLevel, + out ); if (typeNode === void 0) return Debug.fail("should always get typenode"); const printer = type !== unresolvedType ? createPrinterWithRemoveComments() : createPrinterWithDefaults(); @@ -54837,12 +55073,7 @@ function createTypeChecker(host) { enterNewScope(context, node) { if (isFunctionLike(node) || isJSDocSignature(node)) { const signature = getSignatureFromDeclaration(node); - const expandedParams = getExpandedParameters( - signature, - /*skipUnionExpanding*/ - true - )[0]; - return enterNewScope(context, node, expandedParams, signature.typeParameters); + return enterNewScope(context, node, signature.parameters, signature.typeParameters); } else { const typeParameters = isConditionalTypeNode(node) ? getInferTypeParameters(node) : [getDeclaredTypeOfTypeParameter(getSymbolOfDeclaration(node.typeParameter))]; return enterNewScope( @@ -54922,38 +55153,134 @@ function createTypeChecker(host) { return true; } if (requiresAddingUndefined && annotationType) { - annotationType = getOptionalType(annotationType, !isParameter(node)); + annotationType = addOptionality(annotationType, !isParameter(node)); } return !!annotationType && typeNodeIsEquivalentToType(node, type, annotationType) && existingTypeNodeIsNotReferenceOrIsReferenceWithCompatibleTypeArgumentCount(existing, type); } }; return { syntacticBuilderResolver, - typeToTypeNode: (type, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => typeToTypeNodeHelper(type, context)), - typePredicateToTypePredicateNode: (typePredicate, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => typePredicateToTypePredicateNodeHelper(typePredicate, context)), - serializeTypeForExpression: (expr, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => syntacticNodeBuilder.serializeTypeOfExpression(expr, context)), - serializeTypeForDeclaration: (declaration, symbol, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => syntacticNodeBuilder.serializeTypeOfDeclaration(declaration, symbol, context)), - serializeReturnTypeForSignature: (signature, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => syntacticNodeBuilder.serializeReturnTypeForSignature(signature, getSymbolOfDeclaration(signature), context)), - indexInfoToIndexSignatureDeclaration: (indexInfo, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => indexInfoToIndexSignatureDeclarationHelper( - indexInfo, - context, - /*typeNode*/ - void 0 - )), - signatureToSignatureDeclaration: (signature, kind, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => signatureToSignatureDeclarationHelper(signature, kind, context)), - symbolToEntityName: (symbol, meaning, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => symbolToName( - symbol, - context, - meaning, - /*expectsIdentifier*/ - false - )), - symbolToExpression: (symbol, meaning, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => symbolToExpression(symbol, context, meaning)), - symbolToTypeParameterDeclarations: (symbol, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => typeParametersToTypeParameterDeclarations(symbol, context)), - symbolToParameterDeclaration: (symbol, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => symbolToParameterDeclaration(symbol, context)), - typeParameterToDeclaration: (parameter, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => typeParameterToDeclaration(parameter, context)), - symbolTableToDeclarationStatements: (symbolTable, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => symbolTableToDeclarationStatements(symbolTable, context)), - symbolToNode: (symbol, meaning, enclosingDeclaration, flags, internalFlags, tracker) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, (context) => symbolToNode(symbol, context, meaning)) + typeToTypeNode: (type, enclosingDeclaration, flags, internalFlags, tracker, verbosityLevel, out) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, verbosityLevel, (context) => typeToTypeNodeHelper(type, context), out), + typePredicateToTypePredicateNode: (typePredicate, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*verbosityLevel*/ + void 0, + (context) => typePredicateToTypePredicateNodeHelper(typePredicate, context) + ), + serializeTypeForDeclaration: (declaration, symbol, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*verbosityLevel*/ + void 0, + (context) => syntacticNodeBuilder.serializeTypeOfDeclaration(declaration, symbol, context) + ), + serializeReturnTypeForSignature: (signature, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*verbosityLevel*/ + void 0, + (context) => syntacticNodeBuilder.serializeReturnTypeForSignature(signature, getSymbolOfDeclaration(signature), context) + ), + serializeTypeForExpression: (expr, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*verbosityLevel*/ + void 0, + (context) => syntacticNodeBuilder.serializeTypeOfExpression(expr, context) + ), + indexInfoToIndexSignatureDeclaration: (indexInfo, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*verbosityLevel*/ + void 0, + (context) => indexInfoToIndexSignatureDeclarationHelper( + indexInfo, + context, + /*typeNode*/ + void 0 + ) + ), + signatureToSignatureDeclaration: (signature, kind, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*verbosityLevel*/ + void 0, + (context) => signatureToSignatureDeclarationHelper(signature, kind, context) + ), + symbolToEntityName: (symbol, meaning, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*verbosityLevel*/ + void 0, + (context) => symbolToName( + symbol, + context, + meaning, + /*expectsIdentifier*/ + false + ) + ), + symbolToExpression: (symbol, meaning, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*verbosityLevel*/ + void 0, + (context) => symbolToExpression(symbol, context, meaning) + ), + symbolToTypeParameterDeclarations: (symbol, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*verbosityLevel*/ + void 0, + (context) => typeParametersToTypeParameterDeclarations(symbol, context) + ), + symbolToParameterDeclaration: (symbol, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*verbosityLevel*/ + void 0, + (context) => symbolToParameterDeclaration(symbol, context) + ), + typeParameterToDeclaration: (parameter, enclosingDeclaration, flags, internalFlags, tracker, verbosityLevel) => withContext2(enclosingDeclaration, flags, internalFlags, tracker, verbosityLevel, (context) => typeParameterToDeclaration(parameter, context)), + symbolTableToDeclarationStatements: (symbolTable, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*verbosityLevel*/ + void 0, + (context) => symbolTableToDeclarationStatements(symbolTable, context) + ), + symbolToNode: (symbol, meaning, enclosingDeclaration, flags, internalFlags, tracker) => withContext2( + enclosingDeclaration, + flags, + internalFlags, + tracker, + /*verbosityLevel*/ + void 0, + (context) => symbolToNode(symbol, context, meaning) + ) }; function getTypeFromTypeNode2(context, node, noMappedTypes) { const type = getTypeFromTypeNodeWithoutContext(node); @@ -54995,7 +55322,7 @@ function createTypeChecker(host) { } return symbolToExpression(symbol, context, meaning); } - function withContext2(enclosingDeclaration, flags, internalFlags, tracker, cb) { + function withContext2(enclosingDeclaration, flags, internalFlags, tracker, verbosityLevel, cb, out) { const moduleResolverHost = (tracker == null ? void 0 : tracker.trackSymbol) ? tracker.moduleResolverHost : (internalFlags || 0 /* None */) & 4 /* DoNotIncludeSymbolChain */ ? createBasicNodeBuilderModuleSpecifierResolutionHost(host) : void 0; const context = { enclosingDeclaration, @@ -55003,6 +55330,7 @@ function createTypeChecker(host) { flags: flags || 0 /* None */, internalFlags: internalFlags || 0 /* None */, tracker: void 0, + unfoldDepth: verbosityLevel ?? -1, encounteredError: false, suppressReportInferenceFallback: false, reportedDiagnostic: false, @@ -55024,13 +55352,18 @@ function createTypeChecker(host) { typeParameterNamesByText: void 0, typeParameterNamesByTextNextNameCount: void 0, enclosingSymbolTypes: /* @__PURE__ */ new Map(), - mapper: void 0 + mapper: void 0, + depth: 0, + couldUnfoldMore: false }; context.tracker = new SymbolTrackerImpl(context, tracker, moduleResolverHost); const resultingNode = cb(context); if (context.truncating && context.flags & 1 /* NoTruncation */) { context.tracker.reportTruncationError(); } + if (out) { + out.couldUnfoldMore = context.couldUnfoldMore; + } return context.encounteredError ? void 0 : resultingNode; } function addSymbolTypeToContext(context, symbol, type) { @@ -55049,16 +55382,36 @@ function createTypeChecker(host) { function saveRestoreFlags(context) { const flags = context.flags; const internalFlags = context.internalFlags; + const depth = context.depth; return restore; function restore() { context.flags = flags; context.internalFlags = internalFlags; + context.depth = depth; } } function checkTruncationLength(context) { if (context.truncating) return context.truncating; return context.truncating = context.approximateLength > (context.flags & 1 /* NoTruncation */ ? noTruncationMaximumTruncationLength : defaultMaximumTruncationLength); } + function couldUnfoldType(type, context) { + var _a; + if ((_a = context.visitedTypes) == null ? void 0 : _a.has(type.id)) { + return false; + } + return context.depth < context.unfoldDepth || context.depth === context.unfoldDepth && !context.couldUnfoldMore; + } + function canUnfoldType(type, context) { + var _a; + if ((_a = context.visitedTypes) == null ? void 0 : _a.has(type.id)) { + return false; + } + const result = context.depth < context.unfoldDepth; + if (!result) { + context.couldUnfoldMore = true; + } + return result; + } function typeToTypeNodeHelper(type, context) { const restoreFlags = saveRestoreFlags(context); const typeNode = typeToTypeNodeWorker(type, context); @@ -55206,16 +55559,27 @@ function createTypeChecker(host) { return factory.createThisTypeNode(); } if (!inTypeAlias && type.aliasSymbol && (context.flags & 16384 /* UseAliasDefinedOutsideCurrentScope */ || isTypeSymbolAccessible(type.aliasSymbol, context.enclosingDeclaration))) { - const typeArgumentNodes = mapToTypeNodes(type.aliasTypeArguments, context); - if (isReservedMemberName(type.aliasSymbol.escapedName) && !(type.aliasSymbol.flags & 32 /* Class */)) return factory.createTypeReferenceNode(factory.createIdentifier(""), typeArgumentNodes); - if (length(typeArgumentNodes) === 1 && type.aliasSymbol === globalArrayType.symbol) { - return factory.createArrayTypeNode(typeArgumentNodes[0]); + if (!canUnfoldType(type, context)) { + const typeArgumentNodes = mapToTypeNodes(type.aliasTypeArguments, context); + if (isReservedMemberName(type.aliasSymbol.escapedName) && !(type.aliasSymbol.flags & 32 /* Class */)) return factory.createTypeReferenceNode(factory.createIdentifier(""), typeArgumentNodes); + if (length(typeArgumentNodes) === 1 && type.aliasSymbol === globalArrayType.symbol) { + return factory.createArrayTypeNode(typeArgumentNodes[0]); + } + return symbolToTypeNode(type.aliasSymbol, context, 788968 /* Type */, typeArgumentNodes); } - return symbolToTypeNode(type.aliasSymbol, context, 788968 /* Type */, typeArgumentNodes); + context.depth += 1; } const objectFlags = getObjectFlags(type); if (objectFlags & 4 /* Reference */) { Debug.assert(!!(type.flags & 524288 /* Object */)); + if (canUnfoldType(type, context)) { + context.depth += 1; + return createAnonymousTypeNode( + type, + /*forceClassExpansion*/ + true + ); + } return type.node ? visitAndTransformType(type, typeReferenceToTypeNode) : typeReferenceToTypeNode(type); } if (type.flags & 262144 /* TypeParameter */ || objectFlags & 3 /* ClassOrInterface */) { @@ -55245,6 +55609,14 @@ function createTypeChecker(host) { void 0 ); } + if (objectFlags & 3 /* ClassOrInterface */ && canUnfoldType(type, context)) { + context.depth += 1; + return createAnonymousTypeNode( + type, + /*forceClassExpansion*/ + true + ); + } if (type.symbol) { return symbolToTypeNode(type.symbol, context, 788968 /* Type */); } @@ -55448,7 +55820,7 @@ function createTypeChecker(host) { } return result; } - function createAnonymousTypeNode(type2) { + function createAnonymousTypeNode(type2, forceClassExpansion = false) { var _a2, _b2; const typeId = type2.id; const symbol = type2.symbol; @@ -55471,7 +55843,7 @@ function createTypeChecker(host) { const isInstanceType = isClassInstanceSide(type2) ? 788968 /* Type */ : 111551 /* Value */; if (isJSConstructor(symbol.valueDeclaration)) { return symbolToTypeNode(symbol, context, isInstanceType); - } else if (symbol.flags & 32 /* Class */ && !getBaseTypeVariableOfClass(symbol) && !(symbol.valueDeclaration && isClassLike(symbol.valueDeclaration) && context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */ && (!isClassDeclaration(symbol.valueDeclaration) || isSymbolAccessible( + } else if (symbol.flags & 32 /* Class */ && !forceClassExpansion && !getBaseTypeVariableOfClass(symbol) && !(symbol.valueDeclaration && isClassLike(symbol.valueDeclaration) && context.flags & 2048 /* WriteClassExpressionAsTypeLiteral */ && (!isClassDeclaration(symbol.valueDeclaration) || isSymbolAccessible( symbol, context.enclosingDeclaration, isInstanceType, @@ -55495,7 +55867,7 @@ function createTypeChecker(host) { function shouldWriteTypeOfFunctionSymbol() { var _a3; const isStaticMethodSymbol = !!(symbol.flags & 8192 /* Method */) && // typeof static method - some(symbol.declarations, (declaration) => isStatic(declaration)); + some(symbol.declarations, (declaration) => isStatic(declaration) && !isLateBindableIndexSignature(getNameOfDeclaration(declaration))); const isNonLocalFunctionSymbol = !!(symbol.flags & 16 /* Function */) && (symbol.parent || // is exported function symbol forEach(symbol.declarations, (declaration) => declaration.parent.kind === 307 /* SourceFile */ || declaration.parent.kind === 268 /* ModuleBlock */)); if (isStaticMethodSymbol || isNonLocalFunctionSymbol) { @@ -55515,7 +55887,7 @@ function createTypeChecker(host) { if (id && !context.symbolDepth) { context.symbolDepth = /* @__PURE__ */ new Map(); } - const links = context.enclosingDeclaration && getNodeLinks(context.enclosingDeclaration); + const links = context.unfoldDepth >= 0 ? void 0 : context.enclosingDeclaration && getNodeLinks(context.enclosingDeclaration); const key = `${getTypeId(type2)}|${context.flags}|${context.internalFlags}`; if (links) { links.serializedTypes || (links.serializedTypes = /* @__PURE__ */ new Map()); @@ -55798,6 +56170,38 @@ function createTypeChecker(host) { ids.unshift(state); return ids; } + function indexInfoToObjectComputedNamesOrSignatureDeclaration(indexInfo, context2, typeNode) { + if (indexInfo.components) { + const allComponentComputedNamesSerializable = every(indexInfo.components, (e) => { + var _a2; + return !!(e.name && isComputedPropertyName(e.name) && isEntityNameExpression(e.name.expression) && context2.enclosingDeclaration && ((_a2 = isEntityNameVisible( + e.name.expression, + context2.enclosingDeclaration, + /*shouldComputeAliasToMakeVisible*/ + false + )) == null ? void 0 : _a2.accessibility) === 0 /* Accessible */); + }); + if (allComponentComputedNamesSerializable) { + const newComponents = filter(indexInfo.components, (e) => { + return !hasLateBindableName(e); + }); + return map(newComponents, (e) => { + trackComputedName(e.name.expression, context2.enclosingDeclaration, context2); + return setTextRange2( + context2, + factory.createPropertySignature( + indexInfo.isReadonly ? [factory.createModifier(148 /* ReadonlyKeyword */)] : void 0, + e.name, + (isPropertySignature(e) || isPropertyDeclaration(e) || isMethodSignature(e) || isMethodDeclaration(e) || isGetAccessor(e) || isSetAccessor(e)) && e.questionToken ? factory.createToken(58 /* QuestionToken */) : void 0, + typeNode || typeToTypeNodeHelper(getTypeOfSymbol(e.symbol), context2) + ), + e + ); + }); + } + } + return [indexInfoToIndexSignatureDeclarationHelper(indexInfo, context2, typeNode)]; + } function createTypeNodesFromResolvedType(resolvedType) { if (checkTruncationLength(context)) { if (context.flags & 1 /* NoTruncation */) { @@ -55822,7 +56226,7 @@ function createTypeChecker(host) { typeElements.push(signatureToSignatureDeclarationHelper(signature, 180 /* ConstructSignature */, context)); } for (const info of resolvedType.indexInfos) { - typeElements.push(indexInfoToIndexSignatureDeclarationHelper(info, context, resolvedType.objectFlags & 1024 /* ReverseMapped */ ? createElidedInformationPlaceholder(context) : void 0)); + typeElements.push(...indexInfoToObjectComputedNamesOrSignatureDeclaration(info, context, resolvedType.objectFlags & 1024 /* ReverseMapped */ ? createElidedInformationPlaceholder(context) : void 0)); } const properties = resolvedType.properties; if (!properties) { @@ -56430,7 +56834,7 @@ function createTypeChecker(host) { return factory.createTypeParameterDeclaration(modifiers, name, constraintNode, defaultParameterNode); } function typeToTypeNodeHelperWithPossibleReusableTypeNode(type, typeNode, context) { - return typeNode && getTypeFromTypeNode2(context, typeNode) === type && syntacticNodeBuilder.tryReuseExistingTypeNode(context, typeNode) || typeToTypeNodeHelper(type, context); + return !couldUnfoldType(type, context) && typeNode && getTypeFromTypeNode2(context, typeNode) === type && syntacticNodeBuilder.tryReuseExistingTypeNode(context, typeNode) || typeToTypeNodeHelper(type, context); } function typeParameterToDeclaration(type, context, constraint = getConstraintOfTypeParameter(type)) { const constraintNode = constraint && typeToTypeNodeHelperWithPossibleReusableTypeNode(constraint, getConstraintDeclaration(type), context); @@ -56511,7 +56915,7 @@ function createTypeChecker(host) { if (!context.tracker.canTrackSymbol) return; const firstIdentifier = getFirstIdentifier(accessExpression); const name = resolveName( - firstIdentifier, + enclosingDeclaration, firstIdentifier.escapedText, 111551 /* Value */ | 1048576 /* ExportValue */, /*nameNotFoundMessage*/ @@ -56521,6 +56925,19 @@ function createTypeChecker(host) { ); if (name) { context.tracker.trackSymbol(name, enclosingDeclaration, 111551 /* Value */); + } else { + const fallback = resolveName( + firstIdentifier, + firstIdentifier.escapedText, + 111551 /* Value */ | 1048576 /* ExportValue */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + true + ); + if (fallback) { + context.tracker.trackSymbol(fallback, enclosingDeclaration, 111551 /* Value */); + } } } function lookupSymbolChain(symbol, context, meaning, yieldModuleSymbol) { @@ -57064,7 +57481,7 @@ function createTypeChecker(host) { let result; const addUndefinedForParameter = declaration && (isParameter(declaration) || isJSDocParameterTag(declaration)) && requiresAddingImplicitUndefined(declaration, context.enclosingDeclaration); const decl = declaration ?? symbol.valueDeclaration ?? getDeclarationWithTypeAnnotation(symbol) ?? ((_a = symbol.declarations) == null ? void 0 : _a[0]); - if (decl) { + if (!couldUnfoldType(type, context) && decl) { if (isAccessor(decl)) { result = syntacticNodeBuilder.serializeTypeOfAccessor(decl, symbol, context); } else if (hasInferredType(decl) && !nodeIsSynthesized(decl) && !(getObjectFlags(type) & 196608 /* RequiresWidening */)) { @@ -61180,12 +61597,7 @@ function createTypeChecker(host) { addInheritedMembers(members, getPropertiesOfType(instantiatedBaseType)); callSignatures = concatenate(callSignatures, getSignaturesOfType(instantiatedBaseType, 0 /* Call */)); constructSignatures = concatenate(constructSignatures, getSignaturesOfType(instantiatedBaseType, 1 /* Construct */)); - const inheritedIndexInfos = instantiatedBaseType !== anyType ? getIndexInfosOfType(instantiatedBaseType) : [createIndexInfo( - stringType, - anyType, - /*isReadonly*/ - false - )]; + const inheritedIndexInfos = instantiatedBaseType !== anyType ? getIndexInfosOfType(instantiatedBaseType) : [anyBaseTypeIndexInfo]; indexInfos = concatenate(indexInfos, filter(inheritedIndexInfos, (info) => !findIndexInfo(indexInfos, info.keyType))); } } @@ -61711,12 +62123,7 @@ function createTypeChecker(host) { members = createSymbolTable(getNamedOrIndexSignatureMembers(members)); addInheritedMembers(members, getPropertiesOfType(baseConstructorType)); } else if (baseConstructorType === anyType) { - baseConstructorIndexInfo = createIndexInfo( - stringType, - anyType, - /*isReadonly*/ - false - ); + baseConstructorIndexInfo = anyBaseTypeIndexInfo; } } const indexSymbol = getIndexSymbolFromSymbolTable(members); @@ -63345,8 +63752,8 @@ function createTypeChecker(host) { function getIndexSymbolFromSymbolTable(symbolTable) { return symbolTable.get("__index" /* Index */); } - function createIndexInfo(keyType, type, isReadonly, declaration) { - return { keyType, type, isReadonly, declaration }; + function createIndexInfo(keyType, type, isReadonly, declaration, components) { + return { keyType, type, isReadonly, declaration, components }; } function getIndexInfosOfSymbol(symbol) { const indexSymbol = getIndexSymbol(symbol); @@ -63786,11 +64193,14 @@ function createTypeChecker(host) { function isNoInferType(type) { return !!(type.flags & 33554432 /* Substitution */ && type.constraint.flags & 2 /* Unknown */); } - function getSubstitutionType(baseType, constraint) { - return constraint.flags & 3 /* AnyOrUnknown */ || constraint === baseType || baseType.flags & 1 /* Any */ ? baseType : getOrCreateSubstitutionType(baseType, constraint); + function isNarrowingSubstitutionType(type) { + return !!(type.flags & 33554432 /* Substitution */ && type.objectFlags & 16777216 /* IsNarrowingType */); } - function getOrCreateSubstitutionType(baseType, constraint) { - const id = `${getTypeId(baseType)}>${getTypeId(constraint)}`; + function getSubstitutionType(baseType, constraint, isNarrowed) { + return constraint.flags & 3 /* AnyOrUnknown */ || constraint === baseType || baseType.flags & 1 /* Any */ ? baseType : getOrCreateSubstitutionType(baseType, constraint, isNarrowed); + } + function getOrCreateSubstitutionType(baseType, constraint, isNarrowed) { + const id = `${getTypeId(baseType)}>${getTypeId(constraint)}${isNarrowed ? ">N" : ""}`; const cached = substitutionTypes.get(id); if (cached) { return cached; @@ -63798,6 +64208,9 @@ function createTypeChecker(host) { const result = createType(33554432 /* Substitution */); result.baseType = baseType; result.constraint = constraint; + if (isNarrowed) { + result.objectFlags |= 16777216 /* IsNarrowingType */; + } substitutionTypes.set(id, result); return result; } @@ -63859,6 +64272,9 @@ function createTypeChecker(host) { case "Number": checkNoTypeArguments(node); return numberType; + case "BigInt": + checkNoTypeArguments(node); + return bigintType; case "Boolean": checkNoTypeArguments(node); return booleanType; @@ -66000,7 +66416,7 @@ function createTypeChecker(host) { function isDeferredType(type, checkTuples) { return isGenericType(type) || checkTuples && isTupleType(type) && some(getElementTypes(type), isGenericType); } - function getConditionalType(root, mapper, forConstraint, aliasSymbol, aliasTypeArguments) { + function getConditionalType(root, mapper, forConstraint, aliasSymbol, aliasTypeArguments, forNarrowing) { let result; let extraTypes; let tailCount = 0; @@ -66017,10 +66433,11 @@ function createTypeChecker(host) { if (checkType === wildcardType || extendsType === wildcardType) { return wildcardType; } + const effectiveCheckType = forNarrowing && isNarrowingSubstitutionType(checkType) ? checkType.constraint : checkType; const checkTypeNode = skipTypeParentheses(root.node.checkType); const extendsTypeNode = skipTypeParentheses(root.node.extendsType); const checkTuples = isSimpleTupleType(checkTypeNode) && isSimpleTupleType(extendsTypeNode) && length(checkTypeNode.elements) === length(extendsTypeNode.elements); - const checkTypeDeferred = isDeferredType(checkType, checkTuples); + const checkTypeDeferred = isDeferredType(effectiveCheckType, checkTuples); let combinedMapper; if (root.inferTypeParameters) { const context = createInferenceContext( @@ -66039,8 +66456,8 @@ function createTypeChecker(host) { } const inferredExtendsType = combinedMapper ? instantiateType(root.extendsType, combinedMapper) : extendsType; if (!checkTypeDeferred && !isDeferredType(inferredExtendsType, checkTuples)) { - if (!(inferredExtendsType.flags & 3 /* AnyOrUnknown */) && (checkType.flags & 1 /* Any */ || !isTypeAssignableTo(getPermissiveInstantiation(checkType), getPermissiveInstantiation(inferredExtendsType)))) { - if (checkType.flags & 1 /* Any */ || forConstraint && !(inferredExtendsType.flags & 131072 /* Never */) && someType(getPermissiveInstantiation(inferredExtendsType), (t) => isTypeAssignableTo(t, getPermissiveInstantiation(checkType)))) { + if (!(inferredExtendsType.flags & 3 /* AnyOrUnknown */) && (effectiveCheckType.flags & 1 /* Any */ || !isTypeAssignableTo(getPermissiveInstantiation(effectiveCheckType), getPermissiveInstantiation(inferredExtendsType)))) { + if (effectiveCheckType.flags & 1 /* Any */ || forConstraint && !(inferredExtendsType.flags & 131072 /* Never */) && someType(getPermissiveInstantiation(inferredExtendsType), (t) => isTypeAssignableTo(t, getPermissiveInstantiation(effectiveCheckType)))) { (extraTypes || (extraTypes = [])).push(instantiateType(getTypeFromTypeNode(root.node.trueType), combinedMapper || mapper)); } const falseType2 = getTypeFromTypeNode(root.node.falseType); @@ -66057,7 +66474,7 @@ function createTypeChecker(host) { result = instantiateType(falseType2, mapper); break; } - if (inferredExtendsType.flags & 3 /* AnyOrUnknown */ || isTypeAssignableTo(getRestrictiveInstantiation(checkType), getRestrictiveInstantiation(inferredExtendsType))) { + if (inferredExtendsType.flags & 3 /* AnyOrUnknown */ || isTypeAssignableTo(getRestrictiveInstantiation(effectiveCheckType), getRestrictiveInstantiation(inferredExtendsType))) { const trueType2 = getTypeFromTypeNode(root.node.trueType); const trueMapper = combinedMapper || mapper; if (canTailRecurse(trueType2, trueMapper)) { @@ -66412,7 +66829,7 @@ function createTypeChecker(host) { return result; } function getIndexInfoWithReadonly(info, readonly) { - return info.isReadonly !== readonly ? createIndexInfo(info.keyType, info.type, readonly, info.declaration) : info; + return info.isReadonly !== readonly ? createIndexInfo(info.keyType, info.type, readonly, info.declaration, info.components) : info; } function createLiteralType(flags, value, symbol, regularType) { const type = createTypeWithSymbol(flags, symbol); @@ -67023,8 +67440,39 @@ function createTypeChecker(host) { if (!result) { const newMapper = createTypeMapper(root.outerTypeParameters, typeArguments); const checkType = root.checkType; - const distributionType = root.isDistributive ? getReducedType(getMappedType(checkType, newMapper)) : void 0; - result = distributionType && checkType !== distributionType && distributionType.flags & (1048576 /* Union */ | 131072 /* Never */) ? mapTypeWithAlias(distributionType, (t) => getConditionalType(root, prependTypeMapping(checkType, t, newMapper), forConstraint), aliasSymbol, aliasTypeArguments) : getConditionalType(root, newMapper, forConstraint, aliasSymbol, aliasTypeArguments); + let distributionType = root.isDistributive ? getReducedType(getMappedType(checkType, newMapper)) : void 0; + let narrowingBaseType; + const forNarrowing = distributionType && isNarrowingSubstitutionType(distributionType) && isNarrowableConditionalType(type, mapper); + if (forNarrowing) { + narrowingBaseType = distributionType.baseType; + distributionType = getReducedType(distributionType.constraint); + } + if (distributionType && checkType !== distributionType && distributionType.flags & (1048576 /* Union */ | 131072 /* Never */)) { + if (narrowingBaseType) { + result = mapTypeToIntersection( + distributionType, + (t) => getConditionalType( + root, + prependTypeMapping(checkType, getSubstitutionType( + narrowingBaseType, + t, + /*isNarrowed*/ + true + ), newMapper), + forConstraint, + /*aliasSymbol*/ + void 0, + /*aliasTypeArguments*/ + void 0, + forNarrowing + ) + ); + } else { + result = mapTypeWithAlias(distributionType, (t) => getConditionalType(root, prependTypeMapping(checkType, t, newMapper), forConstraint), aliasSymbol, aliasTypeArguments); + } + } else { + result = getConditionalType(root, newMapper, forConstraint, aliasSymbol, aliasTypeArguments, forNarrowing); + } root.instantiations.set(id, result); } return result; @@ -67171,7 +67619,7 @@ function createTypeChecker(host) { return type.restrictiveInstantiation; } function instantiateIndexInfo(info, mapper) { - return createIndexInfo(info.keyType, instantiateType(info.type, mapper), info.isReadonly, info.declaration); + return createIndexInfo(info.keyType, instantiateType(info.type, mapper), info.isReadonly, info.declaration, info.components); } function isContextSensitive(node) { Debug.assert(node.kind !== 174 /* MethodDeclaration */ || isObjectLiteralMethod(node)); @@ -68167,10 +68615,12 @@ function createTypeChecker(host) { function shouldNormalizeIntersection(type) { let hasInstantiable = false; let hasNullableOrEmpty = false; + let hasSubstitution = false; for (const t of type.types) { hasInstantiable || (hasInstantiable = !!(t.flags & 465829888 /* Instantiable */)); hasNullableOrEmpty || (hasNullableOrEmpty = !!(t.flags & 98304 /* Nullable */) || isEmptyAnonymousObjectType(t)); - if (hasInstantiable && hasNullableOrEmpty) return true; + hasSubstitution || (hasSubstitution = isNarrowingSubstitutionType(t)); + if (hasInstantiable && hasNullableOrEmpty || hasSubstitution) return true; } return false; } @@ -71302,7 +71752,7 @@ function createTypeChecker(host) { } } } - const result = createAnonymousType(type.symbol, members, emptyArray, emptyArray, sameMap(getIndexInfosOfType(type), (info) => createIndexInfo(info.keyType, getWidenedType(info.type), info.isReadonly))); + const result = createAnonymousType(type.symbol, members, emptyArray, emptyArray, sameMap(getIndexInfosOfType(type), (info) => createIndexInfo(info.keyType, getWidenedType(info.type), info.isReadonly, info.declaration, info.components))); result.objectFlags |= getObjectFlags(type) & (4096 /* JSLiteral */ | 262144 /* NonInferrableType */); return result; } @@ -72744,6 +73194,7 @@ function createTypeChecker(host) { return target.kind === 108 /* SuperKeyword */; case 235 /* NonNullExpression */: case 217 /* ParenthesizedExpression */: + case 238 /* SatisfiesExpression */: return isMatchingReference(source.expression, target); case 211 /* PropertyAccessExpression */: case 212 /* ElementAccessExpression */: @@ -73329,6 +73780,18 @@ function createTypeChecker(host) { } return changed ? mappedTypes && getUnionType(mappedTypes, noReductions ? 0 /* None */ : 1 /* Literal */) : type; } + function mapTypeToIntersection(type, mapper) { + if (type.flags & 131072 /* Never */) { + return type; + } + if (!(type.flags & 1048576 /* Union */)) { + return mapper(type); + } + const origin = type.origin; + const types = origin && origin.flags & 1048576 /* Union */ ? origin.types : type.types; + const mappedTypes = types.map((t) => t.flags & 1048576 /* Union */ ? mapTypeToIntersection(t, mapper) : mapper(t)); + return getIntersectionType(mappedTypes); + } function mapTypeWithAlias(type, mapper, aliasSymbol, aliasTypeArguments) { return type.flags & 1048576 /* Union */ && aliasSymbol ? getUnionType(map(type.types, mapper), 1 /* Literal */, aliasSymbol, aliasTypeArguments) : mapType(type, mapper); } @@ -74594,6 +75057,7 @@ function createTypeChecker(host) { if (checkDerived) { return filterType(type, (t) => !isTypeDerivedFrom(t, candidate)); } + type = type.flags & 2 /* Unknown */ ? unknownUnionType : type; const trueType2 = getNarrowedType( type, candidate, @@ -74602,7 +75066,7 @@ function createTypeChecker(host) { /*checkDerived*/ false ); - return filterType(type, (t) => !isTypeSubsetOf(t, trueType2)); + return recombineUnknownType(filterType(type, (t) => !isTypeSubsetOf(t, trueType2))); } if (type.flags & 3 /* AnyOrUnknown */) { return candidate; @@ -74700,6 +75164,7 @@ function createTypeChecker(host) { return narrowTypeByCallExpression(type, expr, assumeTrue); case 217 /* ParenthesizedExpression */: case 235 /* NonNullExpression */: + case 238 /* SatisfiesExpression */: return narrowType(type, expr.expression, assumeTrue); case 226 /* BinaryExpression */: return narrowTypeByBinaryExpression(type, expr, assumeTrue); @@ -74911,11 +75376,11 @@ function createTypeChecker(host) { )); return contextualType && !isGenericType(contextualType); } - function getNarrowableTypeForReference(type, reference, checkMode) { + function getNarrowableTypeForReference(type, reference, checkMode, forReturnTypeNarrowing) { if (isNoInferType(type)) { type = type.baseType; } - const substituteConstraints = !(checkMode && checkMode & 2 /* Inferential */) && someType(type, isGenericTypeWithUnionConstraint) && (isConstraintPosition(type, reference) || hasContextualTypeWithNoGenericTypes(reference, checkMode)); + const substituteConstraints = !(checkMode && checkMode & 2 /* Inferential */) && someType(type, isGenericTypeWithUnionConstraint) && (forReturnTypeNarrowing || isConstraintPosition(type, reference) || hasContextualTypeWithNoGenericTypes(reference, checkMode)); return substituteConstraints ? mapType(type, getBaseConstraintOrType) : type; } function isExportOrExportExpression(location) { @@ -75063,12 +75528,13 @@ function createTypeChecker(host) { const jsxFactoryRefErr = diagnostics && compilerOptions.jsx === 2 /* React */ ? Diagnostics.This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found : void 0; const jsxFactoryNamespace = getJsxNamespace(node); const jsxFactoryLocation = isJsxOpeningLikeElement(node) ? node.tagName : node; + const shouldFactoryRefErr = compilerOptions.jsx !== 1 /* Preserve */ && compilerOptions.jsx !== 3 /* ReactNative */; let jsxFactorySym; if (!(isJsxOpeningFragment(node) && jsxFactoryNamespace === "null")) { jsxFactorySym = resolveName( jsxFactoryLocation, jsxFactoryNamespace, - compilerOptions.jsx === 1 /* Preserve */ ? 111551 /* Value */ & ~384 /* Enum */ : 111551 /* Value */, + shouldFactoryRefErr ? 111551 /* Value */ : 111551 /* Value */ & ~384 /* Enum */, jsxFactoryRefErr, /*isUse*/ true @@ -75082,12 +75548,13 @@ function createTypeChecker(host) { } if (isJsxOpeningFragment(node)) { const file = getSourceFileOfNode(node); - const localJsxNamespace = getLocalJsxNamespace(file); - if (localJsxNamespace) { + const entity = getJsxFactoryEntity(file); + if (entity) { + const localJsxNamespace = getFirstIdentifier(entity).escapedText; resolveName( jsxFactoryLocation, localJsxNamespace, - compilerOptions.jsx === 1 /* Preserve */ ? 111551 /* Value */ & ~384 /* Enum */ : 111551 /* Value */, + shouldFactoryRefErr ? 111551 /* Value */ : 111551 /* Value */ & ~384 /* Enum */, jsxFactoryRefErr, /*isUse*/ true @@ -76040,9 +76507,16 @@ function createTypeChecker(host) { function getContextualTypeForReturnExpression(node, contextFlags) { const func = getContainingFunction(node); if (func) { + const functionFlags = getFunctionFlags(func); + const links = getNodeLinks(node); + if (links.contextualReturnType) { + if (functionFlags & 2 /* Async */) { + return getUnionType([links.contextualReturnType, createPromiseLikeType(links.contextualReturnType)]); + } + return links.contextualReturnType; + } let contextualReturnType = getContextualReturnType(func, contextFlags); if (contextualReturnType) { - const functionFlags = getFunctionFlags(func); if (functionFlags & 1 /* Generator */) { const isAsyncGenerator = (functionFlags & 2 /* Async */) !== 0; if (contextualReturnType.flags & 1048576 /* Union */) { @@ -76740,6 +77214,13 @@ function createTypeChecker(host) { if (index >= 0) { return contextualTypes[index]; } + const links = getNodeLinks(node); + if (links.contextualReturnType) { + if (node.flags & 65536 /* AwaitContext */) { + return getUnionType([links.contextualReturnType, createPromiseLikeType(links.contextualReturnType)]); + } + return links.contextualReturnType; + } const { parent: parent2 } = node; switch (parent2.kind) { case 260 /* VariableDeclaration */: @@ -77321,16 +77802,33 @@ function createTypeChecker(host) { const firstDecl = (_a = symbol.declarations) == null ? void 0 : _a[0]; return isKnownSymbol(symbol) || firstDecl && isNamedDeclaration(firstDecl) && isComputedPropertyName(firstDecl.name) && isTypeAssignableToKind(checkComputedPropertyName(firstDecl.name), 4096 /* ESSymbol */); } + function isSymbolWithComputedName(symbol) { + var _a; + const firstDecl = (_a = symbol.declarations) == null ? void 0 : _a[0]; + return firstDecl && isNamedDeclaration(firstDecl) && isComputedPropertyName(firstDecl.name); + } function getObjectLiteralIndexInfo(isReadonly, offset, properties, keyType) { + var _a; const propTypes = []; + let components; for (let i = offset; i < properties.length; i++) { const prop = properties[i]; if (keyType === stringType && !isSymbolWithSymbolName(prop) || keyType === numberType && isSymbolWithNumericName(prop) || keyType === esSymbolType && isSymbolWithSymbolName(prop)) { propTypes.push(getTypeOfSymbol(properties[i])); + if (isSymbolWithComputedName(properties[i])) { + components = append(components, (_a = properties[i].declarations) == null ? void 0 : _a[0]); + } } } const unionType = propTypes.length ? getUnionType(propTypes, 2 /* Subtype */) : undefinedType; - return createIndexInfo(keyType, unionType, isReadonly); + return createIndexInfo( + keyType, + unionType, + isReadonly, + /*declaration*/ + void 0, + components + ); } function getImmediateAliasedSymbol(symbol) { Debug.assert((symbol.flags & 2097152 /* Alias */) !== 0, "Should only get Alias here."); @@ -77865,6 +78363,9 @@ function createTypeChecker(host) { return getNameFromJsxElementAttributesContainer(JsxNames.ElementAttributesPropertyNameContainer, jsxNamespace); } function getJsxElementChildrenPropertyName(jsxNamespace) { + if (compilerOptions.jsx === 4 /* ReactJSX */ || compilerOptions.jsx === 5 /* ReactJSXDev */) { + return "children"; + } return getNameFromJsxElementAttributesContainer(JsxNames.ElementChildrenAttributeNameContainer, jsxNamespace); } function getUninstantiatedJsxSignaturesOfType(elementType, caller) { @@ -78648,6 +79149,13 @@ function createTypeChecker(host) { return getIntersectionType(x); } function reportNonexistentProperty(propNode, containingType, isUncheckedJS) { + const links = getNodeLinks(propNode); + const cache = links.nonExistentPropCheckCache || (links.nonExistentPropCheckCache = /* @__PURE__ */ new Set()); + const key = `${getTypeId(containingType)}|${isUncheckedJS}`; + if (cache.has(key)) { + return; + } + cache.add(key); let errorInfo; let relatedInfo; if (!isPrivateIdentifier(propNode) && containingType.flags & 1048576 /* Union */ && !(containingType.flags & 402784252 /* Primitive */)) { @@ -79416,8 +79924,8 @@ function createTypeChecker(host) { } } function getEffectiveCheckNode(argument) { - argument = skipParentheses(argument); - return isSatisfiesExpression(argument) ? skipParentheses(argument.expression) : argument; + const flags = isInJSFile(argument) ? 1 /* Parentheses */ | 32 /* Satisfies */ | -2147483648 /* ExcludeJSDocTypeAssertion */ : 1 /* Parentheses */ | 32 /* Satisfies */; + return skipOuterExpressions(argument, flags); } function getSignatureApplicabilityError(node, args, signature, relation, checkMode, reportErrors2, containingMessageChain, inferenceContext) { const errorOutputContainer = { errors: void 0, skipLogging: true }; @@ -79842,11 +80350,16 @@ function createTypeChecker(host) { if (!result) { result = chooseOverload(candidates, assignableRelation, isSingleNonGenericCandidate, signatureHelpTrailingComma); } + const links = getNodeLinks(node); + if (links.resolvedSignature !== resolvingSignature && !candidatesOutArray) { + Debug.assert(links.resolvedSignature); + return links.resolvedSignature; + } if (result) { return result; } result = getCandidateForOverloadFailure(node, candidates, args, !!candidatesOutArray, checkMode); - getNodeLinks(node).resolvedSignature = result; + links.resolvedSignature = result; if (reportErrors2) { if (!headMessage && isInstanceof) { headMessage = Diagnostics.The_left_hand_side_of_an_instanceof_expression_must_be_assignable_to_the_first_argument_of_the_right_hand_side_s_Symbol_hasInstance_method; @@ -80606,12 +81119,14 @@ function createTypeChecker(host) { const sourceFileLinks = getNodeLinks(getSourceFileOfNode(node)); if (sourceFileLinks.jsxFragmentType !== void 0) return sourceFileLinks.jsxFragmentType; const jsxFragmentFactoryName = getJsxNamespace(node); - if (jsxFragmentFactoryName === "null") return sourceFileLinks.jsxFragmentType = anyType; + const shouldResolveFactoryReference = (compilerOptions.jsx === 2 /* React */ || compilerOptions.jsxFragmentFactory !== void 0) && jsxFragmentFactoryName !== "null"; + if (!shouldResolveFactoryReference) return sourceFileLinks.jsxFragmentType = anyType; + const shouldModuleRefErr = compilerOptions.jsx !== 1 /* Preserve */ && compilerOptions.jsx !== 3 /* ReactNative */; const jsxFactoryRefErr = diagnostics ? Diagnostics.Using_JSX_fragments_requires_fragment_factory_0_to_be_in_scope_but_it_could_not_be_found : void 0; const jsxFactorySymbol = getJsxNamespaceContainerForImplicitImport(node) ?? resolveName( node, jsxFragmentFactoryName, - compilerOptions.jsx === 1 /* Preserve */ ? 111551 /* Value */ & ~384 /* Enum */ : 111551 /* Value */, + shouldModuleRefErr ? 111551 /* Value */ : 111551 /* Value */ & ~384 /* Enum */, /*nameNotFoundMessage*/ jsxFactoryRefErr, /*isUse*/ @@ -80730,12 +81245,9 @@ function createTypeChecker(host) { resolutionStart = resolutionTargets.length; } links.resolvedSignature = resolvingSignature; - let result = resolveSignature(node, candidatesOutArray, checkMode || 0 /* Normal */); + const result = resolveSignature(node, candidatesOutArray, checkMode || 0 /* Normal */); resolutionStart = saveResolutionStart; if (result !== resolvingSignature) { - if (links.resolvedSignature !== resolvingSignature) { - result = links.resolvedSignature; - } links.resolvedSignature = flowLoopStart === flowLoopCount ? result : cached; } return result; @@ -81314,12 +81826,12 @@ function createTypeChecker(host) { } } function checkImportMetaProperty(node) { - if (moduleKind === 100 /* Node16 */ || moduleKind === 199 /* NodeNext */) { + if (100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */) { if (getSourceFileOfNode(node).impliedNodeFormat !== 99 /* ESNext */) { error2(node, Diagnostics.The_import_meta_meta_property_is_not_allowed_in_files_which_will_build_into_CommonJS_output); } } else if (moduleKind < 6 /* ES2020 */ && moduleKind !== 4 /* System */) { - error2(node, Diagnostics.The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system_node16_or_nodenext); + error2(node, Diagnostics.The_import_meta_meta_property_is_only_allowed_when_the_module_option_is_es2020_es2022_esnext_system_node16_node18_or_nodenext); } const file = getSourceFileOfNode(node); Debug.assert(!!(file.flags & 8388608 /* PossiblyContainsImportMeta */), "Containing file is missing import meta node flag."); @@ -82148,7 +82660,7 @@ function createTypeChecker(host) { } return !someType(operandConstraint, (t) => getTypeFacts(t, notEqualFacts) === notEqualFacts); } - const type = checkExpressionCached(node.expression); + const type = getBaseConstraintOrType(checkExpressionCached(node.expression)); if (!isLiteralType(type)) { return false; } @@ -82411,19 +82923,7 @@ function createTypeChecker(host) { const exprType = checkExpression(node.body); const returnOrPromisedType = returnType && unwrapReturnType(returnType, functionFlags); if (returnOrPromisedType) { - const effectiveCheckNode = getEffectiveCheckNode(node.body); - if ((functionFlags & 3 /* AsyncGenerator */) === 2 /* Async */) { - const awaitedType = checkAwaitedType( - exprType, - /*withAlias*/ - false, - effectiveCheckNode, - Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member - ); - checkTypeAssignableToAndOptionallyElaborate(awaitedType, returnOrPromisedType, effectiveCheckNode, effectiveCheckNode); - } else { - checkTypeAssignableToAndOptionallyElaborate(exprType, returnOrPromisedType, effectiveCheckNode, effectiveCheckNode); - } + checkReturnExpression(node, returnOrPromisedType, node.body, node.body, exprType); } } } @@ -82477,7 +82977,7 @@ function createTypeChecker(host) { } if (isReadonlySymbol(symbol)) { if (symbol.flags & 4 /* Property */ && isAccessExpression(expr) && expr.expression.kind === 110 /* ThisKeyword */) { - const ctor = getContainingFunction(expr); + const ctor = getControlFlowContainer(expr); if (!(ctor && (ctor.kind === 176 /* Constructor */ || isJSConstructor(ctor)))) { return true; } @@ -82506,7 +83006,7 @@ function createTypeChecker(host) { return false; } function checkReferenceExpression(expr, invalidReferenceMessage, invalidOptionalChainMessage) { - const node = skipOuterExpressions(expr, 6 /* Assertions */ | 1 /* Parentheses */); + const node = skipOuterExpressions(expr, 38 /* Assertions */ | 1 /* Parentheses */); if (node.kind !== 80 /* Identifier */ && !isAccessExpression(node)) { error2(expr, invalidReferenceMessage); return false; @@ -82573,6 +83073,7 @@ function createTypeChecker(host) { } switch (moduleKind) { case 100 /* Node16 */: + case 101 /* Node18 */: case 199 /* NodeNext */: if (sourceFile.impliedNodeFormat === 1 /* CommonJS */) { span ?? (span = getSpanOfTokenAtPosition(sourceFile, node.pos)); @@ -82593,7 +83094,7 @@ function createTypeChecker(host) { // fallthrough default: span ?? (span = getSpanOfTokenAtPosition(sourceFile, node.pos)); - const message = isAwaitExpression(node) ? Diagnostics.Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher : Diagnostics.Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher; + const message = isAwaitExpression(node) ? Diagnostics.Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher : Diagnostics.Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher; diagnostics.add(createFileDiagnostic(sourceFile, span.start, span.length, message)); hasError = true; break; @@ -83157,7 +83658,7 @@ function createTypeChecker(host) { if (isBinaryExpression(right) && (right.operatorToken.kind === 57 /* BarBarToken */ || right.operatorToken.kind === 56 /* AmpersandAmpersandToken */)) { grammarErrorOnNode(right, Diagnostics._0_and_1_operations_cannot_be_mixed_without_parentheses, tokenToString(right.operatorToken.kind), tokenToString(operatorToken.kind)); } - const leftTarget = skipOuterExpressions(left, 31 /* All */); + const leftTarget = skipOuterExpressions(left, 63 /* All */); const nullishSemantics = getSyntacticNullishnessSemantics(leftTarget); if (nullishSemantics !== 3 /* Sometimes */) { if (node.parent.kind === 226 /* BinaryExpression */) { @@ -83177,7 +83678,9 @@ function createTypeChecker(host) { switch (node.kind) { case 223 /* AwaitExpression */: case 213 /* CallExpression */: + case 215 /* TaggedTemplateExpression */: case 212 /* ElementAccessExpression */: + case 236 /* MetaProperty */: case 214 /* NewExpression */: case 211 /* PropertyAccessExpression */: case 229 /* YieldExpression */: @@ -83193,6 +83696,8 @@ function createTypeChecker(host) { case 56 /* AmpersandAmpersandToken */: case 77 /* AmpersandAmpersandEqualsToken */: return 3 /* Sometimes */; + case 28 /* CommaToken */: + return getSyntacticNullishnessSemantics(node.right); } return 2 /* Never */; case 227 /* ConditionalExpression */: @@ -84372,6 +84877,9 @@ function createTypeChecker(host) { checkVariableLikeDeclaration(node); const func = getContainingFunction(node); if (hasSyntacticModifier(node, 31 /* ParameterPropertyModifier */)) { + if (compilerOptions.erasableSyntaxOnly) { + error2(node, Diagnostics.This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled); + } if (!(func.kind === 176 /* Constructor */ && nodeIsPresent(func.body))) { error2(node, Diagnostics.A_parameter_property_is_only_allowed_in_a_constructor_implementation); } @@ -87645,7 +88153,6 @@ function createTypeChecker(host) { } const signature = getSignatureFromDeclaration(container); const returnType = getReturnTypeOfSignature(signature); - const functionFlags = getFunctionFlags(container); if (strictNullChecks || node.expression || returnType.flags & 131072 /* Never */) { const exprType = node.expression ? checkExpressionCached(node.expression) : undefinedType; if (container.kind === 178 /* SetAccessor */) { @@ -87653,26 +88160,249 @@ function createTypeChecker(host) { error2(node, Diagnostics.Setters_cannot_return_a_value); } } else if (container.kind === 176 /* Constructor */) { - if (node.expression && !checkTypeAssignableToAndOptionallyElaborate(exprType, returnType, node, node.expression)) { + const exprType2 = node.expression ? checkExpressionCached(node.expression) : undefinedType; + if (node.expression && !checkTypeAssignableToAndOptionallyElaborate(exprType2, returnType, node, node.expression)) { error2(node, Diagnostics.Return_type_of_constructor_signature_must_be_assignable_to_the_instance_type_of_the_class); } } else if (getReturnTypeFromAnnotation(container)) { - const unwrappedReturnType = unwrapReturnType(returnType, functionFlags) ?? returnType; - const unwrappedExprType = functionFlags & 2 /* Async */ ? checkAwaitedType( - exprType, - /*withAlias*/ - false, - node, - Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member - ) : exprType; - if (unwrappedReturnType) { - checkTypeAssignableToAndOptionallyElaborate(unwrappedExprType, unwrappedReturnType, node, node.expression); - } + const unwrappedReturnType = unwrapReturnType(returnType, getFunctionFlags(container)) ?? returnType; + checkReturnExpression(container, unwrappedReturnType, node, node.expression, exprType); } } else if (container.kind !== 176 /* Constructor */ && compilerOptions.noImplicitReturns && !isUnwrappedReturnTypeUndefinedVoidOrAny(container, returnType)) { error2(node, Diagnostics.Not_all_code_paths_return_a_value); } } + function checkReturnExpression(container, unwrappedReturnType, node, expr, exprType, inConditionalExpression = false) { + const excludeJSDocTypeAssertions = isInJSFile(node); + const functionFlags = getFunctionFlags(container); + if (expr) { + const unwrappedExpr = skipParentheses(expr, excludeJSDocTypeAssertions); + if (isConditionalExpression(unwrappedExpr)) { + checkReturnExpression( + container, + unwrappedReturnType, + node, + unwrappedExpr.whenTrue, + checkExpression(unwrappedExpr.whenTrue), + /*inConditionalExpression*/ + true + ); + checkReturnExpression( + container, + unwrappedReturnType, + node, + unwrappedExpr.whenFalse, + checkExpression(unwrappedExpr.whenFalse), + /*inConditionalExpression*/ + true + ); + return; + } + } + const inReturnStatement = node.kind === 253 /* ReturnStatement */; + const unwrappedExprType = functionFlags & 2 /* Async */ ? checkAwaitedType( + exprType, + /*withAlias*/ + false, + node, + Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member + ) : exprType; + const effectiveExpr = expr && getEffectiveCheckNode(expr); + const errorNode = inReturnStatement && !inConditionalExpression ? node : effectiveExpr; + if (!(unwrappedReturnType.flags & (8388608 /* IndexedAccess */ | 16777216 /* Conditional */)) || !couldContainTypeVariables(unwrappedReturnType)) { + checkTypeAssignableToAndOptionallyElaborate(unwrappedExprType, unwrappedReturnType, errorNode, effectiveExpr); + return; + } + if (checkTypeAssignableTo( + unwrappedExprType, + unwrappedReturnType, + /*errorNode*/ + void 0 + )) { + return; + } + let narrowPosition = node; + let narrowFlowNode = inReturnStatement && node.flowNode; + if (expr && isConditionalExpression(expr.parent)) { + narrowFlowNode = expr.parent.whenTrue === expr ? expr.parent.flowNodeWhenTrue : expr.parent.flowNodeWhenFalse; + narrowPosition = expr; + } + if (!narrowFlowNode) { + checkTypeAssignableToAndOptionallyElaborate(unwrappedExprType, unwrappedReturnType, errorNode, effectiveExpr); + return; + } + const allTypeParameters = appendTypeParameters(getOuterTypeParameters( + container, + /*includeThisTypes*/ + false + ), getEffectiveTypeParameterDeclarations(container)); + const narrowableTypeParameters = allTypeParameters && getNarrowableTypeParameters(allTypeParameters); + if (!narrowableTypeParameters || !narrowableTypeParameters.length || !isNarrowableReturnType(unwrappedReturnType)) { + checkTypeAssignableToAndOptionallyElaborate(unwrappedExprType, unwrappedReturnType, errorNode, effectiveExpr); + return; + } + const narrowedTypeParameters = []; + const narrowedTypes = []; + for (const [typeParam, symbol, reference] of narrowableTypeParameters) { + const narrowReference = factory.cloneNode(reference); + narrowReference.id = void 0; + getNodeLinks(narrowReference).resolvedSymbol = symbol; + setParent(narrowReference, narrowPosition.parent); + narrowReference.flowNode = narrowFlowNode; + const initialType = getNarrowableTypeForReference( + typeParam, + narrowReference, + /*checkMode*/ + void 0, + /*forReturnTypeNarrowing*/ + true + ); + if (initialType === typeParam) { + continue; + } + const flowType = getFlowTypeOfReference(narrowReference, initialType); + const exprType2 = getTypeFromFlowType(flowType); + if (exprType2.flags & 3 /* AnyOrUnknown */ || isErrorType(exprType2) || exprType2 === typeParam || exprType2 === mapType(typeParam, getBaseConstraintOrType)) { + continue; + } + const narrowedType = getSubstitutionType( + typeParam, + exprType2, + /*isNarrowed*/ + true + ); + narrowedTypeParameters.push(typeParam); + narrowedTypes.push(narrowedType); + } + const narrowMapper = createTypeMapper(narrowedTypeParameters, narrowedTypes); + const narrowedReturnType = instantiateType( + unwrappedReturnType, + narrowMapper + ); + if (expr) { + const links = getNodeLinks(expr); + if (!links.contextualReturnType) { + links.contextualReturnType = narrowedReturnType; + } + } + const narrowedExprType = expr ? checkExpression(expr) : undefinedType; + const narrowedUnwrappedExprType = functionFlags & 2 /* Async */ ? checkAwaitedType( + narrowedExprType, + /*withAlias*/ + false, + node, + Diagnostics.The_return_type_of_an_async_function_must_either_be_a_valid_promise_or_must_not_contain_a_callable_then_member + ) : narrowedExprType; + checkTypeAssignableToAndOptionallyElaborate(narrowedUnwrappedExprType, narrowedReturnType, errorNode, effectiveExpr); + } + function getNarrowableTypeParameters(candidates) { + const narrowableParams = []; + for (const typeParam of candidates) { + const constraint = getConstraintOfTypeParameter(typeParam); + if (!constraint || !(constraint.flags & 1048576 /* Union */)) continue; + if (typeParam.symbol && typeParam.symbol.declarations && typeParam.symbol.declarations.length === 1) { + const declaration = typeParam.symbol.declarations[0]; + const container = isJSDocTemplateTag(declaration.parent) ? getJSDocHost(declaration.parent) : declaration.parent; + if (!isFunctionLike(container)) continue; + let reference; + let hasInvalidReference = false; + for (const paramDecl of container.parameters) { + const typeNode = getEffectiveTypeAnnotationNode(paramDecl); + if (!typeNode) continue; + if (isTypeParameterReferenced(typeParam, typeNode)) { + let candidateReference; + if (isTypeReferenceNode(typeNode) && isReferenceToTypeParameter(typeParam, typeNode) && (candidateReference = getValidParameterReference(paramDecl, constraint))) { + if (reference) { + hasInvalidReference = true; + break; + } + reference = candidateReference; + } else { + hasInvalidReference = true; + break; + } + } + } + if (!hasInvalidReference && reference) { + const symbol = getResolvedSymbol(reference); + if (symbol !== unknownSymbol) narrowableParams.push([typeParam, symbol, reference]); + } + } + } + return narrowableParams; + function getValidParameterReference(paramDecl, constraint) { + if (!isIdentifier(paramDecl.name)) return; + const isOptional = !!paramDecl.questionToken || isJSDocOptionalParameter(paramDecl); + if (isOptional && !containsUndefinedType(constraint)) return; + return paramDecl.name; + } + function isReferenceToTypeParameter(typeParam, node) { + return getTypeFromTypeReference(node) === typeParam; + } + function isTypeParameterReferenced(typeParam, node) { + return isReferenced(node); + function isReferenced(node2) { + if (isTypeReferenceNode(node2)) { + return isReferenceToTypeParameter(typeParam, node2); + } + if (isTypeQueryNode(node2)) { + return isTypeParameterPossiblyReferenced(typeParam, node2); + } + return !!forEachChild(node2, isReferenced); + } + } + } + function isNarrowableReturnType(returnType) { + return isConditionalType(returnType) ? isNarrowableConditionalType(returnType) : !!(returnType.indexType.flags & 262144 /* TypeParameter */); + } + function isNarrowableConditionalType(type, mapper) { + const typeArguments = mapper && map(type.root.outerTypeParameters, (t) => { + const mapped = getMappedType(t, mapper); + if (isNarrowingSubstitutionType(mapped)) { + return mapped.baseType; + } + return mapped; + }); + const id = `${type.id}:${getTypeListId(typeArguments)}`; + let result = narrowableReturnTypeCache.get(id); + if (result === void 0) { + const nonNarrowingMapper = type.root.outerTypeParameters && typeArguments && createTypeMapper(type.root.outerTypeParameters, typeArguments); + const instantiatedType = instantiateType(type, nonNarrowingMapper); + result = isConditionalType(instantiatedType) && isNarrowableConditionalTypeWorker(instantiatedType); + narrowableReturnTypeCache.set(id, result); + } + return result; + } + function isNarrowableConditionalTypeWorker(type) { + if (!type.root.isDistributive) { + return false; + } + if (type.root.inferTypeParameters) { + return false; + } + if (!(type.checkType.flags & 262144 /* TypeParameter */)) { + return false; + } + const constraintType = getConstraintOfTypeParameter(type.checkType); + if (!constraintType || !(constraintType.flags & 1048576 /* Union */)) { + return false; + } + if (!everyType(type.extendsType, (extendsType) => some( + constraintType.types, + (constraintType2) => isTypeIdenticalTo(constraintType2, extendsType) + ))) { + return false; + } + const trueType2 = getTrueTypeFromConditionalType(type); + const isValidTrueType = isConditionalType(trueType2) ? isNarrowableConditionalType(trueType2) : true; + if (!isValidTrueType) return false; + const falseType2 = getFalseTypeFromConditionalType(type); + const isValidFalseType = isConditionalType(falseType2) ? isNarrowableConditionalType(falseType2) : falseType2 === neverType; + return isValidFalseType; + } + function isConditionalType(type) { + return !!(type.flags & 16777216 /* Conditional */); + } function checkWithStatement(node) { if (!checkGrammarStatementInAmbientContext(node)) { if (node.flags & 65536 /* AwaitContext */) { @@ -87804,7 +88534,7 @@ function createTypeChecker(host) { const typeDeclaration = symbol.valueDeclaration; if (typeDeclaration && isClassLike(typeDeclaration)) { for (const member of typeDeclaration.members) { - if (!isStatic(member) && !hasBindableName(member)) { + if ((!isStaticIndex && !isStatic(member) || isStaticIndex && isStatic(member)) && !hasBindableName(member)) { const symbol2 = getSymbolOfDeclaration(member); checkIndexConstraintForProperty(type, symbol2, getTypeOfExpression(member.name.expression), getNonMissingTypeOfSymbol(symbol2)); } @@ -88255,6 +88985,13 @@ function createTypeChecker(host) { function checkMemberForOverrideModifier(node, staticType, baseStaticType, baseWithThis, type, typeWithThis, memberHasOverrideModifier, memberHasAbstractModifier, memberIsStatic, memberIsParameterProperty, member, errorNode) { const isJs = isInJSFile(node); const nodeInAmbientContext = !!(node.flags & 33554432 /* Ambient */); + if (memberHasOverrideModifier && (member == null ? void 0 : member.valueDeclaration) && isClassElement(member.valueDeclaration) && member.valueDeclaration.name && isNonBindableDynamicName(member.valueDeclaration.name)) { + error2( + errorNode, + isJs ? Diagnostics.This_member_cannot_have_a_JSDoc_comment_with_an_override_tag_because_its_name_is_dynamic : Diagnostics.This_member_cannot_have_an_override_modifier_because_its_name_is_dynamic + ); + return 2 /* HasInvalidOverride */; + } if (baseWithThis && (memberHasOverrideModifier || compilerOptions.noImplicitOverride)) { const thisType = memberIsStatic ? staticType : typeWithThis; const baseType = memberIsStatic ? baseStaticType : baseWithThis; @@ -88847,6 +89584,9 @@ function createTypeChecker(host) { checkCollisionsForDeclarationName(node, node.name); checkExportsOnMergedDeclarations(node); node.members.forEach(checkEnumMember); + if (compilerOptions.erasableSyntaxOnly && !(node.flags & 33554432 /* Ambient */)) { + error2(node, Diagnostics.This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled); + } computeEnumMemberValues(node); const enumSymbol = getSymbolOfDeclaration(node); const firstDeclaration = getDeclarationOfKind(enumSymbol, node.kind); @@ -88948,6 +89688,9 @@ function createTypeChecker(host) { checkExportsOnMergedDeclarations(node); const symbol = getSymbolOfDeclaration(node); if (symbol.flags & 512 /* ValueModule */ && !inAmbientContext && isInstantiatedModule(node, shouldPreserveConstEnums(compilerOptions))) { + if (compilerOptions.erasableSyntaxOnly) { + error2(node.name, Diagnostics.This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled); + } if (getIsolatedModules(compilerOptions) && !getSourceFileOfNode(node).externalModuleIndicator) { error2(node.name, Diagnostics.Namespaces_are_not_allowed_in_global_script_files_when_0_is_enabled_If_this_file_is_not_intended_to_be_a_global_script_set_moduleDetection_to_force_or_add_an_empty_export_statement, isolatedModulesLikeFlagName); } @@ -89261,10 +90004,20 @@ function createTypeChecker(host) { if (validForTypeAttributes && override) { return; } - const mode = moduleKind === 199 /* NodeNext */ && declaration.moduleSpecifier && getEmitSyntaxForModuleSpecifierExpression(declaration.moduleSpecifier); - if (mode !== 99 /* ESNext */ && moduleKind !== 99 /* ESNext */ && moduleKind !== 200 /* Preserve */) { - const message = isImportAttributes2 ? moduleKind === 199 /* NodeNext */ ? Diagnostics.Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls : Diagnostics.Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve : moduleKind === 199 /* NodeNext */ ? Diagnostics.Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls : Diagnostics.Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_nodenext_or_preserve; - return grammarErrorOnNode(node, message); + if (!moduleSupportsImportAttributes(moduleKind)) { + return grammarErrorOnNode( + node, + isImportAttributes2 ? Diagnostics.Import_attributes_are_only_supported_when_the_module_option_is_set_to_esnext_node18_nodenext_or_preserve : Diagnostics.Import_assertions_are_only_supported_when_the_module_option_is_set_to_esnext_node18_nodenext_or_preserve + ); + } + if (moduleKind === 199 /* NodeNext */ && !isImportAttributes2) { + return grammarErrorOnFirstToken(node, Diagnostics.Import_assertions_have_been_replaced_by_import_attributes_Use_with_instead_of_asserts); + } + if (declaration.moduleSpecifier && getEmitSyntaxForModuleSpecifierExpression(declaration.moduleSpecifier) === 1 /* CommonJS */) { + return grammarErrorOnNode( + node, + isImportAttributes2 ? Diagnostics.Import_attributes_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls : Diagnostics.Import_assertions_are_not_allowed_on_statements_that_compile_to_CommonJS_require_calls + ); } const isTypeOnly = isJSDocImportTag(declaration) || (isImportDeclaration(declaration) ? (_a = declaration.importClause) == null ? void 0 : _a.isTypeOnly : declaration.isTypeOnly); if (isTypeOnly) { @@ -89305,7 +90058,7 @@ function createTypeChecker(host) { } } } - if (isOnlyImportableAsDefault(node.moduleSpecifier, resolvedModule) && !hasTypeJsonImportAttribute(node)) { + if (!importClause.isTypeOnly && 101 /* Node18 */ <= moduleKind && moduleKind <= 199 /* NodeNext */ && isOnlyImportableAsDefault(node.moduleSpecifier, resolvedModule) && !hasTypeJsonImportAttribute(node)) { error2(node.moduleSpecifier, Diagnostics.Importing_a_JSON_file_into_an_ECMAScript_module_requires_a_type_Colon_json_import_attribute_when_module_is_set_to_0, ModuleKind[moduleKind]); } } else if (noUncheckedSideEffectImports && !importClause) { @@ -89325,7 +90078,11 @@ function createTypeChecker(host) { return; } checkGrammarModifiers(node); - if (isInternalModuleImportEqualsDeclaration(node) || checkExternalImportOrExportDeclaration(node)) { + const isImportEquals = isInternalModuleImportEqualsDeclaration(node); + if (compilerOptions.erasableSyntaxOnly && isImportEquals && !(node.flags & 33554432 /* Ambient */)) { + error2(node, Diagnostics.This_syntax_is_not_allowed_when_erasableSyntaxOnly_is_enabled); + } + if (isImportEquals || checkExternalImportOrExportDeclaration(node)) { checkImportBinding(node); markLinkedReferences(node, 6 /* ExportImportEquals */); if (node.moduleReference.kind !== 283 /* ExternalModuleReference */) { @@ -91589,6 +92346,36 @@ function createTypeChecker(host) { result || (result = []); for (const info of infoList) { if (info.declaration) continue; + if (info === anyBaseTypeIndexInfo) continue; + if (info.components) { + const allComponentComputedNamesSerializable = every(info.components, (e) => { + var _a; + return !!(e.name && isComputedPropertyName(e.name) && isEntityNameExpression(e.name.expression) && enclosing && ((_a = isEntityNameVisible( + e.name.expression, + enclosing, + /*shouldComputeAliasToMakeVisible*/ + false + )) == null ? void 0 : _a.accessibility) === 0 /* Accessible */); + }); + if (allComponentComputedNamesSerializable) { + const newComponents = filter(info.components, (e) => { + return !hasLateBindableName(e); + }); + result.push(...map(newComponents, (e) => { + trackComputedName(e.name.expression); + const mods = infoList === staticInfos ? [factory.createModifier(126 /* StaticKeyword */)] : void 0; + return factory.createPropertyDeclaration( + append(mods, info.isReadonly ? factory.createModifier(148 /* ReadonlyKeyword */) : void 0), + e.name, + (isPropertySignature(e) || isPropertyDeclaration(e) || isMethodSignature(e) || isMethodDeclaration(e) || isGetAccessor(e) || isSetAccessor(e)) && e.questionToken ? factory.createToken(58 /* QuestionToken */) : void 0, + nodeBuilder.typeToTypeNode(getTypeOfSymbol(e.symbol), enclosing, flags, internalFlags, tracker), + /*initializer*/ + void 0 + ); + })); + continue; + } + } const node = nodeBuilder.indexInfoToIndexSignatureDeclaration(info, enclosing, flags, internalFlags, tracker); if (node && infoList === staticInfos) { (node.modifiers || (node.modifiers = factory.createNodeArray())).unshift(factory.createModifier(126 /* StaticKeyword */)); @@ -91599,6 +92386,22 @@ function createTypeChecker(host) { } } return result; + function trackComputedName(accessExpression) { + if (!tracker.trackSymbol) return; + const firstIdentifier = getFirstIdentifier(accessExpression); + const name = resolveName( + firstIdentifier, + firstIdentifier.escapedText, + 111551 /* Value */ | 1048576 /* ExportValue */, + /*nameNotFoundMessage*/ + void 0, + /*isUse*/ + true + ); + if (name) { + tracker.trackSymbol(name, enclosing, 111551 /* Value */); + } + } } }; function isImportRequiredByAugmentation(node) { @@ -92680,6 +93483,7 @@ function createTypeChecker(host) { } switch (moduleKind) { case 100 /* Node16 */: + case 101 /* Node18 */: case 199 /* NodeNext */: if (sourceFile.impliedNodeFormat === 1 /* CommonJS */) { diagnostics.add( @@ -92698,7 +93502,7 @@ function createTypeChecker(host) { // fallthrough default: diagnostics.add( - createDiagnosticForNode(forInOrOfStatement.awaitModifier, Diagnostics.Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher) + createDiagnosticForNode(forInOrOfStatement.awaitModifier, Diagnostics.Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher) ); break; } @@ -92842,7 +93646,7 @@ function createTypeChecker(host) { } } function checkGrammarForInvalidDynamicName(node, message) { - if (isNonBindableDynamicName(node)) { + if (isNonBindableDynamicName(node) && !isEntityNameExpression(isElementAccessExpression(node) ? skipParentheses(node.argumentExpression) : node.expression)) { return grammarErrorOnNode(node, message); } } @@ -93301,17 +94105,17 @@ function createTypeChecker(host) { return grammarErrorOnNode(node, Diagnostics.ESM_syntax_is_not_allowed_in_a_CommonJS_module_when_verbatimModuleSyntax_is_enabled); } if (moduleKind === 5 /* ES2015 */) { - return grammarErrorOnNode(node, Diagnostics.Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd_system_umd_node16_or_nodenext); + return grammarErrorOnNode(node, Diagnostics.Dynamic_imports_are_only_supported_when_the_module_flag_is_set_to_es2020_es2022_esnext_commonjs_amd_system_umd_node16_node18_or_nodenext); } if (node.typeArguments) { return grammarErrorOnNode(node, Diagnostics.This_use_of_import_is_invalid_import_calls_can_be_written_but_they_must_have_parentheses_and_cannot_have_type_arguments); } const nodeArguments = node.arguments; - if (moduleKind !== 99 /* ESNext */ && moduleKind !== 199 /* NodeNext */ && moduleKind !== 100 /* Node16 */ && moduleKind !== 200 /* Preserve */) { + if (!(100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */) && moduleKind !== 99 /* ESNext */ && moduleKind !== 200 /* Preserve */) { checkGrammarForDisallowedTrailingComma(nodeArguments); if (nodeArguments.length > 1) { const importAttributesArgument = nodeArguments[1]; - return grammarErrorOnNode(importAttributesArgument, Diagnostics.Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_nodenext_or_preserve); + return grammarErrorOnNode(importAttributesArgument, Diagnostics.Dynamic_imports_only_support_a_second_argument_when_the_module_option_is_set_to_esnext_node16_node18_nodenext_or_preserve); } } if (nodeArguments.length === 0 || nodeArguments.length > 2) { @@ -97828,7 +98632,7 @@ function transformTypeScript(context) { return updated; } function visitParenthesizedExpression(node) { - const innerExpression = skipOuterExpressions(node.expression, ~(6 /* Assertions */ | 16 /* ExpressionsWithTypeArguments */)); + const innerExpression = skipOuterExpressions(node.expression, ~(38 /* Assertions */ | 16 /* ExpressionsWithTypeArguments */)); if (isAssertionExpression(innerExpression) || isSatisfiesExpression(innerExpression)) { const expression = visitNode(node.expression, visitor, isExpression); Debug.assert(expression); @@ -116987,11 +117791,7 @@ function createGetIsolatedDeclarationErrors(resolver) { if (isSetAccessor(node.parent)) { return createAccessorTypeError(node.parent); } - const addUndefined = resolver.requiresAddingImplicitUndefined( - node, - /*enclosingDeclaration*/ - void 0 - ); + const addUndefined = resolver.requiresAddingImplicitUndefined(node, node.parent); if (!addUndefined && node.initializer) { return createExpressionError(node.initializer); } @@ -118675,6 +119475,7 @@ function getModuleTransformer(moduleKind) { case 6 /* ES2020 */: case 5 /* ES2015 */: case 100 /* Node16 */: + case 101 /* Node18 */: case 199 /* NodeNext */: case 1 /* CommonJS */: return transformImpliedNodeFormatDependentModule; @@ -125234,45 +126035,6 @@ function loadWithModeAwareCache(entries, containingFile, redirectedReference, op } return resolutions; } -function forEachResolvedProjectReference(resolvedProjectReferences, cb) { - return forEachProjectReference( - /*projectReferences*/ - void 0, - resolvedProjectReferences, - (resolvedRef, parent2) => resolvedRef && cb(resolvedRef, parent2) - ); -} -function forEachProjectReference(projectReferences, resolvedProjectReferences, cbResolvedRef, cbRef) { - let seenResolvedRefs; - return worker( - projectReferences, - resolvedProjectReferences, - /*parent*/ - void 0 - ); - function worker(projectReferences2, resolvedProjectReferences2, parent2) { - if (cbRef) { - const result = cbRef(projectReferences2, parent2); - if (result) return result; - } - let skipChildren; - return forEach( - resolvedProjectReferences2, - (resolvedRef, index) => { - if (resolvedRef && (seenResolvedRefs == null ? void 0 : seenResolvedRefs.has(resolvedRef.sourceFile.path))) { - (skipChildren ?? (skipChildren = /* @__PURE__ */ new Set())).add(resolvedRef); - return void 0; - } - const result = cbResolvedRef(resolvedRef, parent2, index); - if (result || !resolvedRef) return result; - (seenResolvedRefs || (seenResolvedRefs = /* @__PURE__ */ new Set())).add(resolvedRef.sourceFile.path); - } - ) || forEach( - resolvedProjectReferences2, - (resolvedRef) => resolvedRef && !(skipChildren == null ? void 0 : skipChildren.has(resolvedRef)) ? worker(resolvedRef.commandLine.projectReferences, resolvedRef.references, resolvedRef) : void 0 - ); - } -} var inferredTypesContainingFile = "__inferred type names__.ts"; function getInferredLibraryNameResolveFrom(options, currentDirectory, libFileName) { const containingDirectory = options.configFilePath ? getDirectoryPath(options.configFilePath) : currentDirectory; @@ -125288,13 +126050,6 @@ function getLibraryNameFromLibFileName(libFileName) { } return "@typescript/lib-" + path; } -function getLibNameFromLibReference(libReference) { - return toFileNameLowerCase(libReference.fileName); -} -function getLibFileNameFromLibReference(libReference) { - const libName = getLibNameFromLibReference(libReference); - return libMap.get(libName); -} function isReferencedFile(reason) { switch (reason == null ? void 0 : reason.kind) { case 3 /* Import */: @@ -125512,11 +126267,13 @@ function createCreateProgramOptions(rootNames, options, host, oldProgram, config typeScriptVersion: typeScriptVersion3 }; } -function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _configFileParsingDiagnostics) { +function createProgram(_rootNamesOrOptions, _options, _host, _oldProgram, _configFileParsingDiagnostics) { var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p; - const createProgramOptions = isArray(rootNamesOrOptions) ? createCreateProgramOptions(rootNamesOrOptions, _options, _host, _oldProgram, _configFileParsingDiagnostics) : rootNamesOrOptions; - const { rootNames, options, configFileParsingDiagnostics, projectReferences, typeScriptVersion: typeScriptVersion3 } = createProgramOptions; - let { oldProgram } = createProgramOptions; + let _createProgramOptions = isArray(_rootNamesOrOptions) ? createCreateProgramOptions(_rootNamesOrOptions, _options, _host, _oldProgram, _configFileParsingDiagnostics) : _rootNamesOrOptions; + const { rootNames, options, configFileParsingDiagnostics, projectReferences, typeScriptVersion: typeScriptVersion3, host: createProgramOptionsHost } = _createProgramOptions; + let { oldProgram } = _createProgramOptions; + _createProgramOptions = void 0; + _rootNamesOrOptions = void 0; for (const option of commandLineOptionOfCustomType) { if (hasProperty(options, option.name)) { if (typeof options[option.name] === "string") { @@ -125529,16 +126286,12 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config let processingOtherFiles; let files; let symlinks; - let commonSourceDirectory; let typeChecker; let classifiableNames; - let fileReasons = createMultiMap(); let filesWithReferencesProcessed; - let fileReasonsToChain; - let reasonToRelatedInfo; let cachedBindAndCheckDiagnosticsForFile; let cachedDeclarationDiagnosticsForFile; - let fileProcessingDiagnostics; + const programDiagnostics = createProgramDiagnostics(getCompilerOptionsObjectLiteralSyntax); let automaticTypeDirectiveNames; let automaticTypeDirectiveResolutions; let resolvedLibReferences; @@ -125560,13 +126313,12 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config true ); mark("beforeProgram"); - const host = createProgramOptions.host || createCompilerHost(options); + const host = createProgramOptionsHost || createCompilerHost(options); const configParsingHost = parseConfigHostFromCompilerHostLike(host); let skipDefaultLib = options.noLib; const getDefaultLibraryFileName = memoize(() => host.getDefaultLibFileName(options)); const defaultLibraryPath = host.getDefaultLibLocation ? host.getDefaultLibLocation() : getDirectoryPath(getDefaultLibraryFileName()); - const programDiagnostics = createDiagnosticCollection(); - let lazyProgramDiagnosticExplainingFile = []; + let skipVerifyCompilerOptions = false; const currentDirectory = host.getCurrentDirectory(); const supportedExtensions = getSupportedExtensions(options); const supportedExtensionsWithJsonIfResolveJsonModule = getSupportedExtensionsWithJsonIfResolveJsonModule(options, supportedExtensions); @@ -125844,7 +126596,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config getTypeCount: () => getTypeChecker().getTypeCount(), getInstantiationCount: () => getTypeChecker().getInstantiationCount(), getRelationCacheSizes: () => getTypeChecker().getRelationCacheSizes(), - getFileProcessingDiagnostics: () => fileProcessingDiagnostics, + getFileProcessingDiagnostics: () => programDiagnostics.getFileProcessingDiagnostics(), getAutomaticTypeDirectiveNames: () => automaticTypeDirectiveNames, getAutomaticTypeDirectiveResolutions: () => automaticTypeDirectiveResolutions, isSourceFileFromExternalLibrary, @@ -125860,6 +126612,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config resolvedModules, resolvedTypeReferenceDirectiveNames, resolvedLibReferences, + getProgramDiagnosticsContainer: () => programDiagnostics, getResolvedModule, getResolvedModuleFromModuleSpecifier, getResolvedTypeReferenceDirective, @@ -125892,70 +126645,19 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config realpath: (_o = host.realpath) == null ? void 0 : _o.bind(host), useCaseSensitiveFileNames: () => host.useCaseSensitiveFileNames(), getCanonicalFileName, - getFileIncludeReasons: () => fileReasons, + getFileIncludeReasons: () => programDiagnostics.getFileReasons(), structureIsReused, writeFile: writeFile2, getGlobalTypingsCacheLocation: maybeBind(host, host.getGlobalTypingsCacheLocation) }; onProgramCreateComplete(); - verifyCompilerOptions(); + if (!skipVerifyCompilerOptions) { + verifyCompilerOptions(); + } mark("afterProgram"); measure("Program", "beforeProgram", "afterProgram"); (_p = tracing) == null ? void 0 : _p.pop(); return program; - function updateAndGetProgramDiagnostics() { - if (lazyProgramDiagnosticExplainingFile) { - fileProcessingDiagnostics == null ? void 0 : fileProcessingDiagnostics.forEach((diagnostic) => { - switch (diagnostic.kind) { - case 1 /* FilePreprocessingFileExplainingDiagnostic */: - return programDiagnostics.add( - createDiagnosticExplainingFile( - diagnostic.file && getSourceFileByPath(diagnostic.file), - diagnostic.fileProcessingReason, - diagnostic.diagnostic, - diagnostic.args || emptyArray - ) - ); - case 0 /* FilePreprocessingLibReferenceDiagnostic */: - return programDiagnostics.add(filePreprocessingLibreferenceDiagnostic(diagnostic)); - case 2 /* ResolutionDiagnostics */: - return diagnostic.diagnostics.forEach((d) => programDiagnostics.add(d)); - default: - Debug.assertNever(diagnostic); - } - }); - lazyProgramDiagnosticExplainingFile.forEach( - ({ file, diagnostic, args }) => programDiagnostics.add( - createDiagnosticExplainingFile( - file, - /*fileProcessingReason*/ - void 0, - diagnostic, - args - ) - ) - ); - lazyProgramDiagnosticExplainingFile = void 0; - fileReasonsToChain = void 0; - reasonToRelatedInfo = void 0; - } - return programDiagnostics; - } - function filePreprocessingLibreferenceDiagnostic({ reason }) { - const { file, pos, end } = getReferencedFileLocation(program, reason); - const libReference = file.libReferenceDirectives[reason.index]; - const libName = getLibNameFromLibReference(libReference); - const unqualifiedLibName = removeSuffix(removePrefix(libName, "lib."), ".d.ts"); - const suggestion = getSpellingSuggestion(unqualifiedLibName, libs, identity); - return createFileDiagnostic( - file, - Debug.checkDefined(pos), - Debug.checkDefined(end) - pos, - suggestion ? Diagnostics.Cannot_find_lib_definition_for_0_Did_you_mean_1 : Diagnostics.Cannot_find_lib_definition_for_0, - libName, - suggestion - ); - } function getResolvedModule(file, moduleName, mode) { var _a2; return (_a2 = resolvedModules == null ? void 0 : resolvedModules.get(file.path)) == null ? void 0 : _a2.get(moduleName, mode); @@ -126004,7 +126706,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config function addResolutionDiagnostics(resolution) { var _a2; if (!((_a2 = resolution.resolutionDiagnostics) == null ? void 0 : _a2.length)) return; - (fileProcessingDiagnostics ?? (fileProcessingDiagnostics = [])).push({ + programDiagnostics.addFileProcessingDiagnostic({ kind: 2 /* ResolutionDiagnostics */, diagnostics: resolution.resolutionDiagnostics }); @@ -126098,16 +126800,19 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config return toPath(fileName, currentDirectory, getCanonicalFileName); } function getCommonSourceDirectory2() { - if (commonSourceDirectory === void 0) { - const emittedFiles = filter(files, (file) => sourceFileMayBeEmitted(file, program)); - commonSourceDirectory = getCommonSourceDirectory( - options, - () => mapDefined(emittedFiles, (file) => file.isDeclarationFile ? void 0 : file.fileName), - currentDirectory, - getCanonicalFileName, - (commonSourceDirectory2) => checkSourceFilesBelongToPath(emittedFiles, commonSourceDirectory2) - ); + let commonSourceDirectory = programDiagnostics.getCommonSourceDirectory(); + if (commonSourceDirectory !== void 0) { + return commonSourceDirectory; } + const emittedFiles = filter(files, (file) => sourceFileMayBeEmitted(file, program)); + commonSourceDirectory = getCommonSourceDirectory( + options, + () => mapDefined(emittedFiles, (file) => file.isDeclarationFile ? void 0 : file.fileName), + currentDirectory, + getCanonicalFileName, + (commonSourceDirectory2) => checkSourceFilesBelongToPath(emittedFiles, commonSourceDirectory2) + ); + programDiagnostics.setCommonSourceDirectory(commonSourceDirectory); return commonSourceDirectory; } function getClassifiableNames() { @@ -126418,9 +127123,10 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } filesByName.set(path, filesByName.get(oldFile.path)); }); + const isConfigIdentical = oldOptions.configFile && oldOptions.configFile === options.configFile || !oldOptions.configFile && !options.configFile && !optionsHaveChanges(oldOptions, options, optionDeclarations); + programDiagnostics.reuseStateFromOldProgram(oldProgram.getProgramDiagnosticsContainer(), isConfigIdentical); + skipVerifyCompilerOptions = isConfigIdentical; files = newSourceFiles; - fileReasons = oldProgram.getFileIncludeReasons(); - fileProcessingDiagnostics = oldProgram.getFileProcessingDiagnostics(); automaticTypeDirectiveNames = oldProgram.getAutomaticTypeDirectiveNames(); automaticTypeDirectiveResolutions = oldProgram.getAutomaticTypeDirectiveResolutions(); sourceFileToPackageName = oldProgram.sourceFileToPackageName; @@ -126636,7 +127342,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config if (skipTypeChecking(sourceFile, options, program)) { return emptyArray; } - const programDiagnosticsInFile = updateAndGetProgramDiagnostics().getDiagnostics(sourceFile.fileName); + const programDiagnosticsInFile = programDiagnostics.getCombinedDiagnostics(program).getDiagnostics(sourceFile.fileName); if (!((_a2 = sourceFile.commentDirectives) == null ? void 0 : _a2.length)) { return programDiagnosticsInFile; } @@ -126994,15 +127700,15 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } function getOptionsDiagnostics() { return sortAndDeduplicateDiagnostics(concatenate( - updateAndGetProgramDiagnostics().getGlobalDiagnostics(), + programDiagnostics.getCombinedDiagnostics(program).getGlobalDiagnostics(), getOptionsDiagnosticsOfConfigFile() )); } function getOptionsDiagnosticsOfConfigFile() { if (!options.configFile) return emptyArray; - let diagnostics = updateAndGetProgramDiagnostics().getDiagnostics(options.configFile.fileName); + let diagnostics = programDiagnostics.getCombinedDiagnostics(program).getDiagnostics(options.configFile.fileName); forEachResolvedProjectReference2((resolvedRef) => { - diagnostics = concatenate(diagnostics, updateAndGetProgramDiagnostics().getDiagnostics(resolvedRef.sourceFile.fileName)); + diagnostics = concatenate(diagnostics, programDiagnostics.getCombinedDiagnostics(program).getDiagnostics(resolvedRef.sourceFile.fileName)); }); return diagnostics; } @@ -127209,7 +127915,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config ); } function reportFileNamesDifferOnlyInCasingError(fileName, existingFile, reason) { - const hasExistingReasonToReportErrorOn = !isReferencedFile(reason) && some(fileReasons.get(existingFile.path), isReferencedFile); + const hasExistingReasonToReportErrorOn = !isReferencedFile(reason) && some(programDiagnostics.getFileReasons().get(existingFile.path), isReferencedFile); if (hasExistingReasonToReportErrorOn) { addFilePreprocessingFileExplainingDiagnostic(existingFile, reason, Diagnostics.Already_included_file_name_0_differs_from_file_name_1_only_in_casing, [existingFile.fileName, fileName]); } else { @@ -127396,7 +128102,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } function addFileIncludeReason(file, reason, checkExisting) { if (file && (!checkExisting || !isReferencedFile(reason) || !(filesWithReferencesProcessed == null ? void 0 : filesWithReferencesProcessed.has(reason.file)))) { - fileReasons.add(file.path, reason); + programDiagnostics.getFileReasons().add(file.path, reason); return true; } return false; @@ -127548,6 +128254,16 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config var _a2, _b2, _c2, _d2, _e2; const existing = resolvedLibProcessing == null ? void 0 : resolvedLibProcessing.get(libFileName); if (existing) return existing; + if (options.libReplacement === false) { + const result2 = { + resolution: { + resolvedModule: void 0 + }, + actual: combinePaths(defaultLibraryPath, libFileName) + }; + (resolvedLibProcessing ?? (resolvedLibProcessing = /* @__PURE__ */ new Map())).set(libFileName, result2); + return result2; + } if (structureIsReused !== 0 /* Not */ && oldProgram && !hasInvalidatedLibResolutions(libFileName)) { const oldResolution = (_a2 = oldProgram.resolvedLibReferences) == null ? void 0 : _a2.get(libFileName); if (oldResolution) { @@ -127595,7 +128311,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config { kind: 7 /* LibReferenceDirective */, file: file.path, index } ); } else { - (fileProcessingDiagnostics || (fileProcessingDiagnostics = [])).push({ + programDiagnostics.addFileProcessingDiagnostic({ kind: 0 /* FilePreprocessingLibReferenceDiagnostic */, reason: { kind: 7 /* LibReferenceDirective */, file: file.path, index } }); @@ -127658,10 +128374,11 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config if (!sourceFile.isDeclarationFile) { const absoluteSourceFilePath = host.getCanonicalFileName(getNormalizedAbsolutePath(sourceFile.fileName, currentDirectory)); if (absoluteSourceFilePath.indexOf(absoluteRootDirectoryPath) !== 0) { - addLazyProgramDiagnosticExplainingFile( + programDiagnostics.addLazyConfigDiagnostic( sourceFile, Diagnostics.File_0_is_not_under_rootDir_1_rootDir_is_expected_to_contain_all_source_files, - [sourceFile.fileName, rootDirectory] + sourceFile.fileName, + rootDirectory ); allFilesBelongToPath = false; } @@ -127776,7 +128493,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } const outputFile = options.outFile; if (!options.tsBuildInfoFile && options.incremental && !outputFile && !options.configFilePath) { - programDiagnostics.add(createCompilerDiagnostic(Diagnostics.Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBuildInfoFile_is_specified)); + programDiagnostics.addConfigDiagnostic(createCompilerDiagnostic(Diagnostics.Option_incremental_can_only_be_specified_using_tsconfig_emitting_to_single_file_or_when_option_tsBuildInfoFile_is_specified)); } verifyDeprecatedCompilerOptions(); verifyProjectReferences(); @@ -127784,10 +128501,11 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config const rootPaths = new Set(rootNames.map(toPath3)); for (const file of files) { if (sourceFileMayBeEmitted(file, program) && !rootPaths.has(file.path)) { - addLazyProgramDiagnosticExplainingFile( + programDiagnostics.addLazyConfigDiagnostic( file, Diagnostics.File_0_is_not_listed_within_the_file_list_of_project_1_Projects_must_list_all_files_or_use_an_include_pattern, - [file.fileName, options.configFilePath || ""] + file.fileName, + options.configFilePath || "" ); } } @@ -127878,14 +128596,14 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } } else if (firstNonAmbientExternalModuleSourceFile && languageVersion < 2 /* ES2015 */ && options.module === 0 /* None */) { const span = getErrorSpanForNode(firstNonAmbientExternalModuleSourceFile, typeof firstNonAmbientExternalModuleSourceFile.externalModuleIndicator === "boolean" ? firstNonAmbientExternalModuleSourceFile : firstNonAmbientExternalModuleSourceFile.externalModuleIndicator); - programDiagnostics.add(createFileDiagnostic(firstNonAmbientExternalModuleSourceFile, span.start, span.length, Diagnostics.Cannot_use_imports_exports_or_module_augmentations_when_module_is_none)); + programDiagnostics.addConfigDiagnostic(createFileDiagnostic(firstNonAmbientExternalModuleSourceFile, span.start, span.length, Diagnostics.Cannot_use_imports_exports_or_module_augmentations_when_module_is_none)); } if (outputFile && !options.emitDeclarationOnly) { if (options.module && !(options.module === 2 /* AMD */ || options.module === 4 /* System */)) { createDiagnosticForOptionName(Diagnostics.Only_amd_and_system_modules_are_supported_alongside_0, "outFile", "module"); } else if (options.module === void 0 && firstNonAmbientExternalModuleSourceFile) { const span = getErrorSpanForNode(firstNonAmbientExternalModuleSourceFile, typeof firstNonAmbientExternalModuleSourceFile.externalModuleIndicator === "boolean" ? firstNonAmbientExternalModuleSourceFile : firstNonAmbientExternalModuleSourceFile.externalModuleIndicator); - programDiagnostics.add(createFileDiagnostic(firstNonAmbientExternalModuleSourceFile, span.start, span.length, Diagnostics.Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system, "outFile")); + programDiagnostics.addConfigDiagnostic(createFileDiagnostic(firstNonAmbientExternalModuleSourceFile, span.start, span.length, Diagnostics.Cannot_compile_modules_using_option_0_unless_the_module_flag_is_amd_or_system, "outFile")); } } if (getResolveJsonModule(options)) { @@ -127974,7 +128692,8 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } if (ModuleKind[moduleKind] && (100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */) && !(3 /* Node16 */ <= moduleResolution && moduleResolution <= 99 /* NodeNext */)) { const moduleKindName = ModuleKind[moduleKind]; - createOptionValueDiagnostic("moduleResolution", Diagnostics.Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1, moduleKindName, moduleKindName); + const moduleResolutionName = ModuleResolutionKind[moduleKindName] ? moduleKindName : "Node16"; + createOptionValueDiagnostic("moduleResolution", Diagnostics.Option_moduleResolution_must_be_set_to_0_or_left_unspecified_when_option_module_is_set_to_1, moduleResolutionName, moduleKindName); } else if (ModuleResolutionKind[moduleResolution] && (3 /* Node16 */ <= moduleResolution && moduleResolution <= 99 /* NodeNext */) && !(100 /* Node16 */ <= moduleKind && moduleKind <= 199 /* NodeNext */)) { const moduleResolutionName = ModuleResolutionKind[moduleResolution]; createOptionValueDiagnostic("module", Diagnostics.Option_module_must_be_set_to_0_when_option_moduleResolution_is_set_to_1, moduleResolutionName, moduleResolutionName); @@ -128136,90 +128855,8 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } }); } - function createDiagnosticExplainingFile(file, fileProcessingReason, diagnostic, args) { - let seenReasons; - const reasons = file && fileReasons.get(file.path); - let fileIncludeReasons; - let relatedInfo; - let locationReason = isReferencedFile(fileProcessingReason) ? fileProcessingReason : void 0; - let fileIncludeReasonDetails; - let redirectInfo; - let cachedChain = file && (fileReasonsToChain == null ? void 0 : fileReasonsToChain.get(file.path)); - let chain; - if (cachedChain) { - if (cachedChain.fileIncludeReasonDetails) { - seenReasons = new Set(reasons); - reasons == null ? void 0 : reasons.forEach(populateRelatedInfo); - } else { - reasons == null ? void 0 : reasons.forEach(processReason); - } - redirectInfo = cachedChain.redirectInfo; - } else { - reasons == null ? void 0 : reasons.forEach(processReason); - redirectInfo = file && explainIfFileIsRedirectAndImpliedFormat(file, getCompilerOptionsForFile(file)); - } - if (fileProcessingReason) processReason(fileProcessingReason); - const processedExtraReason = (seenReasons == null ? void 0 : seenReasons.size) !== (reasons == null ? void 0 : reasons.length); - if (locationReason && (seenReasons == null ? void 0 : seenReasons.size) === 1) seenReasons = void 0; - if (seenReasons && cachedChain) { - if (cachedChain.details && !processedExtraReason) { - chain = chainDiagnosticMessages(cachedChain.details, diagnostic, ...args || emptyArray); - } else if (cachedChain.fileIncludeReasonDetails) { - if (!processedExtraReason) { - if (!cachedFileIncludeDetailsHasProcessedExtraReason()) { - fileIncludeReasonDetails = cachedChain.fileIncludeReasonDetails; - } else { - fileIncludeReasons = cachedChain.fileIncludeReasonDetails.next.slice(0, reasons.length); - } - } else { - if (!cachedFileIncludeDetailsHasProcessedExtraReason()) { - fileIncludeReasons = [...cachedChain.fileIncludeReasonDetails.next, fileIncludeReasons[0]]; - } else { - fileIncludeReasons = append(cachedChain.fileIncludeReasonDetails.next.slice(0, reasons.length), fileIncludeReasons[0]); - } - } - } - } - if (!chain) { - if (!fileIncludeReasonDetails) fileIncludeReasonDetails = seenReasons && chainDiagnosticMessages(fileIncludeReasons, Diagnostics.The_file_is_in_the_program_because_Colon); - chain = chainDiagnosticMessages( - redirectInfo ? fileIncludeReasonDetails ? [fileIncludeReasonDetails, ...redirectInfo] : redirectInfo : fileIncludeReasonDetails, - diagnostic, - ...args || emptyArray - ); - } - if (file) { - if (cachedChain) { - if (!cachedChain.fileIncludeReasonDetails || !processedExtraReason && fileIncludeReasonDetails) { - cachedChain.fileIncludeReasonDetails = fileIncludeReasonDetails; - } - } else { - (fileReasonsToChain ?? (fileReasonsToChain = /* @__PURE__ */ new Map())).set(file.path, cachedChain = { fileIncludeReasonDetails, redirectInfo }); - } - if (!cachedChain.details && !processedExtraReason) cachedChain.details = chain.next; - } - const location = locationReason && getReferencedFileLocation(program, locationReason); - return location && isReferenceFileLocation(location) ? createFileDiagnosticFromMessageChain(location.file, location.pos, location.end - location.pos, chain, relatedInfo) : createCompilerDiagnosticFromMessageChain(chain, relatedInfo); - function processReason(reason) { - if (seenReasons == null ? void 0 : seenReasons.has(reason)) return; - (seenReasons ?? (seenReasons = /* @__PURE__ */ new Set())).add(reason); - (fileIncludeReasons ?? (fileIncludeReasons = [])).push(fileIncludeReasonToDiagnostics(program, reason)); - populateRelatedInfo(reason); - } - function populateRelatedInfo(reason) { - if (!locationReason && isReferencedFile(reason)) { - locationReason = reason; - } else if (locationReason !== reason) { - relatedInfo = append(relatedInfo, getFileIncludeReasonToRelatedInformation(reason)); - } - } - function cachedFileIncludeDetailsHasProcessedExtraReason() { - var _a2; - return ((_a2 = cachedChain.fileIncludeReasonDetails.next) == null ? void 0 : _a2.length) !== (reasons == null ? void 0 : reasons.length); - } - } function addFilePreprocessingFileExplainingDiagnostic(file, fileProcessingReason, diagnostic, args) { - (fileProcessingDiagnostics || (fileProcessingDiagnostics = [])).push({ + programDiagnostics.addFileProcessingDiagnostic({ kind: 1 /* FilePreprocessingFileExplainingDiagnostic */, file: file && file.path, fileProcessingReason, @@ -128227,99 +128864,6 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config args }); } - function addLazyProgramDiagnosticExplainingFile(file, diagnostic, args) { - lazyProgramDiagnosticExplainingFile.push({ file, diagnostic, args }); - } - function getFileIncludeReasonToRelatedInformation(reason) { - let relatedInfo = reasonToRelatedInfo == null ? void 0 : reasonToRelatedInfo.get(reason); - if (relatedInfo === void 0) (reasonToRelatedInfo ?? (reasonToRelatedInfo = /* @__PURE__ */ new Map())).set(reason, relatedInfo = fileIncludeReasonToRelatedInformation(reason) ?? false); - return relatedInfo || void 0; - } - function fileIncludeReasonToRelatedInformation(reason) { - if (isReferencedFile(reason)) { - const referenceLocation = getReferencedFileLocation(program, reason); - let message2; - switch (reason.kind) { - case 3 /* Import */: - message2 = Diagnostics.File_is_included_via_import_here; - break; - case 4 /* ReferenceFile */: - message2 = Diagnostics.File_is_included_via_reference_here; - break; - case 5 /* TypeReferenceDirective */: - message2 = Diagnostics.File_is_included_via_type_library_reference_here; - break; - case 7 /* LibReferenceDirective */: - message2 = Diagnostics.File_is_included_via_library_reference_here; - break; - default: - Debug.assertNever(reason); - } - return isReferenceFileLocation(referenceLocation) ? createFileDiagnostic( - referenceLocation.file, - referenceLocation.pos, - referenceLocation.end - referenceLocation.pos, - message2 - ) : void 0; - } - if (!options.configFile) return void 0; - let configFileNode; - let message; - switch (reason.kind) { - case 0 /* RootFile */: - if (!options.configFile.configFileSpecs) return void 0; - const fileName = getNormalizedAbsolutePath(rootNames[reason.index], currentDirectory); - const matchedByFiles = getMatchedFileSpec(program, fileName); - if (matchedByFiles) { - configFileNode = getTsConfigPropArrayElementValue(options.configFile, "files", matchedByFiles); - message = Diagnostics.File_is_matched_by_files_list_specified_here; - break; - } - const matchedByInclude = getMatchedIncludeSpec(program, fileName); - if (!matchedByInclude || !isString(matchedByInclude)) return void 0; - configFileNode = getTsConfigPropArrayElementValue(options.configFile, "include", matchedByInclude); - message = Diagnostics.File_is_matched_by_include_pattern_specified_here; - break; - case 1 /* SourceFromProjectReference */: - case 2 /* OutputFromProjectReference */: - const referencedResolvedRef = Debug.checkDefined(resolvedProjectReferences == null ? void 0 : resolvedProjectReferences[reason.index]); - const referenceInfo = forEachProjectReference( - projectReferences, - resolvedProjectReferences, - (resolvedRef, parent2, index2) => resolvedRef === referencedResolvedRef ? { sourceFile: (parent2 == null ? void 0 : parent2.sourceFile) || options.configFile, index: index2 } : void 0 - ); - if (!referenceInfo) return void 0; - const { sourceFile, index } = referenceInfo; - const referencesSyntax = forEachTsConfigPropArray(sourceFile, "references", (property) => isArrayLiteralExpression(property.initializer) ? property.initializer : void 0); - return referencesSyntax && referencesSyntax.elements.length > index ? createDiagnosticForNodeInSourceFile( - sourceFile, - referencesSyntax.elements[index], - reason.kind === 2 /* OutputFromProjectReference */ ? Diagnostics.File_is_output_from_referenced_project_specified_here : Diagnostics.File_is_source_from_referenced_project_specified_here - ) : void 0; - case 8 /* AutomaticTypeDirectiveFile */: - if (!options.types) return void 0; - configFileNode = getOptionsSyntaxByArrayElementValue("types", reason.typeReference); - message = Diagnostics.File_is_entry_point_of_type_library_specified_here; - break; - case 6 /* LibFile */: - if (reason.index !== void 0) { - configFileNode = getOptionsSyntaxByArrayElementValue("lib", options.lib[reason.index]); - message = Diagnostics.File_is_library_specified_here; - break; - } - const target = getNameOfScriptTarget(getEmitScriptTarget(options)); - configFileNode = target ? getOptionsSyntaxByValue("target", target) : void 0; - message = Diagnostics.File_is_default_library_for_target_specified_here; - break; - default: - Debug.assertNever(reason); - } - return configFileNode && createDiagnosticForNodeInSourceFile( - options.configFile, - configFileNode, - message - ); - } function verifyProjectReferences() { const buildInfoPath = !options.suppressOutputPathCheck ? getTsBuildInfoEmitOutputFilePath(options) : void 0; forEachProjectReference( @@ -128355,7 +128899,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config forEachPropertyAssignment(pathProp.initializer, key, (keyProps) => { const initializer = keyProps.initializer; if (isArrayLiteralExpression(initializer) && initializer.elements.length > valueIndex) { - programDiagnostics.add(createDiagnosticForNodeInSourceFile(options.configFile, initializer.elements[valueIndex], message, ...args)); + programDiagnostics.addConfigDiagnostic(createDiagnosticForNodeInSourceFile(options.configFile, initializer.elements[valueIndex], message, ...args)); needCompilerDiagnostic = false; } }); @@ -128384,18 +128928,8 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config createCompilerOptionsDiagnostic(message, ...args); } } - function forEachOptionsSyntaxByName(name, callback) { - return forEachPropertyAssignment(getCompilerOptionsObjectLiteralSyntax(), name, callback); - } function forEachOptionPathsSyntax(callback) { - return forEachOptionsSyntaxByName("paths", callback); - } - function getOptionsSyntaxByValue(name, value) { - return forEachOptionsSyntaxByName(name, (property) => isStringLiteral(property.initializer) && property.initializer.text === value ? property.initializer : void 0); - } - function getOptionsSyntaxByArrayElementValue(name, value) { - const compilerOptionsObjectLiteralSyntax = getCompilerOptionsObjectLiteralSyntax(); - return compilerOptionsObjectLiteralSyntax && getPropertyArrayElementValue(compilerOptionsObjectLiteralSyntax, name, value); + return forEachOptionsSyntaxByName(getCompilerOptionsObjectLiteralSyntax(), "paths", callback); } function createDiagnosticForOptionName(message, option1, option2, option3) { createDiagnosticForOption( @@ -128423,9 +128957,9 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config function createDiagnosticForReference(sourceFile, index, message, ...args) { const referencesSyntax = forEachTsConfigPropArray(sourceFile || options.configFile, "references", (property) => isArrayLiteralExpression(property.initializer) ? property.initializer : void 0); if (referencesSyntax && referencesSyntax.elements.length > index) { - programDiagnostics.add(createDiagnosticForNodeInSourceFile(sourceFile || options.configFile, referencesSyntax.elements[index], message, ...args)); + programDiagnostics.addConfigDiagnostic(createDiagnosticForNodeInSourceFile(sourceFile || options.configFile, referencesSyntax.elements[index], message, ...args)); } else { - programDiagnostics.add(createCompilerDiagnostic(message, ...args)); + programDiagnostics.addConfigDiagnostic(createCompilerDiagnostic(message, ...args)); } } function createDiagnosticForOption(onKey, option1, option2, message, ...args) { @@ -128439,14 +128973,14 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config const compilerOptionsProperty = getCompilerOptionsPropertySyntax(); if (compilerOptionsProperty) { if ("messageText" in message) { - programDiagnostics.add(createDiagnosticForNodeFromMessageChain(options.configFile, compilerOptionsProperty.name, message)); + programDiagnostics.addConfigDiagnostic(createDiagnosticForNodeFromMessageChain(options.configFile, compilerOptionsProperty.name, message)); } else { - programDiagnostics.add(createDiagnosticForNodeInSourceFile(options.configFile, compilerOptionsProperty.name, message, ...args)); + programDiagnostics.addConfigDiagnostic(createDiagnosticForNodeInSourceFile(options.configFile, compilerOptionsProperty.name, message, ...args)); } } else if ("messageText" in message) { - programDiagnostics.add(createCompilerDiagnosticFromMessageChain(message)); + programDiagnostics.addConfigDiagnostic(createCompilerDiagnosticFromMessageChain(message)); } else { - programDiagnostics.add(createCompilerDiagnostic(message, ...args)); + programDiagnostics.addConfigDiagnostic(createCompilerDiagnostic(message, ...args)); } } function getCompilerOptionsObjectLiteralSyntax() { @@ -128470,9 +129004,9 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config let needsCompilerDiagnostic = false; forEachPropertyAssignment(objectLiteral, key1, (prop) => { if ("messageText" in message) { - programDiagnostics.add(createDiagnosticForNodeFromMessageChain(options.configFile, onKey ? prop.name : prop.initializer, message)); + programDiagnostics.addConfigDiagnostic(createDiagnosticForNodeFromMessageChain(options.configFile, onKey ? prop.name : prop.initializer, message)); } else { - programDiagnostics.add(createDiagnosticForNodeInSourceFile(options.configFile, onKey ? prop.name : prop.initializer, message, ...args)); + programDiagnostics.addConfigDiagnostic(createDiagnosticForNodeInSourceFile(options.configFile, onKey ? prop.name : prop.initializer, message, ...args)); } needsCompilerDiagnostic = true; }, key2); @@ -128480,7 +129014,7 @@ function createProgram(rootNamesOrOptions, _options, _host, _oldProgram, _config } function blockEmittingOfFile(emitFileName, diag2) { hasEmitBlockingDiagnostics.set(toPath3(emitFileName), true); - programDiagnostics.add(diag2); + programDiagnostics.addConfigDiagnostic(diag2); } function isEmittedFile(file) { if (options.noEmit) { @@ -128803,6 +129337,293 @@ function getModuleNameStringLiteralAt({ imports, moduleAugmentations }, index) { Debug.fail("should never ask for module name at index higher than possible module name"); } +// src/compiler/programDiagnostics.ts +function createProgramDiagnostics(getCompilerOptionsObjectLiteralSyntax) { + let computedDiagnostics; + let fileReasons = createMultiMap(); + let fileProcessingDiagnostics; + let commonSourceDirectory; + let configDiagnostics; + let lazyConfigDiagnostics; + let fileReasonsToChain; + let reasonToRelatedInfo; + return { + addConfigDiagnostic(diag2) { + Debug.assert(computedDiagnostics === void 0, "Cannot modify program diagnostic state after requesting combined diagnostics"); + (configDiagnostics ?? (configDiagnostics = createDiagnosticCollection())).add(diag2); + }, + addLazyConfigDiagnostic(file, message, ...args) { + Debug.assert(computedDiagnostics === void 0, "Cannot modify program diagnostic state after requesting combined diagnostics"); + (lazyConfigDiagnostics ?? (lazyConfigDiagnostics = [])).push({ file, diagnostic: message, args }); + }, + addFileProcessingDiagnostic(diag2) { + Debug.assert(computedDiagnostics === void 0, "Cannot modify program diagnostic state after requesting combined diagnostics"); + (fileProcessingDiagnostics ?? (fileProcessingDiagnostics = [])).push(diag2); + }, + setCommonSourceDirectory(directory) { + commonSourceDirectory = directory; + }, + reuseStateFromOldProgram(oldProgramDiagnostics, isConfigIdentical) { + fileReasons = oldProgramDiagnostics.getFileReasons(); + fileProcessingDiagnostics = oldProgramDiagnostics.getFileProcessingDiagnostics(); + if (isConfigIdentical) { + commonSourceDirectory = oldProgramDiagnostics.getCommonSourceDirectory(); + configDiagnostics = oldProgramDiagnostics.getConfigDiagnostics(); + lazyConfigDiagnostics = oldProgramDiagnostics.getLazyConfigDiagnostics(); + } + }, + getFileProcessingDiagnostics() { + return fileProcessingDiagnostics; + }, + getFileReasons() { + return fileReasons; + }, + getCommonSourceDirectory() { + return commonSourceDirectory; + }, + getConfigDiagnostics() { + return configDiagnostics; + }, + getLazyConfigDiagnostics() { + return lazyConfigDiagnostics; + }, + getCombinedDiagnostics(program) { + if (computedDiagnostics) { + return computedDiagnostics; + } + computedDiagnostics = createDiagnosticCollection(); + configDiagnostics == null ? void 0 : configDiagnostics.getDiagnostics().forEach((d) => computedDiagnostics.add(d)); + fileProcessingDiagnostics == null ? void 0 : fileProcessingDiagnostics.forEach((diagnostic) => { + switch (diagnostic.kind) { + case 1 /* FilePreprocessingFileExplainingDiagnostic */: + return computedDiagnostics.add( + createDiagnosticExplainingFile( + program, + diagnostic.file && program.getSourceFileByPath(diagnostic.file), + diagnostic.fileProcessingReason, + diagnostic.diagnostic, + diagnostic.args || emptyArray + ) + ); + case 0 /* FilePreprocessingLibReferenceDiagnostic */: + return computedDiagnostics.add(filePreprocessingLibreferenceDiagnostic(program, diagnostic)); + case 2 /* ResolutionDiagnostics */: + return diagnostic.diagnostics.forEach((d) => computedDiagnostics.add(d)); + default: + Debug.assertNever(diagnostic); + } + }); + lazyConfigDiagnostics == null ? void 0 : lazyConfigDiagnostics.forEach( + ({ file, diagnostic, args }) => computedDiagnostics.add( + createDiagnosticExplainingFile( + program, + file, + /*fileProcessingReason*/ + void 0, + diagnostic, + args + ) + ) + ); + fileReasonsToChain = void 0; + reasonToRelatedInfo = void 0; + return computedDiagnostics; + } + }; + function filePreprocessingLibreferenceDiagnostic(program, { reason }) { + const { file, pos, end } = getReferencedFileLocation(program, reason); + const libReference = file.libReferenceDirectives[reason.index]; + const libName = getLibNameFromLibReference(libReference); + const unqualifiedLibName = removeSuffix(removePrefix(libName, "lib."), ".d.ts"); + const suggestion = getSpellingSuggestion(unqualifiedLibName, libs, identity); + return createFileDiagnostic( + file, + Debug.checkDefined(pos), + Debug.checkDefined(end) - pos, + suggestion ? Diagnostics.Cannot_find_lib_definition_for_0_Did_you_mean_1 : Diagnostics.Cannot_find_lib_definition_for_0, + libName, + suggestion + ); + } + function createDiagnosticExplainingFile(program, file, fileProcessingReason, diagnostic, args) { + let seenReasons; + let fileIncludeReasons; + let relatedInfo; + let fileIncludeReasonDetails; + let redirectInfo; + let chain; + const reasons = file && fileReasons.get(file.path); + let locationReason = isReferencedFile(fileProcessingReason) ? fileProcessingReason : void 0; + let cachedChain = file && (fileReasonsToChain == null ? void 0 : fileReasonsToChain.get(file.path)); + if (cachedChain) { + if (cachedChain.fileIncludeReasonDetails) { + seenReasons = new Set(reasons); + reasons == null ? void 0 : reasons.forEach(populateRelatedInfo); + } else { + reasons == null ? void 0 : reasons.forEach(processReason); + } + redirectInfo = cachedChain.redirectInfo; + } else { + reasons == null ? void 0 : reasons.forEach(processReason); + redirectInfo = file && explainIfFileIsRedirectAndImpliedFormat(file, program.getCompilerOptionsForFile(file)); + } + if (fileProcessingReason) processReason(fileProcessingReason); + const processedExtraReason = (seenReasons == null ? void 0 : seenReasons.size) !== (reasons == null ? void 0 : reasons.length); + if (locationReason && (seenReasons == null ? void 0 : seenReasons.size) === 1) seenReasons = void 0; + if (seenReasons && cachedChain) { + if (cachedChain.details && !processedExtraReason) { + chain = chainDiagnosticMessages(cachedChain.details, diagnostic, ...args ?? emptyArray); + } else if (cachedChain.fileIncludeReasonDetails) { + if (!processedExtraReason) { + if (!cachedFileIncludeDetailsHasProcessedExtraReason()) { + fileIncludeReasonDetails = cachedChain.fileIncludeReasonDetails; + } else { + fileIncludeReasons = cachedChain.fileIncludeReasonDetails.next.slice(0, reasons.length); + } + } else { + if (!cachedFileIncludeDetailsHasProcessedExtraReason()) { + fileIncludeReasons = [...cachedChain.fileIncludeReasonDetails.next, fileIncludeReasons[0]]; + } else { + fileIncludeReasons = append(cachedChain.fileIncludeReasonDetails.next.slice(0, reasons.length), fileIncludeReasons[0]); + } + } + } + } + if (!chain) { + if (!fileIncludeReasonDetails) fileIncludeReasonDetails = seenReasons && chainDiagnosticMessages(fileIncludeReasons, Diagnostics.The_file_is_in_the_program_because_Colon); + chain = chainDiagnosticMessages( + redirectInfo ? fileIncludeReasonDetails ? [fileIncludeReasonDetails, ...redirectInfo] : redirectInfo : fileIncludeReasonDetails, + diagnostic, + ...args || emptyArray + ); + } + if (file) { + if (cachedChain) { + if (!cachedChain.fileIncludeReasonDetails || !processedExtraReason && fileIncludeReasonDetails) { + cachedChain.fileIncludeReasonDetails = fileIncludeReasonDetails; + } + } else { + (fileReasonsToChain ?? (fileReasonsToChain = /* @__PURE__ */ new Map())).set(file.path, cachedChain = { fileIncludeReasonDetails, redirectInfo }); + } + if (!cachedChain.details && !processedExtraReason) cachedChain.details = chain.next; + } + const location = locationReason && getReferencedFileLocation(program, locationReason); + return location && isReferenceFileLocation(location) ? createFileDiagnosticFromMessageChain(location.file, location.pos, location.end - location.pos, chain, relatedInfo) : createCompilerDiagnosticFromMessageChain(chain, relatedInfo); + function processReason(reason) { + if (seenReasons == null ? void 0 : seenReasons.has(reason)) return; + (seenReasons ?? (seenReasons = /* @__PURE__ */ new Set())).add(reason); + (fileIncludeReasons ?? (fileIncludeReasons = [])).push(fileIncludeReasonToDiagnostics(program, reason)); + populateRelatedInfo(reason); + } + function populateRelatedInfo(reason) { + if (!locationReason && isReferencedFile(reason)) { + locationReason = reason; + } else if (locationReason !== reason) { + relatedInfo = append(relatedInfo, getFileIncludeReasonToRelatedInformation(program, reason)); + } + } + function cachedFileIncludeDetailsHasProcessedExtraReason() { + var _a; + return ((_a = cachedChain.fileIncludeReasonDetails.next) == null ? void 0 : _a.length) !== (reasons == null ? void 0 : reasons.length); + } + } + function getFileIncludeReasonToRelatedInformation(program, reason) { + let relatedInfo = reasonToRelatedInfo == null ? void 0 : reasonToRelatedInfo.get(reason); + if (relatedInfo === void 0) (reasonToRelatedInfo ?? (reasonToRelatedInfo = /* @__PURE__ */ new Map())).set(reason, relatedInfo = fileIncludeReasonToRelatedInformation(program, reason) ?? false); + return relatedInfo || void 0; + } + function fileIncludeReasonToRelatedInformation(program, reason) { + if (isReferencedFile(reason)) { + const referenceLocation = getReferencedFileLocation(program, reason); + let message2; + switch (reason.kind) { + case 3 /* Import */: + message2 = Diagnostics.File_is_included_via_import_here; + break; + case 4 /* ReferenceFile */: + message2 = Diagnostics.File_is_included_via_reference_here; + break; + case 5 /* TypeReferenceDirective */: + message2 = Diagnostics.File_is_included_via_type_library_reference_here; + break; + case 7 /* LibReferenceDirective */: + message2 = Diagnostics.File_is_included_via_library_reference_here; + break; + default: + Debug.assertNever(reason); + } + return isReferenceFileLocation(referenceLocation) ? createFileDiagnostic( + referenceLocation.file, + referenceLocation.pos, + referenceLocation.end - referenceLocation.pos, + message2 + ) : void 0; + } + const currentDirectory = program.getCurrentDirectory(); + const rootNames = program.getRootFileNames(); + const options = program.getCompilerOptions(); + if (!options.configFile) return void 0; + let configFileNode; + let message; + switch (reason.kind) { + case 0 /* RootFile */: + if (!options.configFile.configFileSpecs) return void 0; + const fileName = getNormalizedAbsolutePath(rootNames[reason.index], currentDirectory); + const matchedByFiles = getMatchedFileSpec(program, fileName); + if (matchedByFiles) { + configFileNode = getTsConfigPropArrayElementValue(options.configFile, "files", matchedByFiles); + message = Diagnostics.File_is_matched_by_files_list_specified_here; + break; + } + const matchedByInclude = getMatchedIncludeSpec(program, fileName); + if (!matchedByInclude || !isString(matchedByInclude)) return void 0; + configFileNode = getTsConfigPropArrayElementValue(options.configFile, "include", matchedByInclude); + message = Diagnostics.File_is_matched_by_include_pattern_specified_here; + break; + case 1 /* SourceFromProjectReference */: + case 2 /* OutputFromProjectReference */: + const resolvedProjectReferences = program.getResolvedProjectReferences(); + const projectReferences = program.getProjectReferences(); + const referencedResolvedRef = Debug.checkDefined(resolvedProjectReferences == null ? void 0 : resolvedProjectReferences[reason.index]); + const referenceInfo = forEachProjectReference( + projectReferences, + resolvedProjectReferences, + (resolvedRef, parent2, index2) => resolvedRef === referencedResolvedRef ? { sourceFile: (parent2 == null ? void 0 : parent2.sourceFile) || options.configFile, index: index2 } : void 0 + ); + if (!referenceInfo) return void 0; + const { sourceFile, index } = referenceInfo; + const referencesSyntax = forEachTsConfigPropArray(sourceFile, "references", (property) => isArrayLiteralExpression(property.initializer) ? property.initializer : void 0); + return referencesSyntax && referencesSyntax.elements.length > index ? createDiagnosticForNodeInSourceFile( + sourceFile, + referencesSyntax.elements[index], + reason.kind === 2 /* OutputFromProjectReference */ ? Diagnostics.File_is_output_from_referenced_project_specified_here : Diagnostics.File_is_source_from_referenced_project_specified_here + ) : void 0; + case 8 /* AutomaticTypeDirectiveFile */: + if (!options.types) return void 0; + configFileNode = getOptionsSyntaxByArrayElementValue(getCompilerOptionsObjectLiteralSyntax(), "types", reason.typeReference); + message = Diagnostics.File_is_entry_point_of_type_library_specified_here; + break; + case 6 /* LibFile */: + if (reason.index !== void 0) { + configFileNode = getOptionsSyntaxByArrayElementValue(getCompilerOptionsObjectLiteralSyntax(), "lib", options.lib[reason.index]); + message = Diagnostics.File_is_library_specified_here; + break; + } + const target = getNameOfScriptTarget(getEmitScriptTarget(options)); + configFileNode = target ? getOptionsSyntaxByValue(getCompilerOptionsObjectLiteralSyntax(), "target", target) : void 0; + message = Diagnostics.File_is_default_library_for_target_specified_here; + break; + default: + Debug.assertNever(reason); + } + return configFileNode && createDiagnosticForNodeInSourceFile( + options.configFile, + configFileNode, + message + ); + } +} + // src/compiler/builderState.ts function getFileEmitOutput(program, sourceFile, emitOnlyDtsFiles, cancellationToken, customTransformers, forceDtsEmit) { const outputFiles = []; @@ -136663,9 +137484,9 @@ function createSyntacticTypeNodeBuilder(options, resolver) { } if (!result && node.kind === 303 /* PropertyAssignment */) { const initializer = node.initializer; - const type = isJSDocTypeAssertion(initializer) ? getJSDocTypeAssertionType(initializer) : initializer.kind === 234 /* AsExpression */ || initializer.kind === 216 /* TypeAssertionExpression */ ? initializer.type : void 0; - if (type && !isConstTypeReference(type)) { - result = serializeExistingTypeNode(type, context); + const assertionNode = isJSDocTypeAssertion(initializer) ? getJSDocTypeAssertionType(initializer) : initializer.kind === 234 /* AsExpression */ || initializer.kind === 216 /* TypeAssertionExpression */ ? initializer.type : void 0; + if (assertionNode && !isConstTypeReference(assertionNode) && resolver.canReuseTypeNodeAnnotation(context, node, assertionNode, symbol)) { + result = serializeExistingTypeNode(assertionNode, context); } } return result ?? inferTypeOfDeclaration( @@ -136958,18 +137779,21 @@ function createSyntacticTypeNodeBuilder(options, resolver) { return failed; } function typeFromFunctionLikeExpression(fnNode, context) { - const oldNoInferenceFallback = context.noInferenceFallback; - context.noInferenceFallback = true; - createReturnFromSignature( + const returnType = createReturnFromSignature( fnNode, /*symbol*/ void 0, context ); - reuseTypeParameters(fnNode.typeParameters, context); - fnNode.parameters.map((p) => ensureParameter(p, context)); - context.noInferenceFallback = oldNoInferenceFallback; - return notImplemented2; + const typeParameters = reuseTypeParameters(fnNode.typeParameters, context); + const parameters = fnNode.parameters.map((p) => ensureParameter(p, context)); + return syntacticResult( + factory.createFunctionTypeNode( + typeParameters, + parameters, + returnType + ) + ); } function canGetTypeFromArrayLiteral(arrayLiteral, context, isConstContext) { if (!isConstContext) { @@ -139816,9 +140640,9 @@ function mapToDisplayParts(writeDisplayParts) { displayPartWriter.clear(); } } -function typeToDisplayParts(typechecker, type, enclosingDeclaration, flags = 0 /* None */) { +function typeToDisplayParts(typechecker, type, enclosingDeclaration, flags = 0 /* None */, verbosityLevel, out) { return mapToDisplayParts((writer) => { - typechecker.writeType(type, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */ | 16384 /* UseAliasDefinedOutsideCurrentScope */, writer); + typechecker.writeType(type, enclosingDeclaration, flags | 1024 /* MultilineObjectLiterals */ | 16384 /* UseAliasDefinedOutsideCurrentScope */, writer, verbosityLevel, out); }); } function symbolToDisplayParts(typeChecker, symbol, enclosingDeclaration, meaning, flags = 0 /* None */) { @@ -140525,7 +141349,7 @@ function moduleSymbolToValidIdentifier(moduleSymbol, target, forceCapitalize) { return moduleSpecifierToValidIdentifier(removeFileExtension(stripQuotes(moduleSymbol.name)), target, forceCapitalize); } function moduleSpecifierToValidIdentifier(moduleSpecifier, target, forceCapitalize) { - const baseName = getBaseFileName(removeSuffix(moduleSpecifier, "/index")); + const baseName = getBaseFileName(removeSuffix(removeFileExtension(moduleSpecifier), "/index")); let res = ""; let lastCharWasValid = true; const firstCharCode = baseName.charCodeAt(0); @@ -151783,7 +152607,7 @@ function createLanguageService(host, documentRegistry = createDocumentRegistry(h synchronizeHostData(); return ts_Completions_exports.getCompletionEntrySymbol(program, log, getValidSourceFile(fileName), position, { name, source }, host, preferences); } - function getQuickInfoAtPosition(fileName, position) { + function getQuickInfoAtPosition(fileName, position, verbosityLevel) { synchronizeHostData(); const sourceFile = getValidSourceFile(fileName); const node = getTouchingPropertyName(sourceFile, position); @@ -151799,19 +152623,41 @@ function createLanguageService(host, documentRegistry = createDocumentRegistry(h kind: "" /* unknown */, kindModifiers: "" /* none */, textSpan: createTextSpanFromNode(nodeForQuickInfo, sourceFile), - displayParts: typeChecker.runWithCancellationToken(cancellationToken, (typeChecker2) => typeToDisplayParts(typeChecker2, type, getContainerNode(nodeForQuickInfo))), + displayParts: typeChecker.runWithCancellationToken(cancellationToken, (typeChecker2) => typeToDisplayParts( + typeChecker2, + type, + getContainerNode(nodeForQuickInfo), + /*flags*/ + void 0, + verbosityLevel + )), documentation: type.symbol ? type.symbol.getDocumentationComment(typeChecker) : void 0, tags: type.symbol ? type.symbol.getJsDocTags(typeChecker) : void 0 }; } - const { symbolKind, displayParts, documentation, tags } = typeChecker.runWithCancellationToken(cancellationToken, (typeChecker2) => ts_SymbolDisplay_exports.getSymbolDisplayPartsDocumentationAndSymbolKind(typeChecker2, symbol, sourceFile, getContainerNode(nodeForQuickInfo), nodeForQuickInfo)); + const { symbolKind, displayParts, documentation, tags, canIncreaseVerbosityLevel } = typeChecker.runWithCancellationToken( + cancellationToken, + (typeChecker2) => ts_SymbolDisplay_exports.getSymbolDisplayPartsDocumentationAndSymbolKind( + typeChecker2, + symbol, + sourceFile, + getContainerNode(nodeForQuickInfo), + nodeForQuickInfo, + /*semanticMeaning*/ + void 0, + /*alias*/ + void 0, + verbosityLevel + ) + ); return { kind: symbolKind, kindModifiers: ts_SymbolDisplay_exports.getSymbolModifiers(typeChecker, symbol), textSpan: createTextSpanFromNode(nodeForQuickInfo, sourceFile), displayParts, documentation, - tags + tags, + canIncreaseVerbosityLevel }; } function preparePasteEditsForFile(fileName, copiedTextRange) { @@ -156842,6 +157688,7 @@ var errorCodes19 = [ Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode.code, Diagnostics.Cannot_find_name_0_Do_you_need_to_install_type_definitions_for_node_Try_npm_i_save_dev_types_Slashnode_and_then_add_node_to_the_types_field_in_your_tsconfig.code, Diagnostics.Cannot_find_namespace_0_Did_you_mean_1.code, + Diagnostics.Cannot_extend_an_interface_0_Did_you_mean_implements.code, Diagnostics.This_JSX_tag_requires_0_to_be_in_scope_but_it_could_not_be_found.code ]; registerCodeFix({ @@ -157945,6 +158792,7 @@ function getUmdImportKind(importingFile, program, forceImportKeyword) { case 200 /* Preserve */: return 2 /* Namespace */; case 100 /* Node16 */: + case 101 /* Node18 */: case 199 /* NodeNext */: return getImpliedNodeFormatForEmit(importingFile, program) === 99 /* ESNext */ ? 2 /* Namespace */ : 3 /* CommonJS */; default: @@ -159356,7 +160204,8 @@ var errorCodes28 = [ Diagnostics.Type_0_is_missing_the_following_properties_from_type_1_Colon_2.code, Diagnostics.Type_0_is_missing_the_following_properties_from_type_1_Colon_2_and_3_more.code, Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code, - Diagnostics.Cannot_find_name_0.code + Diagnostics.Cannot_find_name_0.code, + Diagnostics.Type_0_does_not_satisfy_the_expected_type_1.code ]; registerCodeFix({ errorCodes: errorCodes28, @@ -159393,9 +160242,9 @@ registerCodeFix({ return createCombinedCodeActions(ts_textChanges_exports.ChangeTracker.with(context, (changes) => { eachDiagnostic(context, errorCodes28, (diag2) => { const info = getInfo10(diag2.file, diag2.start, diag2.code, checker, context.program); - if (!info || !addToSeen(seen, getNodeId(info.parentDeclaration) + "#" + (info.kind === 3 /* ObjectLiteral */ ? info.identifier : info.token.text))) { - return; - } + if (info === void 0) return; + const nodeId = getNodeId(info.parentDeclaration) + "#" + (info.kind === 3 /* ObjectLiteral */ ? info.identifier || getNodeId(info.token) : info.token.text); + if (!addToSeen(seen, nodeId)) return; if (fixId56 === fixMissingFunctionDeclaration && (info.kind === 2 /* Function */ || info.kind === 5 /* Signature */)) { addFunctionDeclaration(changes, context, info); } else if (fixId56 === fixMissingProperties && info.kind === 3 /* ObjectLiteral */) { @@ -159439,7 +160288,7 @@ registerCodeFix({ } }); function getInfo10(sourceFile, tokenPos, errorCode, checker, program) { - var _a, _b, _c; + var _a, _b; const token = getTokenAtPosition(sourceFile, tokenPos); const parent2 = token.parent; if (errorCode === Diagnostics.Argument_of_type_0_is_not_assignable_to_parameter_of_type_1.code) { @@ -159461,23 +160310,25 @@ function getInfo10(sourceFile, tokenPos, errorCode, checker, program) { if (!length(properties)) return void 0; return { kind: 3 /* ObjectLiteral */, token: param.name, identifier: param.name.text, properties, parentDeclaration: parent2 }; } - if (token.kind === 19 /* OpenBraceToken */ && isObjectLiteralExpression(parent2)) { - const targetType = (_a = checker.getContextualType(parent2) || checker.getTypeAtLocation(parent2)) == null ? void 0 : _a.getNonNullableType(); - const properties = arrayFrom(checker.getUnmatchedProperties( - checker.getTypeAtLocation(parent2), - targetType, - /*requireOptionalProperties*/ - false, - /*matchDiscriminantProperties*/ - false - )); - if (!length(properties)) return void 0; - const identifier = ""; - return { kind: 3 /* ObjectLiteral */, token: parent2, identifier, properties, parentDeclaration: parent2 }; + if (token.kind === 19 /* OpenBraceToken */ || isSatisfiesExpression(parent2) || isReturnStatement(parent2)) { + const expression = (isSatisfiesExpression(parent2) || isReturnStatement(parent2)) && parent2.expression ? parent2.expression : parent2; + if (isObjectLiteralExpression(expression)) { + const targetType = isSatisfiesExpression(parent2) ? checker.getTypeFromTypeNode(parent2.type) : checker.getContextualType(expression) || checker.getTypeAtLocation(expression); + const properties = arrayFrom(checker.getUnmatchedProperties( + checker.getTypeAtLocation(parent2), + targetType.getNonNullableType(), + /*requireOptionalProperties*/ + false, + /*matchDiscriminantProperties*/ + false + )); + if (!length(properties)) return void 0; + return { kind: 3 /* ObjectLiteral */, token: parent2, identifier: void 0, properties, parentDeclaration: expression, indentation: isReturnStatement(expression.parent) || isYieldExpression(expression.parent) ? 0 : void 0 }; + } } if (!isMemberName(token)) return void 0; if (isIdentifier(token) && hasInitializer(parent2) && parent2.initializer && isObjectLiteralExpression(parent2.initializer)) { - const targetType = (_b = checker.getContextualType(token) || checker.getTypeAtLocation(token)) == null ? void 0 : _b.getNonNullableType(); + const targetType = (_a = checker.getContextualType(token) || checker.getTypeAtLocation(token)) == null ? void 0 : _a.getNonNullableType(); const properties = arrayFrom(checker.getUnmatchedProperties( checker.getTypeAtLocation(parent2.initializer), targetType, @@ -159496,7 +160347,7 @@ function getInfo10(sourceFile, tokenPos, errorCode, checker, program) { return { kind: 4 /* JsxAttributes */, token, attributes, parentDeclaration: token.parent }; } if (isIdentifier(token)) { - const type = (_c = checker.getContextualType(token)) == null ? void 0 : _c.getNonNullableType(); + const type = (_b = checker.getContextualType(token)) == null ? void 0 : _b.getNonNullableType(); if (type && getObjectFlags(type) & 16 /* Anonymous */) { const signature = firstOrUndefined(checker.getSignaturesOfType(type, 0 /* Call */)); if (signature === void 0) return void 0; @@ -160499,9 +161350,9 @@ function getSuggestion(messageText) { // src/services/codefixes/fixModuleAndTargetOptions.ts registerCodeFix({ errorCodes: [ - Diagnostics.Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher.code, - Diagnostics.Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher.code, - Diagnostics.Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher.code + Diagnostics.Top_level_await_expressions_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher.code, + Diagnostics.Top_level_await_using_statements_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher.code, + Diagnostics.Top_level_for_await_loops_are_only_allowed_when_the_module_option_is_set_to_es2022_esnext_system_node16_node18_nodenext_or_preserve_and_the_target_option_is_set_to_es2017_or_higher.code ], getCodeActions: function getCodeActionsToFixModuleAndTarget(context) { const compilerOptions = context.program.getCompilerOptions(); @@ -160970,6 +161821,8 @@ registerCodeFix({ break; } else if (canDeleteEntireVariableStatement(sourceFile, token)) { deleteEntireVariableStatement(changes, sourceFile, token.parent); + } else if (isIdentifier(token) && isFunctionDeclaration(token.parent)) { + deleteFunctionLikeDeclaration(changes, sourceFile, token.parent); } else { tryDeleteDeclaration( sourceFile, @@ -163937,12 +164790,10 @@ function typeToAutoImportableTypeNode(checker, importAdder, type, contextNode, s return typeNodeToAutoImportableTypeNode(typeNode, importAdder, scriptTarget); } function typeNodeToAutoImportableTypeNode(typeNode, importAdder, scriptTarget) { - if (typeNode && isImportTypeNode(typeNode)) { - const importableReference = tryGetAutoImportableReferenceFromTypeNode(typeNode, scriptTarget); - if (importableReference) { - importSymbols(importAdder, importableReference.symbols); - typeNode = importableReference.typeNode; - } + const importableReference = tryGetAutoImportableReferenceFromTypeNode(typeNode, scriptTarget); + if (importableReference) { + importSymbols(importAdder, importableReference.symbols); + typeNode = importableReference.typeNode; } return getSynthesizedDeepClone(typeNode); } @@ -172461,7 +173312,7 @@ var Core; } else { addIfImplementation(body); } - } else if (isAssertionExpression(typeHavingNode)) { + } else if (isAssertionExpression(typeHavingNode) || isSatisfiesExpression(typeHavingNode)) { addIfImplementation(typeHavingNode.expression); } } @@ -172900,7 +173751,10 @@ function getDefinitionAtPosition(program, sourceFile, position, searchOtherFiles const { parent: parent2 } = node; const typeChecker = program.getTypeChecker(); if (node.kind === 164 /* OverrideKeyword */ || isIdentifier(node) && isJSDocOverrideTag(parent2) && parent2.tagName === node) { - return getDefinitionFromOverriddenMember(typeChecker, node) || emptyArray; + const def = getDefinitionFromOverriddenMember(typeChecker, node); + if (def !== void 0 || node.kind !== 164 /* OverrideKeyword */) { + return def || emptyArray; + } } if (isJumpStatementTarget(node)) { const label = getTargetLabel(node.parent, node.text); @@ -172914,9 +173768,6 @@ function getDefinitionAtPosition(program, sourceFile, position, searchOtherFiles )] : void 0; } switch (node.kind) { - case 107 /* ReturnKeyword */: - const functionDeclaration = findAncestor(node.parent, (n) => isClassStaticBlockDeclaration(n) ? "quit" : isFunctionLikeDeclaration(n)); - return functionDeclaration ? [createDefinitionFromSignatureDeclaration(typeChecker, functionDeclaration)] : void 0; case 90 /* DefaultKeyword */: if (!isDefaultClause(node.parent)) { break; @@ -172929,15 +173780,14 @@ function getDefinitionAtPosition(program, sourceFile, position, searchOtherFiles } break; } - if (node.kind === 135 /* AwaitKeyword */) { - const functionDeclaration = findAncestor(node, (n) => isFunctionLikeDeclaration(n)); - const isAsyncFunction2 = functionDeclaration && some(functionDeclaration.modifiers, (node2) => node2.kind === 134 /* AsyncKeyword */); - return isAsyncFunction2 ? [createDefinitionFromSignatureDeclaration(typeChecker, functionDeclaration)] : void 0; - } - if (node.kind === 127 /* YieldKeyword */) { - const functionDeclaration = findAncestor(node, (n) => isFunctionLikeDeclaration(n)); - const isGeneratorFunction = functionDeclaration && functionDeclaration.asteriskToken; - return isGeneratorFunction ? [createDefinitionFromSignatureDeclaration(typeChecker, functionDeclaration)] : void 0; + let findFunctionDecl; + switch (node.kind) { + case 107 /* ReturnKeyword */: + case 135 /* AwaitKeyword */: + case 127 /* YieldKeyword */: + findFunctionDecl = isFunctionLikeDeclaration; + const functionDeclaration = findAncestor(node, findFunctionDecl); + return functionDeclaration ? [createDefinitionFromSignatureDeclaration(typeChecker, functionDeclaration)] : void 0; } if (isStaticModifier(node) && isClassStaticBlockDeclaration(node.parent)) { const classDecl = node.parent.parent; @@ -172987,6 +173837,9 @@ function getDefinitionAtPosition(program, sourceFile, position, searchOtherFiles }]; } } + if (isModifier(node) && (isClassElement(parent2) || isNamedDeclaration(parent2))) { + symbol = parent2.symbol; + } if (!symbol) { return concatenate(fileReferenceDefinition, getDefinitionInfoForIndexSignatures(node, typeChecker)); } @@ -173183,12 +174036,16 @@ function getTypeDefinitionAtPosition(typeChecker, sourceFile, position) { false ); } - const { symbol, failedAliasResolution } = getSymbol( + let { symbol, failedAliasResolution } = getSymbol( node, typeChecker, /*stopAtAlias*/ false ); + if (isModifier(node) && (isClassElement(node.parent) || isNamedDeclaration(node.parent))) { + symbol = node.parent.symbol; + failedAliasResolution = false; + } if (!symbol) return void 0; const typeAtLocation = typeChecker.getTypeOfSymbolAtLocation(symbol, node); const returnType = tryGetReturnTypeOfFunction(symbol, typeAtLocation, typeChecker); @@ -173693,22 +174550,24 @@ function provideInlayHints(context) { if (!signature) { return; } - for (let i = 0; i < node.parameters.length && i < signature.parameters.length; ++i) { - const param = node.parameters[i]; - if (!isHintableDeclaration(param)) { - continue; - } - const effectiveTypeAnnotation = getEffectiveTypeAnnotationNode(param); - if (effectiveTypeAnnotation) { - continue; + let pos = 0; + for (const param of node.parameters) { + if (isHintableDeclaration(param)) { + addParameterTypeHint(param, parameterIsThisKeyword(param) ? signature.thisParameter : signature.parameters[pos]); } - const typeHints = getParameterDeclarationTypeHints(signature.parameters[i]); - if (!typeHints) { + if (parameterIsThisKeyword(param)) { continue; } - addTypeHints(typeHints, param.questionToken ? param.questionToken.end : param.name.end); + pos++; } } + function addParameterTypeHint(node, symbol) { + const effectiveTypeAnnotation = getEffectiveTypeAnnotationNode(node); + if (effectiveTypeAnnotation || symbol === void 0) return; + const typeHints = getParameterDeclarationTypeHints(symbol); + if (typeHints === void 0) return; + addTypeHints(typeHints, node.questionToken ? node.questionToken.end : node.name.end); + } function getParameterDeclarationTypeHints(symbol) { const valueDeclaration = symbol.valueDeclaration; if (!valueDeclaration || !isParameter(valueDeclaration)) { @@ -176874,7 +177733,7 @@ function getSymbolModifiers(typeChecker, symbol) { } return modifiers.size > 0 ? arrayFrom(modifiers.values()).join(",") : "" /* none */; } -function getSymbolDisplayPartsDocumentationAndSymbolKindWorker(typeChecker, symbol, sourceFile, enclosingDeclaration, location, type, semanticMeaning, alias) { +function getSymbolDisplayPartsDocumentationAndSymbolKindWorker(typeChecker, symbol, sourceFile, enclosingDeclaration, location, type, semanticMeaning, alias, verbosityLevel) { var _a; const displayParts = []; let documentation = []; @@ -176886,6 +177745,7 @@ function getSymbolDisplayPartsDocumentationAndSymbolKindWorker(typeChecker, symb let documentationFromAlias; let tagsFromAlias; let hasMultipleSignatures = false; + const typeWriterOut = verbosityLevel !== void 0 ? { couldUnfoldMore: false } : void 0; if (location.kind === 110 /* ThisKeyword */ && !isThisExpression) { return { displayParts: [keywordPart(110 /* ThisKeyword */)], documentation: [], symbolKind: "primitive type" /* primitiveType */, tags: void 0 }; } @@ -177045,7 +177905,17 @@ function getSymbolDisplayPartsDocumentationAndSymbolKindWorker(typeChecker, symb displayParts.push(spacePart()); displayParts.push(operatorPart(64 /* EqualsToken */)); displayParts.push(spacePart()); - addRange(displayParts, typeToDisplayParts(typeChecker, location.parent && isConstTypeReference(location.parent) ? typeChecker.getTypeAtLocation(location.parent) : typeChecker.getDeclaredTypeOfSymbol(symbol), enclosingDeclaration, 8388608 /* InTypeAlias */)); + addRange( + displayParts, + typeToDisplayParts( + typeChecker, + location.parent && isConstTypeReference(location.parent) ? typeChecker.getTypeAtLocation(location.parent) : typeChecker.getDeclaredTypeOfSymbol(symbol), + enclosingDeclaration, + 8388608 /* InTypeAlias */, + verbosityLevel, + typeWriterOut + ) + ); } if (symbolFlags & 384 /* Enum */) { prefixNextMeaning(); @@ -177204,12 +178074,32 @@ function getSymbolDisplayPartsDocumentationAndSymbolKindWorker(typeChecker, symb displayParts.push(spacePart()); if (type.symbol && type.symbol.flags & 262144 /* TypeParameter */ && symbolKind !== "index" /* indexSignatureElement */) { const typeParameterParts = mapToDisplayParts((writer) => { - const param = typeChecker.typeParameterToDeclaration(type, enclosingDeclaration, symbolDisplayNodeBuilderFlags); + const param = typeChecker.typeParameterToDeclaration( + type, + enclosingDeclaration, + symbolDisplayNodeBuilderFlags, + /*internalFlags*/ + void 0, + /*tracker*/ + void 0, + verbosityLevel + ); getPrinter().writeNode(4 /* Unspecified */, param, getSourceFileOfNode(getParseTreeNode(enclosingDeclaration)), writer); }); addRange(displayParts, typeParameterParts); } else { - addRange(displayParts, typeToDisplayParts(typeChecker, type, enclosingDeclaration)); + addRange( + displayParts, + typeToDisplayParts( + typeChecker, + type, + enclosingDeclaration, + /*flags*/ + void 0, + verbosityLevel, + typeWriterOut + ) + ); } if (isTransientSymbol(symbol) && symbol.links.target && isTransientSymbol(symbol.links.target) && symbol.links.target.links.tupleLabelDeclaration) { const labelDecl = symbol.links.target.links.tupleLabelDeclaration; @@ -177274,7 +178164,13 @@ function getSymbolDisplayPartsDocumentationAndSymbolKindWorker(typeChecker, symb if (tags.length === 0 && tagsFromAlias) { tags = tagsFromAlias; } - return { displayParts, documentation, symbolKind, tags: tags.length === 0 ? void 0 : tags }; + return { + displayParts, + documentation, + symbolKind, + tags: tags.length === 0 ? void 0 : tags, + canIncreaseVerbosityLevel: typeWriterOut == null ? void 0 : typeWriterOut.couldUnfoldMore + }; function getPrinter() { return createPrinterWithRemoveComments(); } @@ -177387,7 +178283,7 @@ function getSymbolDisplayPartsDocumentationAndSymbolKindWorker(typeChecker, symb addRange(displayParts, typeParameterParts); } } -function getSymbolDisplayPartsDocumentationAndSymbolKind(typeChecker, symbol, sourceFile, enclosingDeclaration, location, semanticMeaning = getMeaningFromLocation(location), alias) { +function getSymbolDisplayPartsDocumentationAndSymbolKind(typeChecker, symbol, sourceFile, enclosingDeclaration, location, semanticMeaning = getMeaningFromLocation(location), alias, verbosityLevel) { return getSymbolDisplayPartsDocumentationAndSymbolKindWorker( typeChecker, symbol, @@ -177397,7 +178293,8 @@ function getSymbolDisplayPartsDocumentationAndSymbolKind(typeChecker, symbol, so /*type*/ void 0, semanticMeaning, - alias + alias, + verbosityLevel ); } function isLocalVariableOrFunction(symbol) { @@ -182067,6 +182964,7 @@ __export(ts_exports2, { createPrinterWithRemoveCommentsNeverAsciiEscape: () => createPrinterWithRemoveCommentsNeverAsciiEscape, createPrinterWithRemoveCommentsOmitTrailingSemicolon: () => createPrinterWithRemoveCommentsOmitTrailingSemicolon, createProgram: () => createProgram, + createProgramDiagnostics: () => createProgramDiagnostics, createProgramHost: () => createProgramHost, createPropertyNameNodeForIdentifierOrLiteral: () => createPropertyNameNodeForIdentifierOrLiteral, createQueue: () => createQueue, @@ -182236,6 +183134,8 @@ __export(ts_exports2, { forEachLeadingCommentRange: () => forEachLeadingCommentRange, forEachNameInAccessChainWalkingLeft: () => forEachNameInAccessChainWalkingLeft, forEachNameOfDefaultExport: () => forEachNameOfDefaultExport, + forEachOptionsSyntaxByName: () => forEachOptionsSyntaxByName, + forEachProjectReference: () => forEachProjectReference, forEachPropertyAssignment: () => forEachPropertyAssignment, forEachResolvedProjectReference: () => forEachResolvedProjectReference, forEachReturnStatement: () => forEachReturnStatement, @@ -182475,6 +183375,8 @@ __export(ts_exports2, { getLeadingCommentRangesOfNode: () => getLeadingCommentRangesOfNode, getLeftmostAccessExpression: () => getLeftmostAccessExpression, getLeftmostExpression: () => getLeftmostExpression, + getLibFileNameFromLibReference: () => getLibFileNameFromLibReference, + getLibNameFromLibReference: () => getLibNameFromLibReference, getLibraryNameFromLibFileName: () => getLibraryNameFromLibFileName, getLineAndCharacterOfPosition: () => getLineAndCharacterOfPosition, getLineInfo: () => getLineInfo, @@ -182547,6 +183449,8 @@ __export(ts_exports2, { getOptionFromName: () => getOptionFromName, getOptionsForLibraryResolution: () => getOptionsForLibraryResolution, getOptionsNameMap: () => getOptionsNameMap, + getOptionsSyntaxByArrayElementValue: () => getOptionsSyntaxByArrayElementValue, + getOptionsSyntaxByValue: () => getOptionsSyntaxByValue, getOrCreateEmitNode: () => getOrCreateEmitNode, getOrUpdate: () => getOrUpdate, getOriginalNode: () => getOriginalNode, @@ -182583,7 +183487,6 @@ __export(ts_exports2, { getPrivateIdentifier: () => getPrivateIdentifier, getProperties: () => getProperties, getProperty: () => getProperty, - getPropertyArrayElementValue: () => getPropertyArrayElementValue, getPropertyAssignmentAliasLikeExpression: () => getPropertyAssignmentAliasLikeExpression, getPropertyNameForPropertyNameNode: () => getPropertyNameForPropertyNameNode, getPropertyNameFromType: () => getPropertyNameFromType, @@ -183494,6 +184397,7 @@ __export(ts_exports2, { moduleResolutionUsesNodeModules: () => moduleResolutionUsesNodeModules, moduleSpecifierToValidIdentifier: () => moduleSpecifierToValidIdentifier, moduleSpecifiers: () => ts_moduleSpecifiers_exports, + moduleSupportsImportAttributes: () => moduleSupportsImportAttributes, moduleSymbolToValidIdentifier: () => moduleSymbolToValidIdentifier, moveEmitHelpers: () => moveEmitHelpers, moveRangeEnd: () => moveRangeEnd, @@ -184868,6 +185772,7 @@ var ModuleKind2 = /* @__PURE__ */ ((ModuleKind3) => { ModuleKind3["ES2022"] = "es2022"; ModuleKind3["ESNext"] = "esnext"; ModuleKind3["Node16"] = "node16"; + ModuleKind3["Node18"] = "node18"; ModuleKind3["NodeNext"] = "nodenext"; ModuleKind3["Preserve"] = "preserve"; return ModuleKind3; @@ -194339,7 +195244,7 @@ Project '${project.projectName}' (${ProjectKind[project.projectKind]}) ${counter getQuickInfoWorker(args, simplifiedResult) { const { file, project } = this.getFileAndProject(args); const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file); - const quickInfo = project.getLanguageService().getQuickInfoAtPosition(file, this.getPosition(args, scriptInfo)); + const quickInfo = project.getLanguageService().getQuickInfoAtPosition(file, this.getPosition(args, scriptInfo), args.verbosityLevel); if (!quickInfo) { return void 0; } @@ -194353,7 +195258,8 @@ Project '${project.projectName}' (${ProjectKind[project.projectKind]}) ${counter end: scriptInfo.positionToLineOffset(textSpanEnd(quickInfo.textSpan)), displayString, documentation: useDisplayParts ? this.mapDisplayParts(quickInfo.documentation, project) : displayPartsToString(quickInfo.documentation), - tags: this.mapJSDocTagInfo(quickInfo.tags, project, useDisplayParts) + tags: this.mapJSDocTagInfo(quickInfo.tags, project, useDisplayParts), + canIncreaseVerbosityLevel: quickInfo.canIncreaseVerbosityLevel }; } else { return useDisplayParts ? quickInfo : { @@ -194897,20 +195803,19 @@ Project '${project.projectName}' (${ProjectKind[project.projectKind]}) ${counter try { codeActions = project.getLanguageService().getCodeFixesAtPosition(file, startPosition, endPosition, args.errorCodes, this.getFormatOptions(file), this.getPreferences(file)); } catch (e) { + const error2 = e instanceof Error ? e : new Error(e); const ls = project.getLanguageService(); const existingDiagCodes = [ ...ls.getSyntacticDiagnostics(file), ...ls.getSemanticDiagnostics(file), ...ls.getSuggestionDiagnostics(file) - ].map( - (d) => decodedTextSpanIntersectsWith(startPosition, endPosition - startPosition, d.start, d.length) && d.code - ); + ].filter((d) => decodedTextSpanIntersectsWith(startPosition, endPosition - startPosition, d.start, d.length)).map((d) => d.code); const badCode = args.errorCodes.find((c) => !existingDiagCodes.includes(c)); if (badCode !== void 0) { - e.message = `BADCLIENT: Bad error code, ${badCode} not found in range ${startPosition}..${endPosition} (found: ${existingDiagCodes.join(", ")}); could have caused this error: -${e.message}`; + error2.message += ` +Additional information: BADCLIENT: Bad error code, ${badCode} not found in range ${startPosition}..${endPosition} (found: ${existingDiagCodes.join(", ")})`; } - throw e; + throw error2; } return simplifiedResult ? codeActions.map((codeAction) => this.mapCodeFixAction(codeAction)) : codeActions; } @@ -196813,6 +197718,7 @@ if (typeof console !== "undefined") { createPrinterWithRemoveCommentsNeverAsciiEscape, createPrinterWithRemoveCommentsOmitTrailingSemicolon, createProgram, + createProgramDiagnostics, createProgramHost, createPropertyNameNodeForIdentifierOrLiteral, createQueue, @@ -196982,6 +197888,8 @@ if (typeof console !== "undefined") { forEachLeadingCommentRange, forEachNameInAccessChainWalkingLeft, forEachNameOfDefaultExport, + forEachOptionsSyntaxByName, + forEachProjectReference, forEachPropertyAssignment, forEachResolvedProjectReference, forEachReturnStatement, @@ -197221,6 +198129,8 @@ if (typeof console !== "undefined") { getLeadingCommentRangesOfNode, getLeftmostAccessExpression, getLeftmostExpression, + getLibFileNameFromLibReference, + getLibNameFromLibReference, getLibraryNameFromLibFileName, getLineAndCharacterOfPosition, getLineInfo, @@ -197293,6 +198203,8 @@ if (typeof console !== "undefined") { getOptionFromName, getOptionsForLibraryResolution, getOptionsNameMap, + getOptionsSyntaxByArrayElementValue, + getOptionsSyntaxByValue, getOrCreateEmitNode, getOrUpdate, getOriginalNode, @@ -197329,7 +198241,6 @@ if (typeof console !== "undefined") { getPrivateIdentifier, getProperties, getProperty, - getPropertyArrayElementValue, getPropertyAssignmentAliasLikeExpression, getPropertyNameForPropertyNameNode, getPropertyNameFromType, @@ -198240,6 +199151,7 @@ if (typeof console !== "undefined") { moduleResolutionUsesNodeModules, moduleSpecifierToValidIdentifier, moduleSpecifiers, + moduleSupportsImportAttributes, moduleSymbolToValidIdentifier, moveEmitHelpers, moveRangeEnd, diff --git a/packages/schematics/angular/utility/dependency.ts b/packages/schematics/angular/utility/dependency.ts index a5a1bdc5b5d8..2f3501c33a84 100644 --- a/packages/schematics/angular/utility/dependency.ts +++ b/packages/schematics/angular/utility/dependency.ts @@ -8,7 +8,7 @@ import { Rule, SchematicContext } from '@angular-devkit/schematics'; import { NodePackageInstallTask } from '@angular-devkit/schematics/tasks'; -import * as path from 'path'; +import * as path from 'node:path'; const installTasks = new WeakMap<SchematicContext, Set<string>>(); diff --git a/packages/schematics/angular/utility/latest-versions.ts b/packages/schematics/angular/utility/latest-versions.ts index 38a7cb2cbb13..654eda74bc4f 100644 --- a/packages/schematics/angular/utility/latest-versions.ts +++ b/packages/schematics/angular/utility/latest-versions.ts @@ -15,12 +15,13 @@ export const latestVersions: Record<string, string> & { DevkitBuildAngular: string; AngularBuild: string; AngularSSR: string; + NgPackagr: string; } = { ...dependencies, // As Angular CLI works with same minor versions of Angular Framework, a tilde match for the current - Angular: dependencies['@angular/core'], - + Angular: '0.0.0-ANGULAR-FW-VERSION', + NgPackagr: '0.0.0-NG-PACKAGR-VERSION', DevkitBuildAngular: '^0.0.0-PLACEHOLDER', AngularBuild: '^0.0.0-PLACEHOLDER', AngularSSR: '^0.0.0-PLACEHOLDER', diff --git a/packages/schematics/angular/utility/latest-versions/package.json b/packages/schematics/angular/utility/latest-versions/package.json index a75aa42c3d6c..352dfbdec9a8 100644 --- a/packages/schematics/angular/utility/latest-versions/package.json +++ b/packages/schematics/angular/utility/latest-versions/package.json @@ -3,13 +3,12 @@ "comment": "This file is needed so that dependencies are synced by Renovate.", "private": true, "dependencies": { - "@angular/core": "^19.1.0-next.0", "@types/express": "^4.17.17", "@types/jasmine": "~5.1.0", "@types/node": "^18.18.0", "browser-sync": "^3.0.0", "express": "^4.18.2", - "jasmine-core": "~5.5.0", + "jasmine-core": "~5.6.0", "jasmine-spec-reporter": "~7.0.0", "karma-chrome-launcher": "~3.2.0", "karma-coverage": "~2.2.0", @@ -17,7 +16,6 @@ "karma-jasmine": "~5.1.0", "karma": "~6.4.0", "less": "^4.2.0", - "ng-packagr": "^19.1.0-next.0", "postcss": "^8.4.38", "protractor": "~7.0.0", "rxjs": "~7.8.0", diff --git a/packages/schematics/angular/utility/standalone/app_config.ts b/packages/schematics/angular/utility/standalone/app_config.ts index 1e218a9cf367..67835a1f03d1 100644 --- a/packages/schematics/angular/utility/standalone/app_config.ts +++ b/packages/schematics/angular/utility/standalone/app_config.ts @@ -7,7 +7,7 @@ */ import { Tree } from '@angular-devkit/schematics'; -import { dirname, join } from 'path'; +import { dirname, join } from 'node:path'; import ts from '../../third_party/github.com/Microsoft/TypeScript/lib/typescript'; import { getSourceFile } from './util'; diff --git a/packages/schematics/angular/utility/standalone/rules_spec.ts b/packages/schematics/angular/utility/standalone/rules_spec.ts index 6492c954aa4c..0eed95662e2b 100644 --- a/packages/schematics/angular/utility/standalone/rules_spec.ts +++ b/packages/schematics/angular/utility/standalone/rules_spec.ts @@ -8,7 +8,7 @@ import { Rule, SchematicContext, Tree, callRule } from '@angular-devkit/schematics'; import { SchematicTestRunner } from '@angular-devkit/schematics/testing'; -import { join } from 'path'; +import { join } from 'node:path'; import { addRootImport, addRootProvider } from './rules'; describe('standalone utilities', () => { diff --git a/packages/schematics/angular/utility/workspace-models.ts b/packages/schematics/angular/utility/workspace-models.ts index fd7eaf4d60f4..34c329b470d1 100644 --- a/packages/schematics/angular/utility/workspace-models.ts +++ b/packages/schematics/angular/utility/workspace-models.ts @@ -26,11 +26,14 @@ export enum Builders { Prerender = '@angular-devkit/build-angular:prerender', BrowserEsbuild = '@angular-devkit/build-angular:browser-esbuild', Karma = '@angular-devkit/build-angular:karma', + BuildKarma = '@angular/build:karma', TsLint = '@angular-devkit/build-angular:tslint', NgPackagr = '@angular-devkit/build-angular:ng-packagr', BuildNgPackagr = '@angular/build:ng-packagr', DevServer = '@angular-devkit/build-angular:dev-server', + BuildDevServer = '@angular/build:dev-server', ExtractI18n = '@angular-devkit/build-angular:extract-i18n', + BuildExtractI18n = '@angular/build:extract-i18n', Protractor = '@angular-devkit/build-angular:private-protractor', BuildApplication = '@angular/build:application', } diff --git a/packages/schematics/angular/web-worker/schema.json b/packages/schematics/angular/web-worker/schema.json index 2e00bcbf225b..e2b5977d21cf 100644 --- a/packages/schematics/angular/web-worker/schema.json +++ b/packages/schematics/angular/web-worker/schema.json @@ -4,7 +4,7 @@ "title": "Angular Web Worker Options Schema", "type": "object", "additionalProperties": false, - "description": "Creates a new, generic web worker definition in the given project.", + "description": "Creates a new web worker in your project. Web workers allow you to run JavaScript code in the background, improving the performance and responsiveness of your application by offloading computationally intensive tasks. This schematic generates the necessary files for a new web worker and provides an optional code snippet to demonstrate its usage.", "properties": { "path": { "type": "string", @@ -12,19 +12,19 @@ "$default": { "$source": "workingDirectory" }, - "description": "The path at which to create the worker file, relative to the current workspace.", + "description": "The path where the web worker file should be created, relative to the current workspace. If not specified, the worker will be created in the current directory.", "visible": false }, "project": { "type": "string", - "description": "The name of the project.", + "description": "The name of the project where the web worker should be created. If not specified, the CLI will determine the project from the current directory.", "$default": { "$source": "projectName" } }, "name": { "type": "string", - "description": "The name of the worker.", + "description": "The name for the new web worker. This will be used to create the worker file (e.g., `my-worker.worker.ts`).", "$default": { "$source": "argv", "index": 0 @@ -34,7 +34,7 @@ "snippet": { "type": "boolean", "default": true, - "description": "Add a worker creation snippet in a sibling file of the same name." + "description": "Generate a code snippet that demonstrates how to create and use the new web worker." } }, "required": ["name", "project"] diff --git a/packages/schematics/angular/workspace/files/package.json.template b/packages/schematics/angular/workspace/files/package.json.template index dcf46e890396..51468a39dd08 100644 --- a/packages/schematics/angular/workspace/files/package.json.template +++ b/packages/schematics/angular/workspace/files/package.json.template @@ -10,7 +10,6 @@ }, "private": true, "dependencies": { - "@angular/animations": "<%= latestVersions.Angular %>", "@angular/common": "<%= latestVersions.Angular %>", "@angular/compiler": "<%= latestVersions.Angular %>", "@angular/core": "<%= latestVersions.Angular %>", diff --git a/packages/schematics/angular/workspace/schema.json b/packages/schematics/angular/workspace/schema.json index 0b4240fe05cb..cd09b5d870c0 100644 --- a/packages/schematics/angular/workspace/schema.json +++ b/packages/schematics/angular/workspace/schema.json @@ -2,12 +2,12 @@ "$schema": "http://json-schema.org/draft-07/schema", "$id": "SchematicsAngularWorkspace", "title": "Angular Workspace Options Schema", - "description": "Initializes an empty workspace and adds the necessary dependencies required by an Angular application.", + "description": "Creates a new Angular workspace. A workspace provides a structured environment for developing multiple projects, allowing you to manage dependencies, configurations, and build processes for a collection of applications and libraries. This schematic sets up the basic structure of the workspace and installs the necessary Angular dependencies.", "type": "object", "additionalProperties": false, "properties": { "name": { - "description": "The name of the workspace.", + "description": "The name for the new workspace. This name will be used for the root directory and will be referenced in various configuration files.", "type": "string", "$default": { "$source": "argv", @@ -15,7 +15,7 @@ } }, "newProjectRoot": { - "description": "The path where new projects will be created.", + "description": "The path where new projects will be created within the workspace, relative to the workspace root. By default, new projects are created in the `projects` directory.", "type": "string", "visible": "false" }, @@ -28,17 +28,17 @@ } }, "minimal": { - "description": "Create a workspace without any testing frameworks. (Use for learning purposes only.)", + "description": "Create a workspace without any testing frameworks. This is intended for learning purposes and simple experimentation, not for production applications.", "type": "boolean", "default": false }, "strict": { - "description": "Create a workspace with stricter type checking options. This setting helps improve maintainability and catch bugs ahead of time. For more information, see https://angular.dev/tools/cli/template-typecheck#strict-mode", + "description": "Enable stricter type checking and bundle budget settings for projects created within the workspace. This helps improve maintainability and catch bugs early on. For more information, see https://angular.dev/tools/cli/template-typecheck#strict-mode", "type": "boolean", "default": true }, "packageManager": { - "description": "The package manager used to install dependencies.", + "description": "The package manager to use for installing dependencies.", "type": "string", "enum": ["npm", "yarn", "pnpm", "cnpm", "bun"] } diff --git a/patches/@angular+bazel+19.1.0-next.4.patch b/patches/@angular+bazel+19.1.0-next.4.patch deleted file mode 100644 index 1f08cfc5b83a..000000000000 --- a/patches/@angular+bazel+19.1.0-next.4.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/node_modules/@angular/bazel/src/ng_package/packager.mjs b/node_modules/@angular/bazel/src/ng_package/packager.mjs -index 7184fd910a6ecaa817d5078a1fb17f78aee9113b..ef3e508cfa8f309ca298a21c0546bba60fae095c 100755 ---- a/node_modules/@angular/bazel/src/ng_package/packager.mjs -+++ b/node_modules/@angular/bazel/src/ng_package/packager.mjs -@@ -7,7 +7,7 @@ - */ - import * as fs from 'fs'; - import * as path from 'path'; --import { analyzeFileAndEnsureNoCrossImports } from './cross_entry_points_imports'; -+import { analyzeFileAndEnsureNoCrossImports } from './cross_entry_points_imports.mjs'; - /** - * List of known `package.json` fields which provide information about - * supported package formats and their associated entry paths. diff --git a/patches/@bazel+concatjs+5.8.1.patch b/patches/@bazel+concatjs+5.8.1.patch deleted file mode 100644 index c69e168c0c39..000000000000 --- a/patches/@bazel+concatjs+5.8.1.patch +++ /dev/null @@ -1,69 +0,0 @@ -diff --git a/node_modules/@bazel/concatjs/internal/build_defs.bzl b/node_modules/@bazel/concatjs/internal/build_defs.bzl -index 9e5cda684f0456b61d1b6c0f9c56ae021594713f..6c45196bda5880531d32618dfca0dee44c035cb9 100755 ---- a/node_modules/@bazel/concatjs/internal/build_defs.bzl -+++ b/node_modules/@bazel/concatjs/internal/build_defs.bzl -@@ -76,7 +76,7 @@ _TYPESCRIPT_TYPINGS = Label( - "//typescript:typescript__typings", - ) - --_TYPESCRIPT_SCRIPT_TARGETS = ["es3", "es5", "es2015", "es2016", "es2017", "es2018", "es2019", "es2020", "esnext"] -+_TYPESCRIPT_SCRIPT_TARGETS = ["es3", "es5", "es2015", "es2016", "es2017", "es2018", "es2019", "es2020", "es2022", "esnext"] - _TYPESCRIPT_MODULE_KINDS = ["none", "commonjs", "amd", "umd", "system", "es2015", "esnext"] - - _DEVMODE_TARGET_DEFAULT = "es2015" -diff --git a/node_modules/@bazel/concatjs/internal/common/tsconfig.bzl b/node_modules/@bazel/concatjs/internal/common/tsconfig.bzl -index b01c999f5e02b388f51a508b0b608cf69db9b664..847c23fe4829d0c847e9b4bd1ad698e1ccea720e 100755 ---- a/node_modules/@bazel/concatjs/internal/common/tsconfig.bzl -+++ b/node_modules/@bazel/concatjs/internal/common/tsconfig.bzl -@@ -211,9 +211,6 @@ def create_tsconfig( - # will convert that to goog.module syntax. - "module": "umd" if devmode_manifest or has_node_runtime else "esnext", - -- # Has no effect in closure/ES2015 mode. Always true just for simplicity. -- "downlevelIteration": True, -- - # Do not type-check the lib.*.d.ts. - # We think this shouldn't be necessary but haven't figured out why yet - # and builds are faster with the setting on. -@@ -248,13 +245,6 @@ def create_tsconfig( - # "short name" mappings for npm packages, such as "@angular/core" - "paths": mapped_module_roots, - -- # Inline const enums. -- "preserveConstEnums": False, -- -- # permit `@Decorator` syntax and allow runtime reflection on their types. -- "experimentalDecorators": True, -- "emitDecoratorMetadata": True, -- - # Interpret JSX as React calls (until someone asks for something different) - "jsx": "react", - -@@ -277,12 +267,6 @@ def create_tsconfig( - # always emit declaration files in the same location as outDir. - "declarationDir": "/".join([workspace_path, outdir_path]), - "stripInternal": True, -- -- # Embed source maps and sources in .js outputs -- "inlineSourceMap": True, -- "inlineSources": True, -- # Implied by inlineSourceMap: True -- "sourceMap": False, - } - - # "node_modules" still checked for backward compat for ng_module -diff --git a/node_modules/@bazel/concatjs/internal/tsetse/rules/must_use_promises_rule.js b/node_modules/@bazel/concatjs/internal/tsetse/rules/must_use_promises_rule.js -index e404d01cf80ab4da4b9cca89005b14a60b7d8c79..85488d9a339982af4495d2b5f4c30effb98a538b 100755 ---- a/node_modules/@bazel/concatjs/internal/tsetse/rules/must_use_promises_rule.js -+++ b/node_modules/@bazel/concatjs/internal/tsetse/rules/must_use_promises_rule.js -@@ -30,6 +30,10 @@ function checkCallExpression(checker, node) { - if (tsutils.isExpressionValueUsed(node) || !inAsyncFunction(node)) { - return; - } -+ // Sync behavior with @typescript-eslint/no-floating-promises -+ if (node.parent && ts.isVoidExpression(node.parent)) { -+ return; -+ } - if (tsutils.isThenableType(checker.typeChecker, node)) { - checker.addFailureAtNode(node, FAILURE_STRING); - } diff --git a/patches/@bazel+jasmine+5.8.1.patch b/patches/@bazel+jasmine+5.8.1.patch deleted file mode 100644 index 264506e30fe0..000000000000 --- a/patches/@bazel+jasmine+5.8.1.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/node_modules/@bazel/jasmine/jasmine_runner.js b/node_modules/@bazel/jasmine/jasmine_runner.js -index 097eb920357f5f02e5b6592e0e4be27c0b4bf25d..bd55c2dad833b32a9e644fed8c7d6b626cd01128 100755 ---- a/node_modules/@bazel/jasmine/jasmine_runner.js -+++ b/node_modules/@bazel/jasmine/jasmine_runner.js -@@ -147,7 +147,7 @@ async function main(args) { - // TODO(6.0): remove support for deprecated versions of Jasmine that use the old API & - // remember to update the `peerDependencies` as well. - // Jasmine versions prior to 4.0.0 should use the old API. -- if (jrunner.coreVersion().charAt(0) !== '4') { -+ if (+jrunner.coreVersion().charAt(0) < 4) { - console.warn(`DEPRECATED: Support for Jasmine versions prior to '4.0.x' is deprecated in '@bazel/jasmine'.`); - - // Old Jasmine API. diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d6eb69d7ca16..96aadb95032e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,13 +1,14 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: - autoInstallPeers: true + autoInstallPeers: false excludeLinksFromLockfile: false -onlyBuiltDependencies: [] - overrides: - typescript: 5.7.2 + typescript: 5.8.1-rc + '@angular/build': workspace:* + +packageExtensionsChecksum: ea5f588691095a73da0f9364791a5f26 importers: @@ -17,62 +18,59 @@ importers: specifier: 2.3.0 version: 2.3.0 '@angular/animations': - specifier: 19.1.0-rc.0 - version: 19.1.0-rc.0(@angular/core@19.1.0-rc.0) - '@angular/bazel': - specifier: https://github.com/angular/bazel-builds.git#169e71f64fa706648c60d77abb8d4cab1ca22f55 - version: github.com/angular/bazel-builds/169e71f64fa706648c60d77abb8d4cab1ca22f55(@angular/compiler-cli@19.1.0-rc.0)(@bazel/concatjs@5.8.1)(@bazel/worker@5.8.1)(@rollup/plugin-commonjs@28.0.2)(@rollup/plugin-node-resolve@13.3.0)(@types/node@18.19.70)(rollup-plugin-sourcemaps@0.6.3)(rollup@4.30.1)(terser@5.37.0)(typescript@5.7.2) + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)) '@angular/build-tooling': - specifier: https://github.com/angular/dev-infra-private-build-tooling-builds.git#67627d22c2fef6e3cb128f65723e19eb35e02eaa - version: github.com/angular/dev-infra-private-build-tooling-builds/67627d22c2fef6e3cb128f65723e19eb35e02eaa(@angular/compiler-cli@19.1.0-rc.0)(@angular/compiler@19.1.0-rc.0)(@angular/localize@19.1.0-rc.0)(@angular/platform-server@19.1.0-rc.0)(@angular/service-worker@19.1.0-rc.0)(chokidar@4.0.3)(debug@4.4.0)(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-junit-reporter@2.0.1)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(less@4.2.1)(postcss@8.4.49)(rxjs@7.8.1)(terser@5.37.0)(zone.js@0.15.0) + specifier: https://github.com/angular/dev-infra-private-build-tooling-builds.git#d4727212a9d0f7eb63ae3116d73c769d9bd0bdc1 + version: https://codeload.github.com/angular/dev-infra-private-build-tooling-builds/tar.gz/d4727212a9d0f7eb63ae3116d73c769d9bd0bdc1(debug@4.4.0)(karma-chrome-launcher@3.2.0)(karma-jasmine@5.1.0(karma@6.4.4(debug@4.4.0)))(karma@6.4.4(debug@4.4.0))(rxjs@7.8.1)(terser@5.39.0)(zone.js@0.15.0) '@angular/cdk': - specifier: 19.1.0-next.3 - version: 19.1.0-next.3(@angular/common@19.1.0-rc.0)(@angular/core@19.1.0-rc.0)(rxjs@7.8.1) + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1) '@angular/common': - specifier: 19.1.0-rc.0 - version: 19.1.0-rc.0(@angular/core@19.1.0-rc.0)(rxjs@7.8.1) + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1) '@angular/compiler': - specifier: 19.1.0-rc.0 - version: 19.1.0-rc.0(@angular/core@19.1.0-rc.0) + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)) '@angular/compiler-cli': - specifier: 19.1.0-rc.0 - version: 19.1.0-rc.0(@angular/compiler@19.1.0-rc.0)(typescript@5.7.2) + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(@angular/compiler@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.1-rc) '@angular/core': - specifier: 19.1.0-rc.0 - version: 19.1.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) '@angular/forms': - specifier: 19.1.0-rc.0 - version: 19.1.0-rc.0(@angular/common@19.1.0-rc.0)(@angular/core@19.1.0-rc.0)(@angular/platform-browser@19.1.0-rc.0)(rxjs@7.8.1) + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(@angular/platform-browser@19.2.0-rc.0(@angular/animations@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(rxjs@7.8.1) '@angular/localize': - specifier: 19.1.0-rc.0 - version: 19.1.0-rc.0(@angular/compiler-cli@19.1.0-rc.0)(@angular/compiler@19.1.0-rc.0) + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(@angular/compiler-cli@19.2.0-rc.0(@angular/compiler@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.1-rc))(@angular/compiler@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))) '@angular/material': - specifier: 19.1.0-next.3 - version: 19.1.0-next.3(@angular/animations@19.1.0-rc.0)(@angular/cdk@19.1.0-next.3)(@angular/common@19.1.0-rc.0)(@angular/core@19.1.0-rc.0)(@angular/forms@19.1.0-rc.0)(@angular/platform-browser@19.1.0-rc.0)(rxjs@7.8.1) + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(jieetpysohtsqwbmsmxuwuxddy) '@angular/ng-dev': - specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#ff93dd98d8d10bfab0f94495fe631485a6a772e1 - version: github.com/angular/dev-infra-private-ng-dev-builds/ff93dd98d8d10bfab0f94495fe631485a6a772e1 + specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#252589f7bc8fe6ca13b31e02d506ec52e826cdd2 + version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/252589f7bc8fe6ca13b31e02d506ec52e826cdd2(encoding@0.1.13) '@angular/platform-browser': - specifier: 19.1.0-rc.0 - version: 19.1.0-rc.0(@angular/animations@19.1.0-rc.0)(@angular/common@19.1.0-rc.0)(@angular/core@19.1.0-rc.0) + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(@angular/animations@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)) '@angular/platform-browser-dynamic': - specifier: 19.1.0-rc.0 - version: 19.1.0-rc.0(@angular/common@19.1.0-rc.0)(@angular/compiler@19.1.0-rc.0)(@angular/core@19.1.0-rc.0)(@angular/platform-browser@19.1.0-rc.0) + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/compiler@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(@angular/platform-browser@19.2.0-rc.0(@angular/animations@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))) '@angular/platform-server': - specifier: 19.1.0-rc.0 - version: 19.1.0-rc.0(@angular/animations@19.1.0-rc.0)(@angular/common@19.1.0-rc.0)(@angular/compiler@19.1.0-rc.0)(@angular/core@19.1.0-rc.0)(@angular/platform-browser@19.1.0-rc.0) + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/compiler@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(@angular/platform-browser@19.2.0-rc.0(@angular/animations@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(rxjs@7.8.1) '@angular/router': - specifier: 19.1.0-rc.0 - version: 19.1.0-rc.0(@angular/common@19.1.0-rc.0)(@angular/core@19.1.0-rc.0)(@angular/platform-browser@19.1.0-rc.0)(rxjs@7.8.1) + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(@angular/platform-browser@19.2.0-rc.0(@angular/animations@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(rxjs@7.8.1) '@angular/service-worker': - specifier: 19.1.0-rc.0 - version: 19.1.0-rc.0(@angular/common@19.1.0-rc.0)(@angular/core@19.1.0-rc.0) + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1) '@babel/core': - specifier: 7.26.0 - version: 7.26.0 + specifier: 7.26.10 + version: 7.26.10 '@babel/generator': - specifier: 7.26.3 - version: 7.26.3 + specifier: 7.26.10 + version: 7.26.10 '@babel/helper-annotate-as-pure': specifier: 7.25.9 version: 7.25.9 @@ -81,64 +79,52 @@ importers: version: 7.24.7 '@babel/plugin-syntax-import-attributes': specifier: 7.26.0 - version: 7.26.0(@babel/core@7.26.0) + version: 7.26.0(@babel/core@7.26.10) '@babel/plugin-transform-async-generator-functions': - specifier: 7.25.9 - version: 7.25.9(@babel/core@7.26.0) + specifier: 7.26.8 + version: 7.26.8(@babel/core@7.26.10) '@babel/plugin-transform-async-to-generator': specifier: 7.25.9 - version: 7.25.9(@babel/core@7.26.0) + version: 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-runtime': - specifier: 7.25.9 - version: 7.25.9(@babel/core@7.26.0) + specifier: 7.26.10 + version: 7.26.10(@babel/core@7.26.10) '@babel/preset-env': - specifier: 7.26.0 - version: 7.26.0(@babel/core@7.26.0) + specifier: 7.26.9 + version: 7.26.9(@babel/core@7.26.10) '@babel/runtime': - specifier: 7.26.0 - version: 7.26.0 + specifier: 7.26.10 + version: 7.26.10 '@bazel/bazelisk': specifier: 1.25.0 version: 1.25.0 '@bazel/buildifier': - specifier: 7.3.1 - version: 7.3.1 - '@bazel/concatjs': - specifier: 5.8.1 - version: 5.8.1(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-junit-reporter@2.0.1)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(typescript@5.7.2) - '@bazel/jasmine': - specifier: 5.8.1 - version: 5.8.1(jasmine-core@5.5.0)(jasmine@5.5.0) - '@bazel/rollup': - specifier: ^5.8.1 - version: 5.8.1(rollup@4.30.1) - '@bazel/runfiles': - specifier: ^5.8.1 - version: 5.8.1 + specifier: 8.0.3 + version: 8.0.3 '@discoveryjs/json-ext': specifier: 0.6.3 version: 0.6.3 - '@inquirer/confirm': - specifier: 5.1.1 - version: 5.1.1(@types/node@18.19.70) '@inquirer/prompts': - specifier: 7.2.1 - version: 7.2.1(@types/node@18.19.70) + specifier: 7.3.2 + version: 7.3.2(@types/node@18.19.76) '@listr2/prompt-adapter-inquirer': specifier: 2.0.18 - version: 2.0.18(@inquirer/prompts@7.2.1) + version: 2.0.18(@inquirer/prompts@7.3.2(@types/node@18.19.76)) '@rollup/plugin-alias': specifier: ^5.1.1 - version: 5.1.1(rollup@4.30.1) + version: 5.1.1(rollup@4.34.8) '@rollup/plugin-commonjs': specifier: ^28.0.0 - version: 28.0.2(rollup@4.30.1) + version: 28.0.3(rollup@4.34.8) + '@rollup/plugin-json': + specifier: ^6.1.0 + version: 6.1.0(rollup@4.34.8) '@rollup/plugin-node-resolve': specifier: ^13.0.5 - version: 13.3.0(rollup@4.30.1) + version: 13.3.0(rollup@4.34.8) '@stylistic/eslint-plugin': - specifier: ^2.8.0 - version: 2.12.1(eslint@8.57.0)(typescript@5.7.2) + specifier: ^3.0.0 + version: 3.1.0(eslint@8.57.0)(typescript@5.8.1-rc) '@types/babel__core': specifier: 7.20.5 version: 7.20.5 @@ -153,28 +139,31 @@ importers: version: 4.17.21 '@types/http-proxy': specifier: ^1.17.4 - version: 1.17.15 + version: 1.17.16 '@types/ini': specifier: ^4.0.0 version: 4.1.1 '@types/jasmine': specifier: ~5.1.0 - version: 5.1.5 + version: 5.1.7 + '@types/jasmine-reporters': + specifier: ^2 + version: 2.5.3 '@types/karma': specifier: ^6.3.0 version: 6.3.9 '@types/less': specifier: ^3.0.3 - version: 3.0.7 + version: 3.0.8 '@types/loader-utils': specifier: ^2.0.0 version: 2.0.6 '@types/lodash': specifier: ^4.17.0 - version: 4.17.14 + version: 4.17.16 '@types/node': - specifier: ^18.13.0 - version: 18.19.70 + specifier: 18.19.76 + version: 18.19.76 '@types/npm-package-arg': specifier: ^6.1.0 version: 6.1.4 @@ -183,7 +172,7 @@ importers: version: 11.1.8 '@types/picomatch': specifier: ^3.0.0 - version: 3.0.1 + version: 3.0.2 '@types/progress': specifier: ^2.0.3 version: 2.0.7 @@ -209,17 +198,17 @@ importers: specifier: ^1.1.5 version: 1.1.9 '@typescript-eslint/eslint-plugin': - specifier: 8.19.1 - version: 8.19.1(@typescript-eslint/parser@8.19.1)(eslint@8.57.0)(typescript@5.7.2) + specifier: 8.24.1 + version: 8.24.1(@typescript-eslint/parser@8.24.1(eslint@8.57.0)(typescript@5.8.1-rc))(eslint@8.57.0)(typescript@5.8.1-rc) '@typescript-eslint/parser': - specifier: 8.19.1 - version: 8.19.1(eslint@8.57.0)(typescript@5.7.2) + specifier: 8.24.1 + version: 8.24.1(eslint@8.57.0)(typescript@5.8.1-rc) '@vitejs/plugin-basic-ssl': specifier: 1.2.0 - version: 1.2.0(vite@6.0.7) + version: 1.2.0(vite@6.2.3(@types/node@18.19.76)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) '@web/test-runner': - specifier: ^0.19.0 - version: 0.19.0 + specifier: ^0.20.0 + version: 0.20.0 '@yarnpkg/lockfile': specifier: 1.1.0 version: 1.1.0 @@ -234,10 +223,10 @@ importers: version: 4.1.3 autoprefixer: specifier: 10.4.20 - version: 10.4.20(postcss@8.4.49) + version: 10.4.20(postcss@8.5.2) babel-loader: specifier: 9.2.1 - version: 9.2.1(@babel/core@7.26.0)(webpack@5.97.1) + version: 9.2.1(@babel/core@7.26.10)(webpack@5.98.0(esbuild@0.25.1)) beasties: specifier: 0.2.0 version: 0.2.0 @@ -246,7 +235,7 @@ importers: version: 3.0.3(debug@4.4.0) browserslist: specifier: ^4.21.5 - version: 4.24.3 + version: 4.24.4 buffer: specifier: 6.0.3 version: 6.0.3 @@ -255,31 +244,31 @@ importers: version: 4.0.3 copy-webpack-plugin: specifier: 12.0.2 - version: 12.0.2(webpack@5.97.1) + version: 12.0.2(webpack@5.98.0(esbuild@0.25.1)) css-loader: specifier: 7.1.2 - version: 7.1.2(webpack@5.97.1) + version: 7.1.2(webpack@5.98.0(esbuild@0.25.1)) debug: specifier: ^4.1.1 version: 4.4.0(supports-color@10.0.0) esbuild: - specifier: 0.24.2 - version: 0.24.2 + specifier: 0.25.1 + version: 0.25.1 esbuild-wasm: - specifier: 0.24.2 - version: 0.24.2 + specifier: 0.25.1 + version: 0.25.1 eslint: specifier: 8.57.0 version: 8.57.0 eslint-config-prettier: - specifier: 9.1.0 - version: 9.1.0(eslint@8.57.0) + specifier: 10.0.1 + version: 10.0.1(eslint@8.57.0) eslint-plugin-header: specifier: 3.1.1 version: 3.1.1(eslint@8.57.0) eslint-plugin-import: specifier: 2.31.0 - version: 2.31.0(@typescript-eslint/parser@8.19.1)(eslint@8.57.0) + version: 2.31.0(@typescript-eslint/parser@8.24.1(eslint@8.57.0)(typescript@5.8.1-rc))(eslint@8.57.0) express: specifier: 4.21.2 version: 4.21.2 @@ -305,11 +294,14 @@ importers: specifier: 6.0.3 version: 6.0.3 jasmine: - specifier: ^5.0.0 - version: 5.5.0 + specifier: ~5.6.0 + version: 5.6.0 jasmine-core: - specifier: ~5.5.0 - version: 5.5.0 + specifier: ~5.6.0 + version: 5.6.0 + jasmine-reporters: + specifier: ^2.5.2 + version: 2.5.2 jasmine-spec-reporter: specifier: ~7.0.0 version: 7.0.0 @@ -327,28 +319,28 @@ importers: version: 2.2.1 karma-jasmine: specifier: ~5.1.0 - version: 5.1.0(karma@6.4.4) + version: 5.1.0(karma@6.4.4(debug@4.4.0)) karma-jasmine-html-reporter: specifier: ~2.1.0 - version: 2.1.0(jasmine-core@5.5.0)(karma-jasmine@5.1.0)(karma@6.4.4) + version: 2.1.0(jasmine-core@5.6.0)(karma-jasmine@5.1.0(karma@6.4.4(debug@4.4.0)))(karma@6.4.4(debug@4.4.0)) karma-source-map-support: specifier: 1.4.0 version: 1.4.0 less: - specifier: 4.2.1 - version: 4.2.1 + specifier: 4.2.2 + version: 4.2.2 less-loader: specifier: 12.2.0 - version: 12.2.0(less@4.2.1)(webpack@5.97.1) + version: 12.2.0(less@4.2.2)(webpack@5.98.0(esbuild@0.25.1)) license-webpack-plugin: specifier: 4.0.2 - version: 4.0.2(webpack@5.97.1) + version: 4.0.2(webpack@5.98.0(esbuild@0.25.1)) listr2: specifier: 8.2.5 version: 8.2.5 lmdb: - specifier: 3.2.2 - version: 3.2.2 + specifier: 3.2.6 + version: 3.2.6 loader-utils: specifier: 3.3.1 version: 3.3.1 @@ -360,19 +352,19 @@ importers: version: 0.30.17 mini-css-extract-plugin: specifier: 2.9.2 - version: 2.9.2(webpack@5.97.1) + version: 2.9.2(webpack@5.98.0(esbuild@0.25.1)) mrmime: - specifier: 2.0.0 - version: 2.0.0 + specifier: 2.0.1 + version: 2.0.1 ng-packagr: - specifier: 19.1.0-next.3 - version: 19.1.0-next.3(@angular/compiler-cli@19.1.0-rc.0)(tslib@2.8.1)(typescript@5.7.2) + specifier: 19.2.0 + version: 19.2.0(@angular/compiler-cli@19.2.0-rc.0(@angular/compiler@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.1-rc))(tslib@2.8.1)(typescript@5.8.1-rc) npm: - specifier: ^11.0.0 - version: 11.0.0 + specifier: ~10.9.2 + version: 10.9.2 npm-package-arg: - specifier: 12.0.1 - version: 12.0.1 + specifier: 12.0.2 + version: 12.0.2 npm-pick-manifest: specifier: 10.0.0 version: 10.0.0 @@ -388,9 +380,6 @@ importers: parse5-html-rewriting-stream: specifier: 7.0.0 version: 7.0.0 - patch-package: - specifier: ^8.0.0 - version: 8.0.0 picomatch: specifier: 4.0.2 version: 4.0.2 @@ -398,47 +387,47 @@ importers: specifier: 4.8.0 version: 4.8.0 postcss: - specifier: 8.4.49 - version: 8.4.49 + specifier: 8.5.2 + version: 8.5.2 postcss-loader: specifier: 8.1.1 - version: 8.1.1(postcss@8.4.49)(typescript@5.7.2)(webpack@5.97.1) + version: 8.1.1(postcss@8.5.2)(typescript@5.8.1-rc)(webpack@5.98.0(esbuild@0.25.1)) prettier: specifier: ^3.0.0 - version: 3.4.2 + version: 3.5.3 protractor: specifier: ~7.0.0 version: 7.0.0 puppeteer: specifier: 18.2.1 - version: 18.2.1 + version: 18.2.1(encoding@0.1.13) quicktype-core: - specifier: 23.0.170 - version: 23.0.170 + specifier: 23.0.171 + version: 23.0.171(encoding@0.1.13) resolve-url-loader: specifier: 5.0.0 version: 5.0.0 rollup: - specifier: 4.30.1 - version: 4.30.1 + specifier: 4.34.8 + version: 4.34.8 rollup-license-plugin: specifier: ~3.0.1 - version: 3.0.1 + version: 3.0.2 rollup-plugin-sourcemaps: specifier: ^0.6.0 - version: 0.6.3(@types/node@18.19.70)(rollup@4.30.1) + version: 0.6.3(@types/node@18.19.76)(rollup@4.34.8) rxjs: specifier: 7.8.1 version: 7.8.1 sass: - specifier: 1.83.1 - version: 1.83.1 + specifier: 1.85.0 + version: 1.85.0 sass-loader: - specifier: 16.0.4 - version: 16.0.4(sass@1.83.1)(webpack@5.97.1) + specifier: 16.0.5 + version: 16.0.5(sass@1.85.0)(webpack@5.98.0(esbuild@0.25.1)) semver: - specifier: 7.6.3 - version: 7.6.3 + specifier: 7.7.1 + version: 7.7.1 shelljs: specifier: ^0.8.5 version: 0.8.5 @@ -447,7 +436,7 @@ importers: version: 0.7.4 source-map-loader: specifier: 5.0.0 - version: 5.0.0(webpack@5.97.1) + version: 5.0.0(webpack@5.98.0(esbuild@0.25.1)) source-map-support: specifier: 0.5.21 version: 0.5.21 @@ -458,53 +447,53 @@ importers: specifier: ^7.0.0 version: 7.4.3 terser: - specifier: 5.37.0 - version: 5.37.0 + specifier: 5.39.0 + version: 5.39.0 tree-kill: specifier: 1.2.2 version: 1.2.2 ts-node: specifier: ^10.9.1 - version: 10.9.2(@types/node@18.19.70)(typescript@5.7.2) + version: 10.9.2(@types/node@18.19.76)(typescript@5.8.1-rc) tslib: specifier: 2.8.1 version: 2.8.1 typescript: - specifier: 5.7.2 - version: 5.7.2 + specifier: 5.8.1-rc + version: 5.8.1-rc undici: - specifier: 7.2.0 - version: 7.2.0 + specifier: 6.21.1 + version: 6.21.1 unenv: specifier: ^1.10.0 version: 1.10.0 verdaccio: specifier: 6.0.5 - version: 6.0.5(typanion@3.14.0) + version: 6.0.5(encoding@0.1.13) verdaccio-auth-memory: specifier: ^10.0.0 version: 10.2.2 vite: - specifier: 6.0.7 - version: 6.0.7(@types/node@18.19.70)(less@4.2.1)(sass@1.83.1)(terser@5.37.0) + specifier: 6.2.3 + version: 6.2.3(@types/node@18.19.76)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) watchpack: specifier: 2.4.2 version: 2.4.2 webpack: - specifier: 5.97.1 - version: 5.97.1(esbuild@0.24.2) + specifier: 5.98.0 + version: 5.98.0(esbuild@0.25.1) webpack-dev-middleware: specifier: 7.4.2 - version: 7.4.2(webpack@5.97.1) + version: 7.4.2(webpack@5.98.0(esbuild@0.25.1)) webpack-dev-server: specifier: 5.2.0 - version: 5.2.0(debug@4.4.0)(webpack@5.97.1) + version: 5.2.0(debug@4.4.0)(webpack@5.98.0(esbuild@0.25.1)) webpack-merge: specifier: 6.0.1 version: 6.0.1 webpack-subresource-integrity: specifier: 5.1.0 - version: 5.1.0(webpack@5.97.1) + version: 5.1.0(webpack@5.98.0(esbuild@0.25.1)) yargs: specifier: 17.7.2 version: 17.7.2 @@ -520,393 +509,8104 @@ importers: puppeteer: built: true -packages: - - /@ampproject/remapping@2.3.0: - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - dependencies: - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 - dev: true - - /@angular-devkit/architect@0.1901.0-next.2(chokidar@4.0.3): - resolution: {integrity: sha512-LJH2kZ6zGgWqCg4l42n/x+1jxUtcgJFrhBR11jXtkQperDvxRmhWpCEbjx0e9frGJbDe3vBlPdPy2PMYimwAvQ==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - dependencies: - '@angular-devkit/core': 19.1.0-next.2(chokidar@4.0.3) - rxjs: 7.8.1 - transitivePeerDependencies: - - chokidar - dev: true - - /@angular-devkit/core@19.1.0-next.2(chokidar@4.0.3): - resolution: {integrity: sha512-e02oakLxYszcpltPhZDuQ2AKGWXblJLU2Ua7xD57BtjQtZt5c10bvePOvU4M5KnD5KqZUzjYQZtC6nqKOVvkMA==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - peerDependencies: - chokidar: ^4.0.0 - peerDependenciesMeta: - chokidar: - optional: true - dependencies: - ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) - chokidar: 4.0.3 - jsonc-parser: 3.3.1 - picomatch: 4.0.2 - rxjs: 7.8.1 - source-map: 0.7.4 - dev: true - - /@angular/animations@19.1.0-rc.0(@angular/core@19.1.0-rc.0): - resolution: {integrity: sha512-CAbv8Zr7RLYUFh6afw/3k7OHXvpxJvXDl5YeXWw5gBC7j1zHWochCVcEZVqBnrumGllVhxctM7L6gCI0x+EG/g==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - peerDependencies: - '@angular/core': 19.1.0-rc.0 - dependencies: - '@angular/core': 19.1.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) - tslib: 2.8.1 - dev: true - - /@angular/benchpress@0.3.0(rxjs@7.8.1)(zone.js@0.15.0): - resolution: {integrity: sha512-ApxoY5lTj1S0QFLdq5ZdTfdkIds1m3tma9EJOZpNVHRU9eCj2D/5+VFb5tlWsv9NHQ2S0XXkJjauFOAdfzT8uw==} - dependencies: - '@angular/core': 14.3.0(rxjs@7.8.1)(zone.js@0.15.0) - reflect-metadata: 0.1.14 - transitivePeerDependencies: - - rxjs - - zone.js - dev: true - - /@angular/build@19.1.0-next.2(@angular/compiler-cli@19.1.0-rc.0)(@angular/compiler@19.1.0-rc.0)(@angular/localize@19.1.0-rc.0)(@angular/platform-server@19.1.0-rc.0)(@angular/service-worker@19.1.0-rc.0)(@types/node@18.19.70)(chokidar@4.0.3)(less@4.2.1)(postcss@8.4.49)(terser@5.37.0)(typescript@5.7.2): - resolution: {integrity: sha512-HDyPsyyqbMpUQXA3VBcfFcGu6sj0vxKL/DEKxnxIgbC9dZ/01yNDMTPIszpGg16fRPt10xEefx3hUFMMgYzWJQ==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} - peerDependencies: - '@angular/compiler': ^19.0.0 || ^19.1.0-next.0 - '@angular/compiler-cli': ^19.0.0 || ^19.1.0-next.0 - '@angular/localize': ^19.0.0 || ^19.1.0-next.0 - '@angular/platform-server': ^19.0.0 || ^19.1.0-next.0 - '@angular/service-worker': ^19.0.0 || ^19.1.0-next.0 - '@angular/ssr': ^19.1.0-next.2 - less: ^4.2.0 - postcss: ^8.4.0 - tailwindcss: ^2.0.0 || ^3.0.0 - typescript: 5.7.2 - peerDependenciesMeta: - '@angular/localize': - optional: true - '@angular/platform-server': - optional: true - '@angular/service-worker': - optional: true + modules/testing/builder: + devDependencies: + '@angular-devkit/architect': + specifier: workspace:* + version: link:../../../packages/angular_devkit/architect + '@angular-devkit/build-angular': + specifier: workspace:* + version: link:../../../packages/angular_devkit/build_angular + '@angular-devkit/core': + specifier: workspace:* + version: link:../../../packages/angular_devkit/core '@angular/ssr': - optional: true - less: - optional: true - postcss: - optional: true - tailwindcss: - optional: true - dependencies: - '@ampproject/remapping': 2.3.0 - '@angular-devkit/architect': 0.1901.0-next.2(chokidar@4.0.3) - '@angular/compiler': 19.1.0-rc.0(@angular/core@19.1.0-rc.0) - '@angular/compiler-cli': 19.1.0-rc.0(@angular/compiler@19.1.0-rc.0)(typescript@5.7.2) - '@angular/localize': 19.1.0-rc.0(@angular/compiler-cli@19.1.0-rc.0)(@angular/compiler@19.1.0-rc.0) - '@angular/platform-server': 19.1.0-rc.0(@angular/animations@19.1.0-rc.0)(@angular/common@19.1.0-rc.0)(@angular/compiler@19.1.0-rc.0)(@angular/core@19.1.0-rc.0)(@angular/platform-browser@19.1.0-rc.0) - '@angular/service-worker': 19.1.0-rc.0(@angular/common@19.1.0-rc.0)(@angular/core@19.1.0-rc.0) - '@babel/core': 7.26.0 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) - '@inquirer/confirm': 5.1.0(@types/node@18.19.70) - '@vitejs/plugin-basic-ssl': 1.2.0(vite@6.0.3) - beasties: 0.2.0 - browserslist: 4.24.3 - esbuild: 0.24.0 - fast-glob: 3.3.2 - https-proxy-agent: 7.0.6(supports-color@10.0.0) - istanbul-lib-instrument: 6.0.3 - less: 4.2.1 - listr2: 8.2.5 - magic-string: 0.30.15 - mrmime: 2.0.0 - parse5-html-rewriting-stream: 7.0.0 - picomatch: 4.0.2 - piscina: 4.8.0 - postcss: 8.4.49 - rollup: 4.28.1 - sass: 1.83.0 - semver: 7.6.3 - typescript: 5.7.2 - vite: 6.0.3(@types/node@18.19.70)(less@4.2.1)(sass@1.83.0)(terser@5.37.0) - watchpack: 2.4.2 - optionalDependencies: - lmdb: 3.2.0 - transitivePeerDependencies: - - '@types/node' - - chokidar - - jiti - - lightningcss - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - dev: true + specifier: workspace:* + version: link:../../../packages/angular/ssr - /@angular/cdk@19.1.0-next.3(@angular/common@19.1.0-rc.0)(@angular/core@19.1.0-rc.0)(rxjs@7.8.1): - resolution: {integrity: sha512-7JX7kzV3PmeXwoL7dd2xLjDvZ7w/U+vuP/IHxSv0p+ThBZraMibcSUK/OeFC2XDKMs7Z8/0YnH/OWaAkxj8gmA==} - peerDependencies: - '@angular/common': ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 - '@angular/core': ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 - rxjs: ^6.5.3 || ^7.4.0 + packages/angular/build: dependencies: - '@angular/common': 19.1.0-rc.0(@angular/core@19.1.0-rc.0)(rxjs@7.8.1) - '@angular/core': 19.1.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) - rxjs: 7.8.1 - tslib: 2.8.1 + '@ampproject/remapping': + specifier: 2.3.0 + version: 2.3.0 + '@angular-devkit/architect': + specifier: workspace:0.0.0-EXPERIMENTAL-PLACEHOLDER + version: link:../../angular_devkit/architect + '@babel/core': + specifier: 7.26.10 + version: 7.26.10 + '@babel/helper-annotate-as-pure': + specifier: 7.25.9 + version: 7.25.9 + '@babel/helper-split-export-declaration': + specifier: 7.24.7 + version: 7.24.7 + '@babel/plugin-syntax-import-attributes': + specifier: 7.26.0 + version: 7.26.0(@babel/core@7.26.10) + '@inquirer/confirm': + specifier: 5.1.6 + version: 5.1.6(@types/node@22.13.10) + '@vitejs/plugin-basic-ssl': + specifier: 1.2.0 + version: 1.2.0(vite@6.2.3(@types/node@22.13.10)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) + beasties: + specifier: 0.2.0 + version: 0.2.0 + browserslist: + specifier: ^4.23.0 + version: 4.24.4 + esbuild: + specifier: 0.25.1 + version: 0.25.1 + fast-glob: + specifier: 3.3.3 + version: 3.3.3 + https-proxy-agent: + specifier: 7.0.6 + version: 7.0.6(supports-color@10.0.0) + istanbul-lib-instrument: + specifier: 6.0.3 + version: 6.0.3 + listr2: + specifier: 8.2.5 + version: 8.2.5 + magic-string: + specifier: 0.30.17 + version: 0.30.17 + mrmime: + specifier: 2.0.1 + version: 2.0.1 + parse5-html-rewriting-stream: + specifier: 7.0.0 + version: 7.0.0 + picomatch: + specifier: 4.0.2 + version: 4.0.2 + piscina: + specifier: 4.8.0 + version: 4.8.0 + rollup: + specifier: 4.34.8 + version: 4.34.8 + sass: + specifier: 1.85.0 + version: 1.85.0 + semver: + specifier: 7.7.1 + version: 7.7.1 + source-map-support: + specifier: 0.5.21 + version: 0.5.21 + vite: + specifier: 6.2.3 + version: 6.2.3(@types/node@22.13.10)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) + watchpack: + specifier: 2.4.2 + version: 2.4.2 optionalDependencies: - parse5: 7.2.1 - dev: true + lmdb: + specifier: 3.2.6 + version: 3.2.6 + devDependencies: + '@angular-devkit/core': + specifier: workspace:* + version: link:../../angular_devkit/core + '@angular/ssr': + specifier: workspace:* + version: link:../ssr + + packages/angular/cli: + dependencies: + '@angular-devkit/architect': + specifier: workspace:0.0.0-EXPERIMENTAL-PLACEHOLDER + version: link:../../angular_devkit/architect + '@angular-devkit/core': + specifier: workspace:0.0.0-PLACEHOLDER + version: link:../../angular_devkit/core + '@angular-devkit/schematics': + specifier: workspace:0.0.0-PLACEHOLDER + version: link:../../angular_devkit/schematics + '@inquirer/prompts': + specifier: 7.3.2 + version: 7.3.2(@types/node@22.13.10) + '@listr2/prompt-adapter-inquirer': + specifier: 2.0.18 + version: 2.0.18(@inquirer/prompts@7.3.2(@types/node@22.13.10)) + '@schematics/angular': + specifier: workspace:0.0.0-PLACEHOLDER + version: link:../../schematics/angular + '@yarnpkg/lockfile': + specifier: 1.1.0 + version: 1.1.0 + ini: + specifier: 5.0.0 + version: 5.0.0 + jsonc-parser: + specifier: 3.3.1 + version: 3.3.1 + listr2: + specifier: 8.2.5 + version: 8.2.5 + npm-package-arg: + specifier: 12.0.2 + version: 12.0.2 + npm-pick-manifest: + specifier: 10.0.0 + version: 10.0.0 + pacote: + specifier: 20.0.0 + version: 20.0.0 + resolve: + specifier: 1.22.10 + version: 1.22.10 + semver: + specifier: 7.7.1 + version: 7.7.1 + symbol-observable: + specifier: 4.0.0 + version: 4.0.0 + yargs: + specifier: 17.7.2 + version: 17.7.2 - /@angular/common@19.1.0-rc.0(@angular/core@19.1.0-rc.0)(rxjs@7.8.1): - resolution: {integrity: sha512-kDo8El2h4I90Cai2lI7hIV4vMMqEfPz/sM9FmogwzJZ2t5ao5PtutbaoInF3w1xyQj9cnVx2UH5Q0in04uwS4g==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - peerDependencies: - '@angular/core': 19.1.0-rc.0 - rxjs: ^6.5.3 || ^7.4.0 + packages/angular/pwa: dependencies: - '@angular/core': 19.1.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) - rxjs: 7.8.1 - tslib: 2.8.1 - dev: true + '@angular-devkit/schematics': + specifier: workspace:0.0.0-PLACEHOLDER + version: link:../../angular_devkit/schematics + '@schematics/angular': + specifier: workspace:0.0.0-PLACEHOLDER + version: link:../../schematics/angular + parse5-html-rewriting-stream: + specifier: 7.0.0 + version: 7.0.0 - /@angular/compiler-cli@19.1.0-rc.0(@angular/compiler@19.1.0-rc.0)(typescript@5.7.2): - resolution: {integrity: sha512-7D0jLS/qooH782rgE5SbWJUpSsqR9/qlbhYvcyLosr1YjH3dsaZV8j4h2r+qJ+qwjKLWxRr2XLtVzVxPyeyKIQ==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - hasBin: true - peerDependencies: - '@angular/compiler': 19.1.0-rc.0 - typescript: 5.7.2 + packages/angular/ssr: dependencies: - '@angular/compiler': 19.1.0-rc.0(@angular/core@19.1.0-rc.0) - '@babel/core': 7.26.0 - '@jridgewell/sourcemap-codec': 1.5.0 - chokidar: 4.0.3 - convert-source-map: 1.9.0 - reflect-metadata: 0.2.2 - semver: 7.6.3 - tslib: 2.8.1 - typescript: 5.7.2 - yargs: 17.7.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@angular/compiler@19.1.0-rc.0(@angular/core@19.1.0-rc.0): - resolution: {integrity: sha512-bQb8+l+7IntSLoEkrdA8xghgOMPth0Kuv5ywSw0uh/TmbF82K/g6IiRdRwqTordeSWy0G8RZlh3fKrSm8vRvNw==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - peerDependencies: - '@angular/core': 19.1.0-rc.0 - peerDependenciesMeta: + tslib: + specifier: ^2.3.0 + version: 2.8.1 + devDependencies: + '@angular-devkit/schematics': + specifier: workspace:* + version: link:../../angular_devkit/schematics + '@angular/common': + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1) + '@angular/compiler': + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)) '@angular/core': - optional: true - dependencies: - '@angular/core': 19.1.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) - tslib: 2.8.1 - dev: true - - /@angular/core@14.3.0(rxjs@7.8.1)(zone.js@0.15.0): - resolution: {integrity: sha512-wYiwItc0Uyn4FWZ/OAx/Ubp2/WrD3EgUJ476y1XI7yATGPF8n9Ld5iCXT08HOvc4eBcYlDfh90kTXR6/MfhzdQ==} - engines: {node: ^14.15.0 || >=16.10.0} - peerDependencies: - rxjs: ^6.5.3 || ^7.4.0 - zone.js: ~0.11.4 || ~0.12.0 - dependencies: - rxjs: 7.8.1 - tslib: 2.8.1 - zone.js: 0.15.0 - dev: true + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) + '@angular/platform-browser': + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(@angular/animations@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)) + '@angular/platform-server': + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/compiler@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(@angular/platform-browser@19.2.0-rc.0(@angular/animations@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(rxjs@7.8.1) + '@angular/router': + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(@angular/platform-browser@19.2.0-rc.0(@angular/animations@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(rxjs@7.8.1) + '@schematics/angular': + specifier: workspace:* + version: link:../../schematics/angular - /@angular/core@19.1.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0): - resolution: {integrity: sha512-t4zWPx+EyKi7qIjBo+dBhmkk8nZVB88YBj+et5oklG1CNL8//w7q/b8bmmirT+/JGHsB9E044skeMohhayCJ3A==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - peerDependencies: - rxjs: ^6.5.3 || ^7.4.0 - zone.js: ~0.15.0 + packages/angular_devkit/architect: dependencies: - rxjs: 7.8.1 - tslib: 2.8.1 - zone.js: 0.15.0 - dev: true + '@angular-devkit/core': + specifier: workspace:0.0.0-PLACEHOLDER + version: link:../core + rxjs: + specifier: 7.8.1 + version: 7.8.1 - /@angular/forms@19.1.0-rc.0(@angular/common@19.1.0-rc.0)(@angular/core@19.1.0-rc.0)(@angular/platform-browser@19.1.0-rc.0)(rxjs@7.8.1): - resolution: {integrity: sha512-XrBUbZiQBzsD6li0RO5i1xcPTFln1NTtOHKT1Qga35zmFg+jPgz1/asPghEQs7WMKrXVoZer2tKNiRRdhKv7/A==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - peerDependencies: - '@angular/common': 19.1.0-rc.0 - '@angular/core': 19.1.0-rc.0 - '@angular/platform-browser': 19.1.0-rc.0 - rxjs: ^6.5.3 || ^7.4.0 + packages/angular_devkit/architect_cli: dependencies: - '@angular/common': 19.1.0-rc.0(@angular/core@19.1.0-rc.0)(rxjs@7.8.1) - '@angular/core': 19.1.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) - '@angular/platform-browser': 19.1.0-rc.0(@angular/animations@19.1.0-rc.0)(@angular/common@19.1.0-rc.0)(@angular/core@19.1.0-rc.0) - rxjs: 7.8.1 - tslib: 2.8.1 - dev: true + '@angular-devkit/architect': + specifier: workspace:0.0.0-EXPERIMENTAL-PLACEHOLDER + version: link:../architect + '@angular-devkit/core': + specifier: workspace:0.0.0-PLACEHOLDER + version: link:../core + ansi-colors: + specifier: 4.1.3 + version: 4.1.3 + progress: + specifier: 2.0.3 + version: 2.0.3 + symbol-observable: + specifier: 4.0.0 + version: 4.0.0 + yargs-parser: + specifier: 21.1.1 + version: 21.1.1 + devDependencies: + '@types/progress': + specifier: 2.0.7 + version: 2.0.7 - /@angular/localize@19.1.0-rc.0(@angular/compiler-cli@19.1.0-rc.0)(@angular/compiler@19.1.0-rc.0): - resolution: {integrity: sha512-2CYgwuv9rzwWuPFrg6+q8oQMdtR/NrXmSkulA39JyggkmArZzqCOKBMYM5CEkPDJyvBdX1iPP8LJtqKNe5sJEQ==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - hasBin: true - peerDependencies: - '@angular/compiler': 19.1.0-rc.0 - '@angular/compiler-cli': 19.1.0-rc.0 + packages/angular_devkit/build_angular: dependencies: - '@angular/compiler': 19.1.0-rc.0(@angular/core@19.1.0-rc.0) - '@angular/compiler-cli': 19.1.0-rc.0(@angular/compiler@19.1.0-rc.0)(typescript@5.7.2) - '@babel/core': 7.26.0 - '@types/babel__core': 7.20.5 - fast-glob: 3.3.3 - yargs: 17.7.2 - transitivePeerDependencies: - - supports-color - dev: true - - /@angular/material@19.1.0-next.3(@angular/animations@19.1.0-rc.0)(@angular/cdk@19.1.0-next.3)(@angular/common@19.1.0-rc.0)(@angular/core@19.1.0-rc.0)(@angular/forms@19.1.0-rc.0)(@angular/platform-browser@19.1.0-rc.0)(rxjs@7.8.1): - resolution: {integrity: sha512-aq92B77YkgHSoew2aN2Fqeg9eu/DiL3c09JKul0PW7cQfMejYU1UmiiyhXS5MhxFdVofhsJdV5C8m4aMzjagVw==} - peerDependencies: - '@angular/animations': ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 - '@angular/cdk': 19.1.0-next.3 - '@angular/common': ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 - '@angular/core': ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 - '@angular/forms': ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 - '@angular/platform-browser': ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 + '@ampproject/remapping': + specifier: 2.3.0 + version: 2.3.0 + '@angular-devkit/architect': + specifier: workspace:0.0.0-EXPERIMENTAL-PLACEHOLDER + version: link:../architect + '@angular-devkit/build-webpack': + specifier: workspace:0.0.0-EXPERIMENTAL-PLACEHOLDER + version: link:../build_webpack + '@angular-devkit/core': + specifier: workspace:0.0.0-PLACEHOLDER + version: link:../core + '@angular/build': + specifier: workspace:* + version: link:../../angular/build + '@babel/core': + specifier: 7.26.10 + version: 7.26.10 + '@babel/generator': + specifier: 7.26.10 + version: 7.26.10 + '@babel/helper-annotate-as-pure': + specifier: 7.25.9 + version: 7.25.9 + '@babel/helper-split-export-declaration': + specifier: 7.24.7 + version: 7.24.7 + '@babel/plugin-transform-async-generator-functions': + specifier: 7.26.8 + version: 7.26.8(@babel/core@7.26.10) + '@babel/plugin-transform-async-to-generator': + specifier: 7.25.9 + version: 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-runtime': + specifier: 7.26.10 + version: 7.26.10(@babel/core@7.26.10) + '@babel/preset-env': + specifier: 7.26.9 + version: 7.26.9(@babel/core@7.26.10) + '@babel/runtime': + specifier: 7.26.10 + version: 7.26.10 + '@discoveryjs/json-ext': + specifier: 0.6.3 + version: 0.6.3 + '@ngtools/webpack': + specifier: workspace:0.0.0-PLACEHOLDER + version: link:../../ngtools/webpack + '@vitejs/plugin-basic-ssl': + specifier: 1.2.0 + version: 1.2.0(vite@6.2.3(@types/node@22.13.10)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0)) + ansi-colors: + specifier: 4.1.3 + version: 4.1.3 + autoprefixer: + specifier: 10.4.20 + version: 10.4.20(postcss@8.5.2) + babel-loader: + specifier: 9.2.1 + version: 9.2.1(@babel/core@7.26.10)(webpack@5.98.0(esbuild@0.25.1)) + browserslist: + specifier: ^4.21.5 + version: 4.24.4 + copy-webpack-plugin: + specifier: 12.0.2 + version: 12.0.2(webpack@5.98.0(esbuild@0.25.1)) + css-loader: + specifier: 7.1.2 + version: 7.1.2(webpack@5.98.0(esbuild@0.25.1)) + esbuild-wasm: + specifier: 0.25.1 + version: 0.25.1 + fast-glob: + specifier: 3.3.3 + version: 3.3.3 + http-proxy-middleware: + specifier: 3.0.3 + version: 3.0.3 + istanbul-lib-instrument: + specifier: 6.0.3 + version: 6.0.3 + jsonc-parser: + specifier: 3.3.1 + version: 3.3.1 + karma-source-map-support: + specifier: 1.4.0 + version: 1.4.0 + less: + specifier: 4.2.2 + version: 4.2.2 + less-loader: + specifier: 12.2.0 + version: 12.2.0(less@4.2.2)(webpack@5.98.0(esbuild@0.25.1)) + license-webpack-plugin: + specifier: 4.0.2 + version: 4.0.2(webpack@5.98.0(esbuild@0.25.1)) + loader-utils: + specifier: 3.3.1 + version: 3.3.1 + mini-css-extract-plugin: + specifier: 2.9.2 + version: 2.9.2(webpack@5.98.0(esbuild@0.25.1)) + open: + specifier: 10.1.0 + version: 10.1.0 + ora: + specifier: 5.4.1 + version: 5.4.1 + picomatch: + specifier: 4.0.2 + version: 4.0.2 + piscina: + specifier: 4.8.0 + version: 4.8.0 + postcss: + specifier: 8.5.2 + version: 8.5.2 + postcss-loader: + specifier: 8.1.1 + version: 8.1.1(postcss@8.5.2)(typescript@5.8.1-rc)(webpack@5.98.0(esbuild@0.25.1)) + resolve-url-loader: + specifier: 5.0.0 + version: 5.0.0 + rxjs: + specifier: 7.8.1 + version: 7.8.1 + sass: + specifier: 1.85.0 + version: 1.85.0 + sass-loader: + specifier: 16.0.5 + version: 16.0.5(sass@1.85.0)(webpack@5.98.0(esbuild@0.25.1)) + semver: + specifier: 7.7.1 + version: 7.7.1 + source-map-loader: + specifier: 5.0.0 + version: 5.0.0(webpack@5.98.0(esbuild@0.25.1)) + source-map-support: + specifier: 0.5.21 + version: 0.5.21 + terser: + specifier: 5.39.0 + version: 5.39.0 + tree-kill: + specifier: 1.2.2 + version: 1.2.2 + tslib: + specifier: 2.8.1 + version: 2.8.1 + webpack: + specifier: 5.98.0 + version: 5.98.0(esbuild@0.25.1) + webpack-dev-middleware: + specifier: 7.4.2 + version: 7.4.2(webpack@5.98.0(esbuild@0.25.1)) + webpack-dev-server: + specifier: 5.2.0 + version: 5.2.0(debug@4.4.0)(webpack@5.98.0(esbuild@0.25.1)) + webpack-merge: + specifier: 6.0.1 + version: 6.0.1 + webpack-subresource-integrity: + specifier: 5.1.0 + version: 5.1.0(webpack@5.98.0(esbuild@0.25.1)) + optionalDependencies: + esbuild: + specifier: 0.25.1 + version: 0.25.1 + devDependencies: + '@angular/ssr': + specifier: workspace:* + version: link:../../angular/ssr + undici: + specifier: 6.21.1 + version: 6.21.1 + + packages/angular_devkit/build_webpack: + dependencies: + '@angular-devkit/architect': + specifier: workspace:0.0.0-EXPERIMENTAL-PLACEHOLDER + version: link:../architect + rxjs: + specifier: 7.8.1 + version: 7.8.1 + devDependencies: + '@angular-devkit/core': + specifier: workspace:0.0.0-PLACEHOLDER + version: link:../core + '@ngtools/webpack': + specifier: workspace:0.0.0-PLACEHOLDER + version: link:../../ngtools/webpack + webpack: + specifier: 5.98.0 + version: 5.98.0(esbuild@0.25.1) + + packages/angular_devkit/core: + dependencies: + ajv: + specifier: 8.17.1 + version: 8.17.1 + ajv-formats: + specifier: 3.0.1 + version: 3.0.1(ajv@8.17.1) + jsonc-parser: + specifier: 3.3.1 + version: 3.3.1 + picomatch: + specifier: 4.0.2 + version: 4.0.2 + rxjs: + specifier: 7.8.1 + version: 7.8.1 + source-map: + specifier: 0.7.4 + version: 0.7.4 + + packages/angular_devkit/schematics: + dependencies: + '@angular-devkit/core': + specifier: workspace:0.0.0-PLACEHOLDER + version: link:../core + jsonc-parser: + specifier: 3.3.1 + version: 3.3.1 + magic-string: + specifier: 0.30.17 + version: 0.30.17 + ora: + specifier: 5.4.1 + version: 5.4.1 + rxjs: + specifier: 7.8.1 + version: 7.8.1 + + packages/angular_devkit/schematics_cli: + dependencies: + '@angular-devkit/core': + specifier: workspace:0.0.0-PLACEHOLDER + version: link:../core + '@angular-devkit/schematics': + specifier: workspace:0.0.0-PLACEHOLDER + version: link:../schematics + '@inquirer/prompts': + specifier: 7.3.2 + version: 7.3.2(@types/node@22.13.10) + ansi-colors: + specifier: 4.1.3 + version: 4.1.3 + symbol-observable: + specifier: 4.0.0 + version: 4.0.0 + yargs-parser: + specifier: 21.1.1 + version: 21.1.1 + + packages/ngtools/webpack: + devDependencies: + '@angular-devkit/core': + specifier: workspace:0.0.0-PLACEHOLDER + version: link:../../angular_devkit/core + '@angular/compiler': + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)) + '@angular/compiler-cli': + specifier: 19.2.0-rc.0 + version: 19.2.0-rc.0(@angular/compiler@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.1-rc) + typescript: + specifier: 5.8.1-rc + version: 5.8.1-rc + webpack: + specifier: 5.98.0 + version: 5.98.0(esbuild@0.25.1) + + packages/schematics/angular: + dependencies: + '@angular-devkit/core': + specifier: workspace:0.0.0-PLACEHOLDER + version: link:../../angular_devkit/core + '@angular-devkit/schematics': + specifier: workspace:0.0.0-PLACEHOLDER + version: link:../../angular_devkit/schematics + jsonc-parser: + specifier: 3.3.1 + version: 3.3.1 + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@angular/animations@19.2.0-rc.0': + resolution: {integrity: sha512-jK2G3oSCXQbZuHmmA+PVxj573FE5C6nBPFwItaRsDcgSW4Posug595YAsDdBs11o+Z11pnGTFkPTW71TEOTCIQ==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + '@angular/core': 19.2.0-rc.0 + + '@angular/benchpress@0.3.0': + resolution: {integrity: sha512-ApxoY5lTj1S0QFLdq5ZdTfdkIds1m3tma9EJOZpNVHRU9eCj2D/5+VFb5tlWsv9NHQ2S0XXkJjauFOAdfzT8uw==} + + '@angular/build-tooling@https://codeload.github.com/angular/dev-infra-private-build-tooling-builds/tar.gz/d4727212a9d0f7eb63ae3116d73c769d9bd0bdc1': + resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-build-tooling-builds/tar.gz/d4727212a9d0f7eb63ae3116d73c769d9bd0bdc1} + version: 0.0.0-74aabba6d202918280dafe92f87f9c154476fa86 + + '@angular/cdk@19.2.0-rc.0': + resolution: {integrity: sha512-yuSu7B6s+wFccF42O4U5SIfevi7LmlrPl7W3mDCE45r+11+EstP46EH/l78kb1f9/SseSNUfIE/kWU/c/SUa1Q==} + peerDependencies: + '@angular/common': ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 + '@angular/core': ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 + rxjs: ^6.5.3 || ^7.4.0 + + '@angular/common@19.2.0-rc.0': + resolution: {integrity: sha512-03VFBI9ZB9Ka18qjpk6y3kbiS/EF6e5lx7GafcsOWwM/s6POWLlGrSzWG6z9cNJ8g10uvxg7sKYBB+9kNMmBNg==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + '@angular/core': 19.2.0-rc.0 + rxjs: ^6.5.3 || ^7.4.0 + + '@angular/compiler-cli@19.2.0-rc.0': + resolution: {integrity: sha512-FJAluHoygdGMXIp95bD9d8ZUYieXEAGsbHmvWPqilvOwUtq+4aGPp0sRUksFTciTjvJCEOgATW1IXiXpftYK3w==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + hasBin: true + peerDependencies: + '@angular/compiler': 19.2.0-rc.0 + typescript: 5.8.1-rc + + '@angular/compiler@19.2.0-rc.0': + resolution: {integrity: sha512-4yao4j+s0768PUPMjhLH8tb9b5SKp9cnv3M8xQyBoc71iMsKohJwX0Fgw7/5qxC6xjsS2kfeHCvmzBCxZIkSEg==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + '@angular/core': 19.2.0-rc.0 + peerDependenciesMeta: + '@angular/core': + optional: true + + '@angular/core@14.3.0': + resolution: {integrity: sha512-wYiwItc0Uyn4FWZ/OAx/Ubp2/WrD3EgUJ476y1XI7yATGPF8n9Ld5iCXT08HOvc4eBcYlDfh90kTXR6/MfhzdQ==} + engines: {node: ^14.15.0 || >=16.10.0} + peerDependencies: + rxjs: ^6.5.3 || ^7.4.0 + zone.js: ~0.11.4 || ~0.12.0 + + '@angular/core@19.2.0-rc.0': + resolution: {integrity: sha512-/0wKuv75p7d25QH5I+bb5Yim2k4TMkdntvhdTzcFI20fZQf232+Nj2G9Sy9jpPQpmLtAzfdzPXbjFaGsHo/Dfg==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + rxjs: ^6.5.3 || ^7.4.0 + zone.js: ~0.15.0 + + '@angular/forms@19.2.0-rc.0': + resolution: {integrity: sha512-nA3XFVTCD3OW0/TWNiV2vrNd4Rl/P+kLgCk/VfvUoDxUE8VcWVnkgNZ7xBkl0jnNe8mBPxZqc+v+tTZ+4WJGKA==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + '@angular/common': 19.2.0-rc.0 + '@angular/core': 19.2.0-rc.0 + '@angular/platform-browser': 19.2.0-rc.0 + rxjs: ^6.5.3 || ^7.4.0 + + '@angular/localize@19.2.0-rc.0': + resolution: {integrity: sha512-KeFtDt/q0WcdNtn0Fz7VfYgWD1JOFOASbhQiesBufrgFWrE8V8p0nTbuUWP9pzNIhc+SwOD+NxWJEAuqth009w==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + hasBin: true + peerDependencies: + '@angular/compiler': 19.2.0-rc.0 + '@angular/compiler-cli': 19.2.0-rc.0 + + '@angular/material@19.2.0-rc.0': + resolution: {integrity: sha512-3wpPekfAvwjmge2YVUx78qhCUXsz1o0Eh8XaQdbHyO/vZ0fF2w8hdHat7dY67XwrkryOqidceu8G8bM9QyakXg==} + peerDependencies: + '@angular/cdk': 19.2.0-rc.0 + '@angular/common': ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 + '@angular/core': ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 + '@angular/forms': ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 + '@angular/platform-browser': ^19.0.0-0 || ^19.1.0-0 || ^19.2.0-0 || ^19.3.0-0 || ^20.0.0-0 + rxjs: ^6.5.3 || ^7.4.0 + + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/252589f7bc8fe6ca13b31e02d506ec52e826cdd2': + resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/252589f7bc8fe6ca13b31e02d506ec52e826cdd2} + version: 0.0.0-0ad6a370f70638e785d6ef1f90dc6ede34684a47 + hasBin: true + + '@angular/platform-browser-dynamic@19.2.0-rc.0': + resolution: {integrity: sha512-ZqB5s/2LEp+3aSQNlcvSmzhRpxdCRj8iR9uggbj6LIk2hvy9h+SGtSyGQWPTi7SalMekHIzoHHvRFeXTN4YYqQ==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + '@angular/common': 19.2.0-rc.0 + '@angular/compiler': 19.2.0-rc.0 + '@angular/core': 19.2.0-rc.0 + '@angular/platform-browser': 19.2.0-rc.0 + + '@angular/platform-browser@19.2.0-rc.0': + resolution: {integrity: sha512-L+avJcGFKWon1iiXPzmt9R8YFE154eMaECsYeWVv1W4Qy1MMHEL4qwOKnO/B8HUarSCfYLiLTPMR1a9PqIbBhQ==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + '@angular/animations': 19.2.0-rc.0 + '@angular/common': 19.2.0-rc.0 + '@angular/core': 19.2.0-rc.0 + peerDependenciesMeta: + '@angular/animations': + optional: true + + '@angular/platform-server@19.2.0-rc.0': + resolution: {integrity: sha512-OO69ZE0ccUdaItqs/2qkAMs/2pdaQZpTkvPhzn3+HftPYfJxIM+OZKDaP/p9EHAYcqIGK5JK8BR8hvfOboT4JQ==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + '@angular/common': 19.2.0-rc.0 + '@angular/compiler': 19.2.0-rc.0 + '@angular/core': 19.2.0-rc.0 + '@angular/platform-browser': 19.2.0-rc.0 + rxjs: '*' + + '@angular/router@19.2.0-rc.0': + resolution: {integrity: sha512-/+lMsHLG5+v2LyNwNPgpHf9F2L6BACmIF565PVwCJ324j+ItDHOIjDywguAefGodns1JLVuNgfKF5/i0NZoAvQ==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + '@angular/common': 19.2.0-rc.0 + '@angular/core': 19.2.0-rc.0 + '@angular/platform-browser': 19.2.0-rc.0 rxjs: ^6.5.3 || ^7.4.0 + + '@angular/service-worker@19.2.0-rc.0': + resolution: {integrity: sha512-h2/tA1Qo8+LaFCKVjtjnNGeziPjMcW3eUUS0RNBa1bjjGLo4PyVtUuz2emYg/WQ1xmFn9zC+0LdywvMOAxH5ug==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + hasBin: true + peerDependencies: + '@angular/core': 19.2.0-rc.0 + rxjs: ^6.5.3 || ^7.4.0 + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.10': + resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.9': + resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.10': + resolution: {integrity: sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.26.9': + resolution: {integrity: sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.26.3': + resolution: {integrity: sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.3': + resolution: {integrity: sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + '@babel/helper-environment-visitor@7.24.7': + resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-member-expression-to-functions@7.25.9': + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.25.9': + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-remap-async-to-generator@7.25.9': + resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.26.5': + resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-split-export-declaration@7.24.7': + resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-wrap-function@7.25.9': + resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.10': + resolution: {integrity: sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.9': + resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.10': + resolution: {integrity: sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@7.26.9': + resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': + resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9': + resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9': + resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9': + resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9': + resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-proposal-async-generator-functions@7.20.7': + resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.26.0': + resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-arrow-functions@7.25.9': + resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-generator-functions@7.26.8': + resolution: {integrity: sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-to-generator@7.25.9': + resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.26.5': + resolution: {integrity: sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoping@7.25.9': + resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-properties@7.25.9': + resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-static-block@7.26.0': + resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + + '@babel/plugin-transform-classes@7.25.9': + resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-computed-properties@7.25.9': + resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-destructuring@7.25.9': + resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dotall-regex@7.25.9': + resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-keys@7.25.9': + resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-dynamic-import@7.25.9': + resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-exponentiation-operator@7.26.3': + resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-export-namespace-from@7.25.9': + resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.26.9': + resolution: {integrity: sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-function-name@7.25.9': + resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-json-strings@7.25.9': + resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-literals@7.25.9': + resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-logical-assignment-operators@7.25.9': + resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-member-expression-literals@7.25.9': + resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-amd@7.25.9': + resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.26.3': + resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-systemjs@7.25.9': + resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-umd@7.25.9': + resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-new-target@7.25.9': + resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6': + resolution: {integrity: sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-numeric-separator@7.25.9': + resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-rest-spread@7.25.9': + resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.25.9': + resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-catch-binding@7.25.9': + resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.25.9': + resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.25.9': + resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-methods@7.25.9': + resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-property-in-object@7.25.9': + resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.25.9': + resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.25.9': + resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regexp-modifiers@7.26.0': + resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-reserved-words@7.25.9': + resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-runtime@7.26.10': + resolution: {integrity: sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.25.9': + resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.25.9': + resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.25.9': + resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.26.8': + resolution: {integrity: sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.26.7': + resolution: {integrity: sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.25.9': + resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.25.9': + resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.25.9': + resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.25.9': + resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.26.9': + resolution: {integrity: sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + '@babel/runtime@7.26.10': + resolution: {integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.26.9': + resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.10': + resolution: {integrity: sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.9': + resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.10': + resolution: {integrity: sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.9': + resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} + engines: {node: '>=6.9.0'} + + '@bazel/bazelisk@1.25.0': + resolution: {integrity: sha512-IgesSUh9EwwLI9+Vs5rb/sx7vh6cI97CRLPqw9+/egFzeZlB5S2fTsKwbdDxtTVPjQMGS3GY64tTNsgejVFeKg==} + hasBin: true + + '@bazel/buildifier@6.3.3': + resolution: {integrity: sha512-0f5eNWhylZQbiTddfVkIXKkugQadzZdonLw4ur58oK4X+gIHOZ42Xv94sepu8Di9UWKFXNc4zxuuTiWM22hGvw==} + hasBin: true + + '@bazel/buildifier@8.0.3': + resolution: {integrity: sha512-X4BbSHDZrvXaldGKW0AkBMC0HPOosJyPykE8Z5LpGBCmCdgIhRJHtAjBOG21NRmZpwI8fc7A1rhhSOJ7UGmbFg==} + hasBin: true + + '@bazel/concatjs@5.8.1': + resolution: {integrity: sha512-TkARsNUxgi3bjFeGwIGlffmQglNhuR9qK9uE7uKhdBZvQE5caAWVCjYiMTzo3viKDhwKn5QNRcHY5huuJMVFfA==} + hasBin: true + peerDependencies: + karma: '>=4.0.0' + karma-chrome-launcher: '>=2.0.0' + karma-firefox-launcher: '>=1.0.0' + karma-jasmine: '>=2.0.0' + karma-junit-reporter: '>=2.0.0' + karma-requirejs: '>=1.0.0' + karma-sourcemap-loader: '>=0.3.0' + + '@bazel/esbuild@5.8.1': + resolution: {integrity: sha512-8k4LL8P3ivCnFeBOcjiFxL8U+M5VtEGuOyIqm2hfEiP8xDWsZLS7YQ7KhshKJy7Elh2dlK9oGgMtl0D/x9kxxg==} + + '@bazel/protractor@5.8.1': + resolution: {integrity: sha512-6JpP4uQLVRu3m0GrpexDjICKK8YJW/9voc8rZFQxVf3sm8yNjapUVN/b/PBAwua+nDY3uMe3W9aHgStZFOST0A==} + peerDependencies: + protractor: '>=5.0.0' + + '@bazel/runfiles@5.8.1': + resolution: {integrity: sha512-NDdfpdQ6rZlylgv++iMn5FkObC/QlBQvipinGLSOguTYpRywmieOyJ29XHvUilspwTFSILWpoE9CqMGkHXug1g==} + + '@bazel/runfiles@6.3.1': + resolution: {integrity: sha512-1uLNT5NZsUVIGS4syuHwTzZ8HycMPyr6POA3FCE4GbMtc4rhoJk8aZKtNIRthJYfL+iioppi+rTfH3olMPr9nA==} + + '@bazel/terser@5.8.1': + resolution: {integrity: sha512-TPjSDhw1pSZt9P2hd/22IJwl8KCZiJL+u2gB5mghBTCFDVdC5Dgsx135pFtvlqc6LjjOvd3s6dzcQr0YJo2HSg==} + hasBin: true + peerDependencies: + terser: '>=4.0.0 <5.9.0' + + '@bazel/typescript@5.8.1': + resolution: {integrity: sha512-NAJ8WQHZL1WE1YmRoCrq/1hhG15Mvy/viWh6TkvFnBeEhNUiQUsA5GYyhU1ztnBIYW03nATO3vwhAEfO7Q0U5g==} + hasBin: true + peerDependencies: + typescript: 5.8.1-rc + + '@bazel/worker@5.8.1': + resolution: {integrity: sha512-GMyZSNW3F34f9GjbJqvs1aHyed5BNrNeiDzNJhC1fIizo/UeBM21oBBONIYLBDoBtq936U85VyPZ76JaP/83hw==} + + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@cypress/request@3.0.7': + resolution: {integrity: sha512-LzxlLEMbBOPYB85uXrDqvD4MgcenjRBLIns3zyhx7vTPj/0u2eQhzXvPiGcaJrV38Q9dbkExWp6cOHPJ+EtFYg==} + engines: {node: '>= 6'} + + '@discoveryjs/json-ext@0.6.3': + resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==} + engines: {node: '>=14.17.0'} + + '@esbuild/aix-ppc64@0.25.1': + resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.1': + resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.1': + resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.1': + resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.1': + resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.1': + resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.1': + resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.1': + resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.1': + resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.1': + resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.1': + resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.1': + resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.1': + resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.1': + resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.1': + resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.1': + resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.1': + resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.1': + resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.1': + resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.1': + resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.1': + resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.25.1': + resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.1': + resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.1': + resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.1': + resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.0': + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@glideapps/ts-necessities@2.2.3': + resolution: {integrity: sha512-gXi0awOZLHk3TbW55GZLCPP6O+y/b5X1pBXKBVckFONSwF1z1E5ND2BGJsghQFah+pW7pkkyFb2VhUQI2qhL5w==} + + '@google-cloud/common@5.0.2': + resolution: {integrity: sha512-V7bmBKYQyu0eVG2BFejuUjlBt+zrya6vtsKdY+JxMM/dNntPF41vZ9+LhOshEUH01zOHEqBSvI7Dad7ZS6aUeA==} + engines: {node: '>=14.0.0'} + + '@google-cloud/precise-date@4.0.0': + resolution: {integrity: sha512-1TUx3KdaU3cN7nfCdNf+UVqA/PSX29Cjcox3fZZBtINlRrXVTmUkQnCKv2MbBUbCopbK4olAT1IHl76uZyCiVA==} + engines: {node: '>=14.0.0'} + + '@google-cloud/projectify@4.0.0': + resolution: {integrity: sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==} + engines: {node: '>=14.0.0'} + + '@google-cloud/promisify@4.1.0': + resolution: {integrity: sha512-G/FQx5cE/+DqBbOpA5jKsegGwdPniU6PuIEMt+qxWgFxvxuFOzVmp6zYchtYuwAWV5/8Dgs0yAmjvNZv3uXLQg==} + engines: {node: '>=18'} + + '@google-cloud/spanner@7.18.1': + resolution: {integrity: sha512-7CwpTX5njfoUAVQL/otowTm3gjWPn+ceUKKH+KGWr/DuAeDsrc4sZH1LY+t2mt/vvMULS/PlWkAkv6Hk/Oi8cw==} + engines: {node: '>=14.0.0'} + + '@grpc/grpc-js@1.12.6': + resolution: {integrity: sha512-JXUj6PI0oqqzTGvKtzOkxtpsyPRNsrmhh41TtIz/zEB6J+AUiZZ0dxWzcMwO9Ns5rmSPuMdghlTbUuqIM48d3Q==} + engines: {node: '>=12.10.0'} + + '@grpc/proto-loader@0.7.13': + resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} + engines: {node: '>=6'} + hasBin: true + + '@hapi/bourne@3.0.0': + resolution: {integrity: sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w==} + + '@humanwhocodes/config-array@0.11.14': + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + + '@inquirer/checkbox@4.1.3': + resolution: {integrity: sha512-KU1MGwf24iABJjGESxhyj+/rlQYSRoCfcuHDEHXfZ1DENmbuSRfyrUb+LLjHoee5TNOFKwaFxDXc5/zRwJUPMQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@5.1.6': + resolution: {integrity: sha512-6ZXYK3M1XmaVBZX6FCfChgtponnL0R6I7k8Nu+kaoNkT828FVZTcca1MqmWQipaW2oNREQl5AaPCUOOCVNdRMw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@10.1.8': + resolution: {integrity: sha512-HpAqR8y715zPpM9e/9Q+N88bnGwqqL8ePgZ0SMv/s3673JLMv3bIkoivGmjPqXlEgisUksSXibweQccUwEx4qQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/editor@4.2.8': + resolution: {integrity: sha512-UkGKbMFlQw5k4ZLjDwEi5z8NIVlP/3DAlLHta0o0pSsdpPThNmPtUL8mvGCHUaQtR+QrxR9yRYNWgKMsHkfIUA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/expand@4.0.10': + resolution: {integrity: sha512-leyBouGJ77ggv51Jb/OJmLGGnU2HYc13MZ2iiPNLwe2VgFgZPVqsrRWSa1RAHKyazjOyvSNKLD1B2K7A/iWi1g==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@1.0.11': + resolution: {integrity: sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==} + engines: {node: '>=18'} + + '@inquirer/input@4.1.7': + resolution: {integrity: sha512-rCQAipJNA14UTH84df/z4jDJ9LZ54H6zzuCAi7WZ0qVqx3CSqLjfXAMd5cpISIxbiHVJCPRB81gZksq6CZsqDg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/number@3.0.10': + resolution: {integrity: sha512-GLsdnxzNefjCJUmWyjaAuNklHgDpCTL4RMllAVhVvAzBwRW9g38eZ5tWgzo1lirtSDTpsh593hqXVhxvdrjfwA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/password@4.0.10': + resolution: {integrity: sha512-JC538ujqeYKkFqLoWZ0ILBteIUO2yajBMVEUZSxjl9x6fiEQtM+I5Rca7M2D8edMDbyHLnXifGH1hJZdh8V5rA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@7.3.2': + resolution: {integrity: sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/rawlist@4.0.10': + resolution: {integrity: sha512-vOQbQkmhaCsF2bUmjoyRSZJBz77UnIF/F3ZS2LMgwbgyaG2WgwKHh0WKNj0APDB72WDbZijhW5nObQbk+TnbcA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/search@3.0.10': + resolution: {integrity: sha512-EAVKAz6P1LajZOdoL+R+XC3HJYSU261fbJzO4fCkJJ7UPFcm+nP+gzC+DDZWsb2WK9PQvKsnaKiNKsY8B6dBWQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/select@4.0.10': + resolution: {integrity: sha512-Tg8S9nESnCfISu5tCZSuXpXq0wHuDVimj7xyHstABgR34zcJnLdq/VbjB2mdZvNAMAehYBnNzSjxB06UE8LLAA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/type@1.5.5': + resolution: {integrity: sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==} + engines: {node: '>=18'} + + '@inquirer/type@3.0.5': + resolution: {integrity: sha512-ZJpeIYYueOz/i/ONzrfof8g89kNdO2hjGuvULROo3O8rlB2CRtSseE5KeirnyE4t/thAn/EwvS/vuQeJCn+NZg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@js-sdsl/ordered-map@4.4.2': + resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + + '@jsonjoy.com/base64@1.1.2': + resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/json-pack@1.2.0': + resolution: {integrity: sha512-io1zEbbYcElht3tdlqEOFxZ0dMTYrHz9iMf0gqn1pPjZFTCgM5R4R5IMA20Chb2UPYYsxjzs8CgZ7Nb5n2K2rA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/util@1.5.0': + resolution: {integrity: sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@leichtgewicht/ip-codec@2.0.5': + resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} + + '@listr2/prompt-adapter-inquirer@2.0.18': + resolution: {integrity: sha512-0hz44rAcrphyXcA8IS7EJ2SCoaBZD2u5goE8S/e+q/DL+dOGpqpcLidVOFeLG3VgML62SXmfRLAhWt0zL1oW4Q==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@inquirer/prompts': '>= 3 < 8' + + '@lmdb/lmdb-darwin-arm64@3.2.6': + resolution: {integrity: sha512-yF/ih9EJJZc72psFQbwnn8mExIWfTnzWJg+N02hnpXtDPETYLmQswIMBn7+V88lfCaFrMozJsUvcEQIkEPU0Gg==} + cpu: [arm64] + os: [darwin] + + '@lmdb/lmdb-darwin-x64@3.2.6': + resolution: {integrity: sha512-5BbCumsFLbCi586Bb1lTWQFkekdQUw8/t8cy++Uq251cl3hbDIGEwD9HAwh8H6IS2F6QA9KdKmO136LmipRNkg==} + cpu: [x64] + os: [darwin] + + '@lmdb/lmdb-linux-arm64@3.2.6': + resolution: {integrity: sha512-l5VmJamJ3nyMmeD1ANBQCQqy7do1ESaJQfKPSm2IG9/ADZryptTyCj8N6QaYgIWewqNUrcbdMkJajRQAt5Qjfg==} + cpu: [arm64] + os: [linux] + + '@lmdb/lmdb-linux-arm@3.2.6': + resolution: {integrity: sha512-+6XgLpMb7HBoWxXj+bLbiiB4s0mRRcDPElnRS3LpWRzdYSe+gFk5MT/4RrVNqd2MESUDmb53NUXw1+BP69bjiQ==} + cpu: [arm] + os: [linux] + + '@lmdb/lmdb-linux-x64@3.2.6': + resolution: {integrity: sha512-nDYT8qN9si5+onHYYaI4DiauDMx24OAiuZAUsEqrDy+ja/3EbpXPX/VAkMV8AEaQhy3xc4dRC+KcYIvOFefJ4Q==} + cpu: [x64] + os: [linux] + + '@lmdb/lmdb-win32-x64@3.2.6': + resolution: {integrity: sha512-XlqVtILonQnG+9fH2N3Aytria7P/1fwDgDhl29rde96uH2sLB8CHORIf2PfuLVzFQJ7Uqp8py9AYwr3ZUCFfWg==} + cpu: [x64] + os: [win32] + + '@microsoft/api-extractor-model@7.30.3': + resolution: {integrity: sha512-yEAvq0F78MmStXdqz9TTT4PZ05Xu5R8nqgwI5xmUmQjWBQ9E6R2n8HB/iZMRciG4rf9iwI2mtuQwIzDXBvHn1w==} + + '@microsoft/api-extractor@7.50.0': + resolution: {integrity: sha512-Ds/PHTiVzuENQsmXrJKkSdfgNkr/SDG/2rDef0AWl3BchAnXdO7gXaYsAkNx4gWiC4OngNA3fQfd3+BcQxP1DQ==} + hasBin: true + + '@microsoft/tsdoc-config@0.17.1': + resolution: {integrity: sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==} + + '@microsoft/tsdoc@0.15.1': + resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==} + + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': + resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==} + cpu: [arm64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': + resolution: {integrity: sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==} + cpu: [x64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': + resolution: {integrity: sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==} + cpu: [arm64] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': + resolution: {integrity: sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==} + cpu: [arm] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': + resolution: {integrity: sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==} + cpu: [x64] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': + resolution: {integrity: sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==} + cpu: [x64] + os: [win32] + + '@napi-rs/nice-android-arm-eabi@1.0.1': + resolution: {integrity: sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w==} + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + + '@napi-rs/nice-android-arm64@1.0.1': + resolution: {integrity: sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@napi-rs/nice-darwin-arm64@1.0.1': + resolution: {integrity: sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@napi-rs/nice-darwin-x64@1.0.1': + resolution: {integrity: sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@napi-rs/nice-freebsd-x64@1.0.1': + resolution: {integrity: sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + + '@napi-rs/nice-linux-arm-gnueabihf@1.0.1': + resolution: {integrity: sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@napi-rs/nice-linux-arm64-gnu@1.0.1': + resolution: {integrity: sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/nice-linux-arm64-musl@1.0.1': + resolution: {integrity: sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/nice-linux-ppc64-gnu@1.0.1': + resolution: {integrity: sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q==} + engines: {node: '>= 10'} + cpu: [ppc64] + os: [linux] + + '@napi-rs/nice-linux-riscv64-gnu@1.0.1': + resolution: {integrity: sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig==} + engines: {node: '>= 10'} + cpu: [riscv64] + os: [linux] + + '@napi-rs/nice-linux-s390x-gnu@1.0.1': + resolution: {integrity: sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg==} + engines: {node: '>= 10'} + cpu: [s390x] + os: [linux] + + '@napi-rs/nice-linux-x64-gnu@1.0.1': + resolution: {integrity: sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/nice-linux-x64-musl@1.0.1': + resolution: {integrity: sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/nice-win32-arm64-msvc@1.0.1': + resolution: {integrity: sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@napi-rs/nice-win32-ia32-msvc@1.0.1': + resolution: {integrity: sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw==} + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + + '@napi-rs/nice-win32-x64-msvc@1.0.1': + resolution: {integrity: sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@napi-rs/nice@1.0.1': + resolution: {integrity: sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ==} + engines: {node: '>= 10'} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@npmcli/agent@3.0.0': + resolution: {integrity: sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@npmcli/fs@4.0.0': + resolution: {integrity: sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@npmcli/git@6.0.3': + resolution: {integrity: sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@npmcli/installed-package-contents@3.0.0': + resolution: {integrity: sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + '@npmcli/node-gyp@4.0.0': + resolution: {integrity: sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@npmcli/package-json@6.1.1': + resolution: {integrity: sha512-d5qimadRAUCO4A/Txw71VM7UrRZzV+NPclxz/dc+M6B2oYwjWTjqh8HA/sGQgs9VZuJ6I/P7XIAlJvgrl27ZOw==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@npmcli/promise-spawn@8.0.2': + resolution: {integrity: sha512-/bNJhjc+o6qL+Dwz/bqfTQClkEO5nTQ1ZEcdCkAQjhkZMHIh22LPG7fNh1enJP1NKWDqYiiABnjFCY7E0zHYtQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@npmcli/redact@3.1.1': + resolution: {integrity: sha512-3Hc2KGIkrvJWJqTbvueXzBeZlmvoOxc2jyX00yzr3+sNFquJg0N8hH4SAPLPVrkWIRQICVpVgjrss971awXVnA==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@npmcli/run-script@9.1.0': + resolution: {integrity: sha512-aoNSbxtkePXUlbZB+anS1LqsJdctG5n3UVhfU47+CDdwMi6uNTBMF9gPcQRnqghQd2FGzcwwIFBruFMxjhBewg==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@octokit/auth-token@5.1.2': + resolution: {integrity: sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==} + engines: {node: '>= 18'} + + '@octokit/core@6.1.4': + resolution: {integrity: sha512-lAS9k7d6I0MPN+gb9bKDt7X8SdxknYqAMh44S5L+lNqIN2NuV8nvv3g8rPp7MuRxcOpxpUIATWprO0C34a8Qmg==} + engines: {node: '>= 18'} + + '@octokit/endpoint@10.1.3': + resolution: {integrity: sha512-nBRBMpKPhQUxCsQQeW+rCJ/OPSMcj3g0nfHn01zGYZXuNDvvXudF/TYY6APj5THlurerpFN4a/dQAIAaM6BYhA==} + engines: {node: '>= 18'} + + '@octokit/graphql@8.2.1': + resolution: {integrity: sha512-n57hXtOoHrhwTWdvhVkdJHdhTv0JstjDbDRhJfwIRNfFqmSo1DaK/mD2syoNUoLCyqSjBpGAKOG0BuwF392slw==} + engines: {node: '>= 18'} + + '@octokit/openapi-types@23.0.1': + resolution: {integrity: sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==} + + '@octokit/plugin-paginate-rest@11.4.3': + resolution: {integrity: sha512-tBXaAbXkqVJlRoA/zQVe9mUdb8rScmivqtpv3ovsC5xhje/a+NOCivs7eUhWBwCApJVsR4G5HMeaLbq7PxqZGA==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/plugin-request-log@5.3.1': + resolution: {integrity: sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/plugin-rest-endpoint-methods@13.3.1': + resolution: {integrity: sha512-o8uOBdsyR+WR8MK9Cco8dCgvG13H1RlM1nWnK/W7TEACQBFux/vPREgKucxUfuDQ5yi1T3hGf4C5ZmZXAERgwQ==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/request-error@6.1.7': + resolution: {integrity: sha512-69NIppAwaauwZv6aOzb+VVLwt+0havz9GT5YplkeJv7fG7a40qpLt/yZKyiDxAhgz0EtgNdNcb96Z0u+Zyuy2g==} + engines: {node: '>= 18'} + + '@octokit/request@9.2.2': + resolution: {integrity: sha512-dZl0ZHx6gOQGcffgm1/Sf6JfEpmh34v3Af2Uci02vzUYz6qEN6zepoRtmybWXIGXFIK8K9ylE3b+duCWqhArtg==} + engines: {node: '>= 18'} + + '@octokit/rest@21.1.1': + resolution: {integrity: sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==} + engines: {node: '>= 18'} + + '@octokit/types@13.8.0': + resolution: {integrity: sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==} + + '@opentelemetry/api@1.9.0': + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/context-async-hooks@1.30.1': + resolution: {integrity: sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@1.30.1': + resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/semantic-conventions@1.28.0': + resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} + engines: {node: '>=14'} + + '@opentelemetry/semantic-conventions@1.30.0': + resolution: {integrity: sha512-4VlGgo32k2EQ2wcCY3vEU28A0O13aOtHz3Xt2/2U5FAh9EfhD6t6DqL5Z6yAnRCntbTFDU4YfbpyzSlHNWycPw==} + engines: {node: '>=14'} + + '@parcel/watcher-android-arm64@2.5.1': + resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.1': + resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.1': + resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.1': + resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.1': + resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-musl@2.5.1': + resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.5.1': + resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.1': + resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.1': + resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-win32-arm64@2.5.1': + resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.1': + resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.1': + resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.1': + resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} + engines: {node: '>= 10.0.0'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + + '@puppeteer/browsers@2.8.0': + resolution: {integrity: sha512-yTwt2KWRmCQAfhvbCRjebaSX8pV1//I0Y3g+A7f/eS7gf0l4eRJoUCvcYdVtboeU4CTOZQuqYbZNS8aBYb8ROQ==} + engines: {node: '>=18'} + hasBin: true + + '@rollup/plugin-alias@5.1.1': + resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/plugin-commonjs@28.0.3': + resolution: {integrity: sha512-pyltgilam1QPdn+Zd9gaCfOLcnjMEJ9gV+bTw6/r73INdvzf1ah9zLIJBm+kW7R6IUFIQ1YO+VqZtYxZNWFPEQ==} + engines: {node: '>=16.0.0 || 14 >= 14.17'} + peerDependencies: + rollup: ^2.68.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/plugin-json@6.1.0': + resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/plugin-node-resolve@13.3.0': + resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^2.42.0 + + '@rollup/plugin-node-resolve@15.3.1': + resolution: {integrity: sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.78.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/pluginutils@3.1.0': + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + + '@rollup/pluginutils@5.1.4': + resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.34.8': + resolution: {integrity: sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.34.8': + resolution: {integrity: sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.34.8': + resolution: {integrity: sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.34.8': + resolution: {integrity: sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.34.8': + resolution: {integrity: sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.34.8': + resolution: {integrity: sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.34.8': + resolution: {integrity: sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.34.8': + resolution: {integrity: sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.34.8': + resolution: {integrity: sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.34.8': + resolution: {integrity: sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.34.8': + resolution: {integrity: sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.34.8': + resolution: {integrity: sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.34.8': + resolution: {integrity: sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.34.8': + resolution: {integrity: sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.34.8': + resolution: {integrity: sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.34.8': + resolution: {integrity: sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.34.8': + resolution: {integrity: sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.34.8': + resolution: {integrity: sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.34.8': + resolution: {integrity: sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==} + cpu: [x64] + os: [win32] + + '@rollup/wasm-node@4.35.0': + resolution: {integrity: sha512-mVs1GGfgeDCcMCFN5FystW0B5XjwhARAnomDBm2wTITTAioNr+YrUJ4UPjV33iXiLH1xAKWuUo30Od5HzrfQyA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@rushstack/node-core-library@5.11.0': + resolution: {integrity: sha512-I8+VzG9A0F3nH2rLpPd7hF8F7l5Xb7D+ldrWVZYegXM6CsKkvWc670RlgK3WX8/AseZfXA/vVrh0bpXe2Y2UDQ==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + + '@rushstack/rig-package@0.5.3': + resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==} + + '@rushstack/terminal@0.15.0': + resolution: {integrity: sha512-vXQPRQ+vJJn4GVqxkwRe+UGgzNxdV8xuJZY2zem46Y0p3tlahucH9/hPmLGj2i9dQnUBFiRnoM9/KW7PYw8F4Q==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + + '@rushstack/ts-command-line@4.23.5': + resolution: {integrity: sha512-jg70HfoK44KfSP3MTiL5rxsZH7X1ktX3cZs9Sl8eDu1/LxJSbPsh0MOFRC710lIuYYSgxWjI5AjbCBAl7u3RxA==} + + '@sigstore/bundle@3.1.0': + resolution: {integrity: sha512-Mm1E3/CmDDCz3nDhFKTuYdB47EdRFRQMOE/EAbiG1MJW77/w1b3P7Qx7JSrVJs8PfwOLOVcKQCHErIwCTyPbag==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@sigstore/core@2.0.0': + resolution: {integrity: sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@sigstore/protobuf-specs@0.4.0': + resolution: {integrity: sha512-o09cLSIq9EKyRXwryWDOJagkml9XgQCoCSRjHOnHLnvsivaW7Qznzz6yjfV7PHJHhIvyp8OH7OX8w0Dc5bQK7A==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@sigstore/sign@3.1.0': + resolution: {integrity: sha512-knzjmaOHOov1Ur7N/z4B1oPqZ0QX5geUfhrVaqVlu+hl0EAoL4o+l0MSULINcD5GCWe3Z0+YJO8ues6vFlW0Yw==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@sigstore/tuf@3.1.0': + resolution: {integrity: sha512-suVMQEA+sKdOz5hwP9qNcEjX6B45R+hFFr4LAWzbRc5O+U2IInwvay/bpG5a4s+qR35P/JK/PiKiRGjfuLy1IA==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@sigstore/verify@2.1.0': + resolution: {integrity: sha512-kAAM06ca4CzhvjIZdONAL9+MLppW3K48wOFy1TbuaWFW/OMfl8JuTgW0Bm02JB1WJGT/ET2eqav0KTEKmxqkIA==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + + '@socket.io/component-emitter@3.1.2': + resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + + '@stylistic/eslint-plugin@3.1.0': + resolution: {integrity: sha512-pA6VOrOqk0+S8toJYhQGv2MWpQQR0QpeUo9AhNkC49Y26nxBQ/nH1rta9bUU1rPw2fJ1zZEMV5oCX5AazT7J2g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.40.0' + + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + + '@tootallnate/quickjs-emscripten@0.23.0': + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@tufjs/canonical-json@2.0.0': + resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==} + engines: {node: ^16.14.0 || >=18.0.0} + + '@tufjs/models@3.0.1': + resolution: {integrity: sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@types/accepts@1.3.7': + resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} + + '@types/argparse@1.0.38': + resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} + + '@types/babel__code-frame@7.0.6': + resolution: {integrity: sha512-Anitqkl3+KrzcW2k77lRlg/GfLZLWXBuNgbEcIOU6M92yw42vsd3xV/Z/yAHEj8m+KUjL6bWOVOFqX8PFPJ4LA==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/big.js@6.2.2': + resolution: {integrity: sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==} + + '@types/body-parser@1.19.5': + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + + '@types/bonjour@3.5.13': + resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} + + '@types/browser-sync@2.29.0': + resolution: {integrity: sha512-d2V8FDX/LbDCSm343N2VChzDxvll0h76I8oSigYpdLgPDmcdcR6fywTggKBkUiDM3qAbHOq7NZvepj/HJM5e2g==} + + '@types/caseless@0.12.5': + resolution: {integrity: sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==} + + '@types/co-body@6.1.3': + resolution: {integrity: sha512-UhuhrQ5hclX6UJctv5m4Rfp52AfG9o9+d9/HwjxhVB5NjXxr5t9oKgJxN8xRHgr35oo8meUEHUPFWiKg6y71aA==} + + '@types/command-line-args@5.2.3': + resolution: {integrity: sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==} + + '@types/connect-history-api-fallback@1.5.4': + resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/content-disposition@0.5.8': + resolution: {integrity: sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==} + + '@types/convert-source-map@2.0.3': + resolution: {integrity: sha512-ag0BfJLZf6CQz8VIuRIEYQ5Ggwk/82uvTQf27RcpyDNbY0Vw49LIPqAxk5tqYfrCs9xDaIMvl4aj7ZopnYL8bA==} + + '@types/cookies@0.9.0': + resolution: {integrity: sha512-40Zk8qR147RABiQ7NQnBzWzDcjKzNrntB5BAmeGCb2p/MIyOE+4BVvc17wumsUqUw00bJYqoXFHYygQnEFh4/Q==} + + '@types/cors@2.8.17': + resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} + + '@types/debounce@1.2.4': + resolution: {integrity: sha512-jBqiORIzKDOToaF63Fm//haOCHuwQuLa2202RK4MozpA6lh93eCBc+/8+wZn5OzjJt3ySdc+74SXWXB55Ewtyw==} + + '@types/duplexify@3.6.4': + resolution: {integrity: sha512-2eahVPsd+dy3CL6FugAzJcxoraWhUghZGEQJns1kTKfCXWKJ5iG/VkaB05wRVrDKHfOFKqb0X0kXh91eE99RZg==} + + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + + '@types/estree@0.0.39': + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/express-serve-static-core@4.19.6': + resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} + + '@types/express-serve-static-core@5.0.6': + resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==} + + '@types/express@4.17.21': + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + + '@types/express@5.0.0': + resolution: {integrity: sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==} + + '@types/glob@7.2.0': + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@types/http-assert@1.5.6': + resolution: {integrity: sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw==} + + '@types/http-errors@2.0.4': + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + + '@types/http-proxy@1.17.16': + resolution: {integrity: sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==} + + '@types/ini@4.1.1': + resolution: {integrity: sha512-MIyNUZipBTbyUNnhvuXJTY7B6qNI78meck9Jbv3wk0OgNwRyOOVEKDutAkOs1snB/tx0FafyR6/SN4Ps0hZPeg==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/jasmine-reporters@2.5.3': + resolution: {integrity: sha512-8aojAUdgdiD9VQbllBJb/9gny3lOjz9T5gyMcbYlKe6npwGVsarbr8v2JYSFJSZSuFYXcPVzFG2lLX3ib0j/DA==} + + '@types/jasmine@5.1.7': + resolution: {integrity: sha512-DVOfk9FaClQfNFpSfaML15jjB5cjffDMvjtph525sroR5BEAW2uKnTOYUTqTFuZFjNvH0T5XMIydvIctnUKufw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/karma@6.3.9': + resolution: {integrity: sha512-sjE/MHnoAZAQYAKRXAbjTOiBKyGGErEM725bruRcmDdMa2vp1bjWPhApI7/i564PTyHlzc3vIGXLL6TFIpAxFg==} + + '@types/keygrip@1.0.6': + resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==} + + '@types/koa-compose@3.2.8': + resolution: {integrity: sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==} + + '@types/koa@2.15.0': + resolution: {integrity: sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==} + + '@types/less@3.0.8': + resolution: {integrity: sha512-Gjm4+H9noDJgu5EdT3rUw5MhPBag46fiOy27BefvWkNL8mlZnKnCaVVVTLKj6RYXed9b62CPKnPav9govyQDzA==} + + '@types/loader-utils@2.0.6': + resolution: {integrity: sha512-cgu0Xefgq9O5FjFR78jgI6X31aPjDWCaJ6LCfRtlj6BtyVVWiXagysSYlPACwGKAzRwsFLjKXcj4iGfcVt6cLw==} + + '@types/lodash@4.17.16': + resolution: {integrity: sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==} + + '@types/long@4.0.2': + resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} + + '@types/micromatch@2.3.35': + resolution: {integrity: sha512-J749bHo/Zu56w0G0NI/IGHLQPiSsjx//0zJhfEVAN95K/xM5C8ZDmhkXtU3qns0sBOao7HuQzr8XV1/2o5LbXA==} + + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + + '@types/minimatch@5.1.2': + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + + '@types/node-fetch@3.0.2': + resolution: {integrity: sha512-3q5FyT6iuekUxXeL2qjcyIhtMJdfMF7RGhYXWKkYpdcW9k36A/+txXrjG0l+NMVkiC30jKNrcOqVlqBl7BcCHA==} + + '@types/node-forge@1.3.11': + resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + + '@types/node@10.17.60': + resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} + + '@types/node@18.19.76': + resolution: {integrity: sha512-yvR7Q9LdPz2vGpmpJX5LolrgRdWvB67MJKDPSgIIzpFbaf9a1j/f5DnLp5VDyHGMR0QZHlTr1afsD87QCXFHKw==} + + '@types/node@22.13.10': + resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==} + + '@types/npm-package-arg@6.1.4': + resolution: {integrity: sha512-vDgdbMy2QXHnAruzlv68pUtXCjmqUk3WrBAsRboRovsOmxbfn/WiYCjmecyKjGztnMps5dWp4Uq2prp+Ilo17Q==} + + '@types/npm-registry-fetch@8.0.7': + resolution: {integrity: sha512-db9iBh7kDDg4lRT4k4XZ6IiecTEgFCID4qk+VDVPbtzU855q3KZLCn08ATr4H27ntRJVhulQ7GWjl24H42x96w==} + + '@types/npmlog@7.0.0': + resolution: {integrity: sha512-hJWbrKFvxKyWwSUXjZMYTINsSOY6IclhvGOZ97M8ac2tmR9hMwmTnYaMdpGhvju9ctWLTPhCS+eLfQNluiEjQQ==} + + '@types/pacote@11.1.8': + resolution: {integrity: sha512-/XLR0VoTh2JEO0jJg1q/e6Rh9bxjBq9vorJuQmtT7rRrXSiWz7e7NsvXVYJQ0i8JxMlBMPPYDTnrRe7MZRFA8Q==} + + '@types/parse-glob@3.0.32': + resolution: {integrity: sha512-n4xmml2WKR12XeQprN8L/sfiVPa8FHS3k+fxp4kSr/PA2GsGUgFND+bvISJxM0y5QdvzNEGjEVU3eIrcKks/pA==} + + '@types/parse5@6.0.3': + resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} + + '@types/picomatch@3.0.2': + resolution: {integrity: sha512-n0i8TD3UDB7paoMMxA3Y65vUncFJXjcUf7lQY7YyKGl6031FNjfsLs6pdLFCy2GNFxItPJG8GvvpbZc2skH7WA==} + + '@types/progress@2.0.7': + resolution: {integrity: sha512-iadjw02vte8qWx7U0YM++EybBha2CQLPGu9iJ97whVgJUT5Zq9MjAPYUnbfRI2Kpehimf1QjFJYxD0t8nqzu5w==} + + '@types/pumpify@1.4.4': + resolution: {integrity: sha512-+cWbQUecD04MQYkjNBhPmcUIP368aloYmqm+ImdMKA8rMpxRNAhZAD6gIj+sAVTF1DliqrT/qUp6aGNi/9U3tw==} + + '@types/q@0.0.32': + resolution: {integrity: sha512-qYi3YV9inU/REEfxwVcGZzbS3KG/Xs90lv0Pr+lDtuVjBPGd1A+eciXzVSaRvLify132BfcvhvEjeVahrUl0Ug==} + + '@types/qs@6.9.18': + resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} + + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + '@types/request@2.48.12': + resolution: {integrity: sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==} + + '@types/resolve@1.17.1': + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + + '@types/resolve@1.20.2': + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + + '@types/resolve@1.20.6': + resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} + + '@types/retry@0.12.2': + resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} + + '@types/selenium-webdriver@3.0.26': + resolution: {integrity: sha512-dyIGFKXfUFiwkMfNGn1+F6b80ZjR3uSYv1j6xVJSDlft5waZ2cwkHW4e7zNzvq7hiEackcgvBpmnXZrI1GltPg==} + + '@types/selenium-webdriver@4.1.28': + resolution: {integrity: sha512-Au7CXegiS7oapbB16zxPToY4Cjzi9UQQMf3W2ZZM8PigMLTGR3iUAHjPUTddyE5g1SBjT/qpmvlsAQLBfNAdKg==} + + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + + '@types/send@0.17.4': + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + + '@types/serve-index@1.9.4': + resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} + + '@types/serve-static@1.15.7': + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + + '@types/shelljs@0.8.15': + resolution: {integrity: sha512-vzmnCHl6hViPu9GNLQJ+DZFd6BQI2DBTUeOvYHqkWQLMfKAAQYMb/xAmZkTogZI/vqXHCWkqDRymDI5p0QTi5Q==} + + '@types/sockjs@0.3.36': + resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} + + '@types/source-list-map@0.1.6': + resolution: {integrity: sha512-5JcVt1u5HDmlXkwOD2nslZVllBBc7HDuOICfiZah2Z0is8M8g+ddAEawbmd3VjedfDHBzxCaXLs07QEmb7y54g==} + + '@types/ssri@7.1.5': + resolution: {integrity: sha512-odD/56S3B51liILSk5aXJlnYt99S6Rt9EFDDqGtJM26rKHApHcwyU/UoYHrzKkdkHMAIquGWCuHtQTbes+FRQw==} + + '@types/stack-trace@0.0.33': + resolution: {integrity: sha512-O7in6531Bbvlb2KEsJ0dq0CHZvc3iWSR5ZYMtvGgnHA56VgriAN/AU2LorfmcvAl2xc9N5fbCTRyMRRl8nd74g==} + + '@types/supports-color@10.0.0': + resolution: {integrity: sha512-Kpp/hhA8/pcxqBBKmOCIgvwCOJAI5y6TWTHhhqnB6KmuYlKtixKgN/Z7VzhShdgONe2jYREnTQbsrb3E0nt/OQ==} + deprecated: This is a stub types definition. supports-color provides its own type definitions, so you do not need this installed. + + '@types/tapable@1.0.12': + resolution: {integrity: sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q==} + + '@types/tmp@0.2.6': + resolution: {integrity: sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + + '@types/uglify-js@3.17.5': + resolution: {integrity: sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==} + + '@types/watchpack@2.4.4': + resolution: {integrity: sha512-SbuSavsPxfOPZwVHBgQUVuzYBe6+8KL7dwiJLXaj5rmv3DxktOMwX5WP1J6UontwUbewjVoc7pCgZvqy6rPn+A==} + + '@types/webpack-sources@3.2.3': + resolution: {integrity: sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw==} + + '@types/webpack@4.41.40': + resolution: {integrity: sha512-u6kMFSBM9HcoTpUXnL6mt2HSzftqb3JgYV6oxIgL2dl6sX6aCa5k6SOkzv5DuZjBTPUE/dJltKtwwuqrkZHpfw==} + + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + + '@types/ws@8.18.0': + resolution: {integrity: sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==} + + '@types/ws@8.5.14': + resolution: {integrity: sha512-bd/YFLW+URhBzMXurx7lWByOu+xzU9+kb3RboOteXYDfW+tr+JZa99OyNmPINEGB/ahzKrEuc8rcv4gnpJmxTw==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + + '@types/yarnpkg__lockfile@1.1.9': + resolution: {integrity: sha512-GD4Fk15UoP5NLCNor51YdfL9MSdldKCqOC9EssrRw3HVfar9wUZ5y8Lfnp+qVD6hIinLr8ygklDYnmlnlQo12Q==} + + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + + '@typescript-eslint/eslint-plugin@8.24.1': + resolution: {integrity: sha512-ll1StnKtBigWIGqvYDVuDmXJHVH4zLVot1yQ4fJtLpL7qacwkxJc1T0bptqw+miBQ/QfUbhl1TcQ4accW5KUyA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: 5.8.1-rc + + '@typescript-eslint/parser@8.24.1': + resolution: {integrity: sha512-Tqoa05bu+t5s8CTZFaGpCH2ub3QeT9YDkXbPd3uQ4SfsLoh1/vv2GEYAioPoxCWJJNsenXlC88tRjwoHNts1oQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: 5.8.1-rc + + '@typescript-eslint/scope-manager@8.24.1': + resolution: {integrity: sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/scope-manager@8.26.0': + resolution: {integrity: sha512-E0ntLvsfPqnPwng8b8y4OGuzh/iIOm2z8U3S9zic2TeMLW61u5IH2Q1wu0oSTkfrSzwbDJIB/Lm8O3//8BWMPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.24.1': + resolution: {integrity: sha512-/Do9fmNgCsQ+K4rCz0STI7lYB4phTtEXqqCAs3gZW0pnK7lWNkvWd5iW545GSmApm4AzmQXmSqXPO565B4WVrw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: 5.8.1-rc + + '@typescript-eslint/types@8.24.1': + resolution: {integrity: sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/types@8.26.0': + resolution: {integrity: sha512-89B1eP3tnpr9A8L6PZlSjBvnJhWXtYfZhECqlBl1D9Lme9mHO6iWlsprBtVenQvY1HMhax1mWOjhtL3fh/u+pA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.24.1': + resolution: {integrity: sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: 5.8.1-rc + + '@typescript-eslint/typescript-estree@8.26.0': + resolution: {integrity: sha512-tiJ1Hvy/V/oMVRTbEOIeemA2XoylimlDQ03CgPPNaHYZbpsc78Hmngnt+WXZfJX1pjQ711V7g0H7cSJThGYfPQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: 5.8.1-rc + + '@typescript-eslint/utils@8.24.1': + resolution: {integrity: sha512-OOcg3PMMQx9EXspId5iktsI3eMaXVwlhC8BvNnX6B5w9a4dVgpkQZuU8Hy67TolKcl+iFWq0XX+jbDGN4xWxjQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: 5.8.1-rc + + '@typescript-eslint/utils@8.26.0': + resolution: {integrity: sha512-2L2tU3FVwhvU14LndnQCA2frYC8JnPDVKyQtWFPf8IYFMt/ykEN1bPolNhNbCVgOmdzTlWdusCTKA/9nKrf8Ig==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: 5.8.1-rc + + '@typescript-eslint/visitor-keys@8.24.1': + resolution: {integrity: sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/visitor-keys@8.26.0': + resolution: {integrity: sha512-2z8JQJWAzPdDd51dRQ/oqIJxe99/hoLIqmf8RMCAJQtYDc535W/Jt2+RTP4bP0aKeBG1F65yjIZuczOXCmbWwg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + + '@verdaccio/auth@8.0.0-next-8.7': + resolution: {integrity: sha512-CSLBAsCJT1oOpJ4OWnVGmN6o/ZilDNa7Aa5+AU1LI2lbRblqgr4BVRn07GFqimJ//6+tPzl8BHgyiCbBhh1ZiA==} + engines: {node: '>=18'} + + '@verdaccio/commons-api@10.2.0': + resolution: {integrity: sha512-F/YZANu4DmpcEV0jronzI7v2fGVWkQ5Mwi+bVmV+ACJ+EzR0c9Jbhtbe5QyLUuzR97t8R5E/Xe53O0cc2LukdQ==} + engines: {node: '>=8'} + + '@verdaccio/config@8.0.0-next-8.7': + resolution: {integrity: sha512-pA0WCWvvWY6vPRav+X0EuFmuK6M08zIpRzTKkqSriCWk6JUCZ07TDnN054AS8TSSOy6EaWgHxnUw3nTd34Z4Sg==} + engines: {node: '>=18'} + + '@verdaccio/core@8.0.0-next-8.1': + resolution: {integrity: sha512-kQRCB2wgXEh8H88G51eQgAFK9IxmnBtkQ8sY5FbmB6PbBkyHrbGcCp+2mtRqqo36j0W1VAlfM3XzoknMy6qQnw==} + engines: {node: '>=14'} + + '@verdaccio/core@8.0.0-next-8.7': + resolution: {integrity: sha512-pf8M2Z5EI/5Zdhdcm3aadb9Q9jiDsIredPD3+cIoDum8x3di2AIYvQD7i5BEramfzZlLXVICmFAulU7nUY11qg==} + engines: {node: '>=18'} + + '@verdaccio/file-locking@10.3.1': + resolution: {integrity: sha512-oqYLfv3Yg3mAgw9qhASBpjD50osj2AX4IwbkUtyuhhKGyoFU9eZdrbeW6tpnqUnj6yBMtAPm2eGD4BwQuX400g==} + engines: {node: '>=12'} + + '@verdaccio/file-locking@13.0.0-next-8.2': + resolution: {integrity: sha512-TcHgN3I/N28WBSvtukpGrJhBljl4jyIXq0vEv94vXAG6nUE3saK+vtgo8PfYA3Ueo88v/1zyAbiZM4uxwojCmQ==} + engines: {node: '>=18'} + + '@verdaccio/loaders@8.0.0-next-8.4': + resolution: {integrity: sha512-Powlqb4SuMbe6RVgxyyOXaCjuHCcK7oZA+lygaKZDpV9NSHJtbkkV4L+rXyCfTX3b0tKsBh7FzaIdgWc1rDeGQ==} + engines: {node: '>=18'} + + '@verdaccio/local-storage-legacy@11.0.2': + resolution: {integrity: sha512-7AXG7qlcVFmF+Nue2oKaraprGRtaBvrQIOvc/E89+7hAe399V01KnZI6E/ET56u7U9fq0MSlp92HBcdotlpUXg==} + engines: {node: '>=12'} + + '@verdaccio/logger-commons@8.0.0-next-8.7': + resolution: {integrity: sha512-sXNx57G1LVp81xF4qHer3AOcMEZ90W4FjxtYF0vmULcVg3ybdtStKAT/9ocZtVMvLWTPAauhqylfnXoRZYf32A==} + engines: {node: '>=18'} + + '@verdaccio/logger-prettify@8.0.0-next-8.1': + resolution: {integrity: sha512-vLhaGq0q7wtMCcqa0aQY6QOsMNarhTu/l4e6Z8mG/5LUH95GGLsBwpXLnKS94P3deIjsHhc9ycnEmG39txbQ1w==} + engines: {node: '>=18'} + + '@verdaccio/logger@8.0.0-next-8.7': + resolution: {integrity: sha512-5EMPdZhz2V08BP2rjhtN/Fz5KxCfPJBkYDitbk/eo+FCZ9nVdMCQE3WRbHEaXyJQcIso/LJ6RnL/zKN20E/rPg==} + engines: {node: '>=18'} + + '@verdaccio/middleware@8.0.0-next-8.7': + resolution: {integrity: sha512-Zad7KcdOsI1DUBt1TjQb08rIi/IFFaJKdPhj7M6oy5BX9l/4OM0TtbBueHFNS1+aU+t5eo8ue7ZHbqmjDY/6VQ==} + engines: {node: '>=18'} + + '@verdaccio/search-indexer@8.0.0-next-8.2': + resolution: {integrity: sha512-sWliVN5BkAGbZ3e/GD0CsZMfPJdRMRuN0tEKQFsvEJifxToq5UkfCw6vKaVvhezsTWqb+Rp5y+2d4n5BDOA49w==} + engines: {node: '>=18'} + + '@verdaccio/signature@8.0.0-next-8.1': + resolution: {integrity: sha512-lHD/Z2FoPQTtDYz6ZlXhj/lrg0SFirHrwCGt/cibl1GlePpx78WPdo03tgAyl0Qf+I35n484/gR1l9eixBQqYw==} + engines: {node: '>=18'} + + '@verdaccio/streams@10.2.1': + resolution: {integrity: sha512-OojIG/f7UYKxC4dYX8x5ax8QhRx1b8OYUAMz82rUottCuzrssX/4nn5QE7Ank0DUSX3C9l/HPthc4d9uKRJqJQ==} + engines: {node: '>=12', npm: '>=5'} + + '@verdaccio/tarball@13.0.0-next-8.7': + resolution: {integrity: sha512-EWRuEOLgb3UETxUsYg6+Mml6DDRiwQqKIEsE4Ys6y6rcH2vgW6XMnTt+s/v5pFI+zlbi6fxjOgQB1e6IJAwxVA==} + engines: {node: '>=18'} + + '@verdaccio/ui-theme@8.0.0-next-8.7': + resolution: {integrity: sha512-+7f7XqqIU+TVCHjsP6lWzCdsD4sM7MEhn4cu3mLW1kJZ7eenWKEltoqixQnoXJzaBjCiz+yXW1WkjMyEFLNbpg==} + + '@verdaccio/url@13.0.0-next-8.7': + resolution: {integrity: sha512-biFvwH3zIXYicA+SXNGvjMAe8oIQ5VddsfbO0ZXWlFs0lIz8cgI7QYPeSiCkU2VKpGzZ8pEKgqkxFsfFkU5kGA==} + engines: {node: '>=18'} + + '@verdaccio/utils@7.0.1-next-8.1': + resolution: {integrity: sha512-cyJdRrVa+8CS7UuIQb3K3IJFjMe64v38tYiBnohSmhRbX7dX9IT3jWbjrwkqWh4KeS1CS6BYENrGG1evJ2ggrQ==} + engines: {node: '>=12'} + + '@verdaccio/utils@8.1.0-next-8.7': + resolution: {integrity: sha512-4eqPCnPAJsL6gdVs0/oqZNgs2PnQW3HHBMgBHyEbb5A/ESI10TvRp+B7MRl9glUmy/aR5B6YSI68rgXvAFjdxA==} + engines: {node: '>=12'} + + '@vitejs/plugin-basic-ssl@1.2.0': + resolution: {integrity: sha512-mkQnxTkcldAzIsomk1UuLfAu9n+kpQ3JbHcpCp7d2Oo6ITtji8pHS3QToOWjhPFvNQSnhlkAjmGbhv2QvwO/7Q==} + engines: {node: '>=14.21.3'} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 + + '@web/browser-logs@0.4.1': + resolution: {integrity: sha512-ypmMG+72ERm+LvP+loj9A64MTXvWMXHUOu773cPO4L1SV/VWg6xA9Pv7vkvkXQX+ItJtCJt+KQ+U6ui2HhSFUw==} + engines: {node: '>=18.0.0'} + + '@web/config-loader@0.3.2': + resolution: {integrity: sha512-Vrjv/FexBGmAdnCYpJKLHX1dfT1UaUdvHmX1JRaWos9OvDf/tFznYJ5SpJwww3Rl87/ewvLSYG7kfsMqEAsizQ==} + engines: {node: '>=18.0.0'} + + '@web/dev-server-core@0.7.5': + resolution: {integrity: sha512-Da65zsiN6iZPMRuj4Oa6YPwvsmZmo5gtPWhW2lx3GTUf5CAEapjVpZVlUXnKPL7M7zRuk72jSsIl8lo+XpTCtw==} + engines: {node: '>=18.0.0'} + + '@web/dev-server-rollup@0.6.4': + resolution: {integrity: sha512-sJZfTGCCrdku5xYnQQG51odGI092hKY9YFM0X3Z0tRY3iXKXcYRaLZrErw5KfCxr6g0JRuhe4BBhqXTA5Q2I3Q==} + engines: {node: '>=18.0.0'} + + '@web/dev-server@0.4.6': + resolution: {integrity: sha512-jj/1bcElAy5EZet8m2CcUdzxT+CRvUjIXGh8Lt7vxtthkN9PzY9wlhWx/9WOs5iwlnG1oj0VGo6f/zvbPO0s9w==} + engines: {node: '>=18.0.0'} + hasBin: true + + '@web/parse5-utils@2.1.0': + resolution: {integrity: sha512-GzfK5disEJ6wEjoPwx8AVNwUe9gYIiwc+x//QYxYDAFKUp4Xb1OJAGLc2l2gVrSQmtPGLKrTRcW90Hv4pEq1qA==} + engines: {node: '>=18.0.0'} + + '@web/test-runner-chrome@0.18.0': + resolution: {integrity: sha512-EkB70HtHwY36pIbgn9HzqtKAv+i53qa0/UBrs+H0m8j24TxIEH9oWIdF9O/RFxjYpla7fIvZMhOFOjejgrRU5g==} + engines: {node: '>=18.0.0'} + + '@web/test-runner-commands@0.9.0': + resolution: {integrity: sha512-zeLI6QdH0jzzJMDV5O42Pd8WLJtYqovgdt0JdytgHc0d1EpzXDsc7NTCJSImboc2NcayIsWAvvGGeRF69SMMYg==} + engines: {node: '>=18.0.0'} + + '@web/test-runner-core@0.13.4': + resolution: {integrity: sha512-84E1025aUSjvZU1j17eCTwV7m5Zg3cZHErV3+CaJM9JPCesZwLraIa0ONIQ9w4KLgcDgJFw9UnJ0LbFf42h6tg==} + engines: {node: '>=18.0.0'} + + '@web/test-runner-coverage-v8@0.8.0': + resolution: {integrity: sha512-PskiucYpjUtgNfR2zF2AWqWwjXL7H3WW/SnCAYmzUrtob7X9o/+BjdyZ4wKbOxWWSbJO4lEdGIDLu+8X2Xw+lA==} + engines: {node: '>=18.0.0'} + + '@web/test-runner-mocha@0.9.0': + resolution: {integrity: sha512-ZL9F6FXd0DBQvo/h/+mSfzFTSRVxzV9st/AHhpgABtUtV/AIpVE9to6+xdkpu6827kwjezdpuadPfg+PlrBWqQ==} + engines: {node: '>=18.0.0'} + + '@web/test-runner@0.20.0': + resolution: {integrity: sha512-xN+4wgEm5xh0VSiC08eUYXW0QDt/NuzZyey4s7Nnjyjs9NkuJHd1jG9aNzfgL1edpJJ/RldHc0KiM2to1h2kxQ==} + engines: {node: '>=18.0.0'} + hasBin: true + + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} + + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} + + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} + + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} + + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} + + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + + '@xmldom/xmldom@0.8.10': + resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} + engines: {node: '>=10.0.0'} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + '@yarnpkg/lockfile@1.1.0': + resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + abbrev@3.0.0: + resolution: {integrity: sha512-+/kfrslGQ7TNV2ecmQwMJj/B65g5KVq1/L3SGVZ3tCYGqlzFuFCGBZJtMP99wH3NpEUyAjn0zPdPUg0D+DwrOA==} + engines: {node: ^18.17.0 || >=20.5.0} + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + engines: {node: '>=0.4.0'} + hasBin: true + + adjust-sourcemap-loader@4.0.0: + resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} + engines: {node: '>=8.9'} + + adm-zip@0.5.16: + resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} + engines: {node: '>=12.0'} + + agent-base@4.3.0: + resolution: {integrity: sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==} + engines: {node: '>= 4.0.0'} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + + ajv-draft-04@1.0.0: + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + ajv@8.13.0: + resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} + + ansi-html-community@0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} + hasBin: true + + ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + apache-md5@1.1.8: + resolution: {integrity: sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==} + engines: {node: '>=8'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + array-back@3.1.0: + resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} + engines: {node: '>=6'} + + array-back@6.2.2: + resolution: {integrity: sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==} + engines: {node: '>=12.17'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array-union@1.0.2: + resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} + engines: {node: '>=0.10.0'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array-uniq@1.0.3: + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} + engines: {node: '>=0.10.0'} + + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + arrify@1.0.1: + resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} + engines: {node: '>=0.10.0'} + + arrify@2.0.1: + resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} + engines: {node: '>=8'} + + asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + + assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + + ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + async-each-series@0.1.1: + resolution: {integrity: sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==} + engines: {node: '>=0.8.0'} + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + async-mutex@0.4.0: + resolution: {integrity: sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==} + + async@2.6.4: + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + + async@3.2.4: + resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + atob@2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} + hasBin: true + + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + aws-sign2@0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + + aws4@1.13.2: + resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} + + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + + babel-loader@9.2.1: + resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==} + engines: {node: '>= 14.15.0'} + peerDependencies: + '@babel/core': ^7.12.0 + webpack: '>=5' + + babel-plugin-polyfill-corejs2@0.4.12: + resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.11.1: + resolution: {integrity: sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.3: + resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + bare-events@2.5.4: + resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} + + bare-fs@4.0.1: + resolution: {integrity: sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg==} + engines: {bare: '>=1.7.0'} + + bare-os@3.5.1: + resolution: {integrity: sha512-LvfVNDcWLw2AnIw5f2mWUgumW3I3N/WYGiWeimhQC1Ybt71n2FjlS9GJKeCnFeg1MKZHxzIFmpFnBXDI+sBeFg==} + engines: {bare: '>=1.14.0'} + + bare-path@3.0.0: + resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} + + bare-stream@2.6.5: + resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==} + peerDependencies: + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + bare-events: + optional: true + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + base64id@2.0.0: + resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} + engines: {node: ^4.5.0 || >= 5.9} + + basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + engines: {node: '>=10.0.0'} + + batch@0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + + bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + + bcryptjs@2.4.3: + resolution: {integrity: sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==} + + beasties@0.2.0: + resolution: {integrity: sha512-Ljqskqx/tbZagIglYoJIMzH5zgssyp+in9+9sAyh15N22AornBeIDnb8EZ6Rk+6ShfMxd92uO3gfpT0NtZbpow==} + engines: {node: '>=14.0.0'} + + before-after-hook@3.0.2: + resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} + + big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + + big.js@6.2.2: + resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + blocking-proxy@1.0.1: + resolution: {integrity: sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==} + engines: {node: '>=6.9.x'} + hasBin: true + + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + bonjour-service@1.3.0: + resolution: {integrity: sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browser-or-node@3.0.0: + resolution: {integrity: sha512-iczIdVJzGEYhP5DqQxYM9Hh7Ztpqqi+CXZpSmX8ALFs9ecXkQIeqRyM6TfxEfMVpwhl3dSuDvxdzzo9sUOIVBQ==} + + browser-sync-client@3.0.3: + resolution: {integrity: sha512-TOEXaMgYNjBYIcmX5zDlOdjEqCeCN/d7opf/fuyUD/hhGVCfP54iQIDhENCi012AqzYZm3BvuFl57vbwSTwkSQ==} + engines: {node: '>=8.0.0'} + + browser-sync-ui@3.0.3: + resolution: {integrity: sha512-FcGWo5lP5VodPY6O/f4pXQy5FFh4JK0f2/fTBsp0Lx1NtyBWs/IfPPJbW8m1ujTW/2r07oUXKTF2LYZlCZktjw==} + + browser-sync@3.0.3: + resolution: {integrity: sha512-91hoBHKk1C4pGeD+oE9Ld222k2GNQEAsI5AElqR8iLLWNrmZR2LPP8B0h8dpld9u7kro5IEUB3pUb0DJ3n1cRQ==} + engines: {node: '>= 8.0.0'} + hasBin: true + + browserify-zlib@0.1.4: + resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + browserstack@1.6.1: + resolution: {integrity: sha512-GxtFjpIaKdbAyzHfFDKixKO8IBT7wR3NjbzrGc78nNs/Ciys9wU3/nBtsqsWv5nDSrdI5tz0peKuzCPuNXNUiw==} + + bs-recipes@1.3.4: + resolution: {integrity: sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==} + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + cacache@19.0.1: + resolution: {integrity: sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + cache-content-type@1.0.1: + resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} + engines: {node: '>= 6.0.0'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001703: + resolution: {integrity: sha512-kRlAGTRWgPsOj7oARC9m1okJEXdL/8fekFVcxA8Hl7GH4r/sN4OJn/i6Flde373T50KS7Y37oFbMwlE8+F42kQ==} + + caseless@0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + + chalk-template@0.4.0: + resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} + engines: {node: '>=12'} + + chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + checkpoint-stream@0.1.2: + resolution: {integrity: sha512-eYXIcydL3mPjjEVLxHdi1ISgTwmxGJZ8vyJ3lYVvFTDRyTOZMTbKZdRJqiA7Gi1rPcwOyyzcrZmGLL8ff7e69w==} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + + chrome-launcher@0.15.2: + resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} + engines: {node: '>=12.13.0'} + hasBin: true + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + chromium-bidi@2.1.2: + resolution: {integrity: sha512-vtRWBK2uImo5/W2oG6/cDkkHSm+2t6VHgnj+Rcwhb0pP74OoUb4GipyRX/T/y39gYQPhioP0DPShn+A7P6CHNw==} + peerDependencies: + devtools-protocol: '*' + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + clipanion@4.0.0-rc.4: + resolution: {integrity: sha512-CXkMQxU6s9GklO/1f714dkKBMu1lopS1WFF0B8o4AxPykR1hpozxSiUZ5ZUeBjfPgCWqbcNOtZVFhB8Lkfp1+Q==} + + cliui@6.0.0: + resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + + co-body@6.2.0: + resolution: {integrity: sha512-Kbpv2Yd1NdL1V/V4cwLVxraHDV6K8ayohr2rmH0J87Er8+zJjcTa6dAn9QMPC9CRgU8+aNajKbSf1TzDB1yKPA==} + engines: {node: '>=8.0.0'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + collection-utils@1.0.1: + resolution: {integrity: sha512-LA2YTIlR7biSpXkKYwwuzGjwL5rjWEZVOSnvdUc7gObvWe4WkjxOpfrdhoP7Hs09YWDVfg0Mal9BpAqLfVEzQg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + colors@1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + command-line-args@5.2.1: + resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} + engines: {node: '>=4.0.0'} + + command-line-usage@7.0.3: + resolution: {integrity: sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==} + engines: {node: '>=12.20.0'} + + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.7.5: + resolution: {integrity: sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==} + engines: {node: '>= 0.8.0'} + + compression@1.8.0: + resolution: {integrity: sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==} + engines: {node: '>= 0.8.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + connect-history-api-fallback@1.6.0: + resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==} + engines: {node: '>=0.8'} + + connect-history-api-fallback@2.0.0: + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} + engines: {node: '>=0.8'} + + connect@3.6.6: + resolution: {integrity: sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==} + engines: {node: '>= 0.10.0'} + + connect@3.7.0: + resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} + engines: {node: '>= 0.10.0'} + + consola@3.4.0: + resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==} + engines: {node: ^14.18.0 || >=16.10.0} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + cookies@0.9.1: + resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} + engines: {node: '>= 0.8'} + + copy-anything@2.0.6: + resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} + + copy-webpack-plugin@12.0.2: + resolution: {integrity: sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + webpack: ^5.1.0 + + core-js-compat@3.41.0: + resolution: {integrity: sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==} + + core-js@3.37.1: + resolution: {integrity: sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==} + + core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: 5.8.1-rc + peerDependenciesMeta: + typescript: + optional: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-fetch@3.1.5: + resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} + + cross-fetch@4.1.0: + resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + css-loader@7.1.2: + resolution: {integrity: sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + webpack: ^5.27.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + custom-event@1.0.1: + resolution: {integrity: sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==} + + dashdash@1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + + data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + date-format@4.0.14: + resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} + engines: {node: '>=4.0'} + + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + + debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + + deep-equal@1.0.1: + resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + + default-gateway@6.0.3: + resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} + engines: {node: '>= 10'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + + del@2.2.2: + resolution: {integrity: sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ==} + engines: {node: '>=0.10.0'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + + depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + dependency-graph@0.11.0: + resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} + engines: {node: '>= 0.6.0'} + + dependency-graph@1.0.0: + resolution: {integrity: sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==} + engines: {node: '>=4'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + + detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + + dev-ip@1.0.1: + resolution: {integrity: sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==} + engines: {node: '>= 0.8.0'} + hasBin: true + + devtools-protocol@0.0.1045489: + resolution: {integrity: sha512-D+PTmWulkuQW4D1NTiCRCFxF7pQPn0hgp4YyX4wAQ6xYXKOadSWPR3ENGDQ47MW/Ewc9v2rpC/UEEGahgBYpSQ==} + + devtools-protocol@0.0.1413902: + resolution: {integrity: sha512-yRtvFD8Oyk7C9Os3GmnFZLu53yAfsnyw1s+mLmHHUK0GQEc9zthHWvS1r67Zqzm5t7v56PILHIVZ7kmFMaL2yQ==} + + di@0.0.1: + resolution: {integrity: sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dns-packet@5.6.1: + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} + engines: {node: '>=6'} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-serialize@2.2.1: + resolution: {integrity: sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + duplexify@3.7.1: + resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} + + duplexify@4.1.3: + resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + easy-extender@2.3.4: + resolution: {integrity: sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==} + engines: {node: '>= 4.0.0'} + + eazy-logger@4.0.1: + resolution: {integrity: sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw==} + engines: {node: '>= 0.8.0'} + + ecc-jsbn@0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + electron-to-chromium@1.5.114: + resolution: {integrity: sha512-DFptFef3iktoKlFQK/afbo274/XNWD00Am0xa7M8FZUepHlHT8PEuiNBoRfFHbH1okqN58AlhbJ4QTkcnXorjA==} + + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + engine.io-client@6.6.3: + resolution: {integrity: sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==} + + engine.io-parser@5.2.3: + resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} + engines: {node: '>=10.0.0'} + + engine.io@6.6.4: + resolution: {integrity: sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==} + engines: {node: '>=10.2.0'} + + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + engines: {node: '>=10.13.0'} + + ent@2.2.2: + resolution: {integrity: sha512-kKvD1tO6BM+oK9HzCPpUdRb4vKFQY/FPTFmurMvh6LlN68VMrdj77w8yp51/kDbpkFOS9J8w5W6zIzgM2H8/hw==} + engines: {node: '>= 0.4'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + envinfo@7.14.0: + resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==} + engines: {node: '>=4'} + hasBin: true + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + + errno@0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + errorstacks@2.4.1: + resolution: {integrity: sha512-jE4i0SMYevwu/xxAuzhly/KTwtj0xDhbzB6m1xPImxTkw8wcCbgarOQPfCVMi5JKVyW7in29pNJCCJrry3Ynnw==} + + es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.1.0: + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + + esbuild-wasm@0.25.1: + resolution: {integrity: sha512-dZxPeDHcDIQ6ilml/NzYxnPbNkoVsHSFH3JGLSobttc5qYYgExMo8lh2XcB+w+AfiqykVDGK5PWanGB0gWaAWw==} + engines: {node: '>=18'} + hasBin: true + + esbuild@0.25.1: + resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + eslint-config-prettier@10.0.1: + resolution: {integrity: sha512-lZBts941cyJyeaooiKxAtzoPHTN+GbQTJFAIdQbRhA4/8whaAraEh47Whw/ZFfrjNSnlAxqfm9i0XVAEkULjCw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-module-utils@2.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-header@3.1.1: + resolution: {integrity: sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==} + peerDependencies: + eslint: '>=7.7.0' + + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + events-intercept@2.0.0: + resolution: {integrity: sha512-blk1va0zol9QOrdZt0rFXo5KMkNPVSp92Eju/Qz8THwKWKRKeE0T8Br/1aW6+Edkyq9xHYgYxn2QtOnUKPUp+Q==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + exponential-backoff@3.1.2: + resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} + + express-rate-limit@5.5.1: + resolution: {integrity: sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg==} + + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + engines: {node: '>= 0.10.0'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + + extsprintf@1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} + + extsprintf@1.4.1: + resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} + engines: {'0': node >=0.6.0} + + fast-content-type-parse@2.0.1: + resolution: {integrity: sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + faye-websocket@0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + fdir@6.4.3: + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@1.1.0: + resolution: {integrity: sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==} + engines: {node: '>= 0.8'} + + finalhandler@1.1.2: + resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} + engines: {node: '>= 0.8'} + + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + + find-cache-dir@3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + + find-cache-dir@4.0.0: + resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} + engines: {node: '>=14.16'} + + find-replace@3.0.0: + resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} + engines: {node: '>=4.0.0'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + find-up@6.3.0: + resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + forever-agent@0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + + form-data@2.3.3: + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} + engines: {node: '>= 0.12'} + + form-data@2.5.3: + resolution: {integrity: sha512-XHIrMD0NpDrNM/Ckf7XJiBbLl57KEhT3+i3yY+eWm+cqYZJQTZrKo8Y8AWKnuV5GT4scfuUGt9LzNoIx3dU1nQ==} + engines: {node: '>= 0.12'} + + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + engines: {node: '>= 6'} + + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} + + fs-extra@3.0.1: + resolution: {integrity: sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs-minipass@3.0.3: + resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gaxios@6.7.1: + resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} + engines: {node: '>=14'} + + gcp-metadata@6.1.1: + resolution: {integrity: sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==} + engines: {node: '>=14'} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + engines: {node: '>=18'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-npm-tarball-url@2.1.0: + resolution: {integrity: sha512-ro+DiMu5DXgRBabqXupW38h7WPZ9+Ad8UjwhvsmmN8w1sU7ab0nzAXvVZ4kqYg57OrqomRtJvepX5/xvFKNtjA==} + engines: {node: '>=12.17'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + get-uri@6.0.4: + resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} + engines: {node: '>= 14'} + + getpass@0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + globby@14.1.0: + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} + engines: {node: '>=18'} + + globby@5.0.0: + resolution: {integrity: sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ==} + engines: {node: '>=0.10.0'} + + google-auth-library@9.15.1: + resolution: {integrity: sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==} + engines: {node: '>=14'} + + google-gax@4.4.1: + resolution: {integrity: sha512-Phyp9fMfA00J3sZbJxbbB4jC55b7DBjE3F6poyL3wKMEBVKA79q6BGuHcTiM28yOzVql0NDbRL8MLLh8Iwk9Dg==} + engines: {node: '>=14'} + + google-logging-utils@0.0.2: + resolution: {integrity: sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==} + engines: {node: '>=14'} + + google-protobuf@3.21.4: + resolution: {integrity: sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ==} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + grpc-gcp@1.0.1: + resolution: {integrity: sha512-06r73IoGaAIpzT+DRPnw7V5BXvZ5mjy1OcKqSPX+ZHOgbLxT+lJfz8IN83z/sbA3t55ZX88MfDaaCjDGdveVIA==} + engines: {node: '>=12'} + peerDependencies: + protobufjs: '*' + + gtoken@7.1.0: + resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} + engines: {node: '>=14.0.0'} + + gunzip-maybe@1.4.2: + resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} + hasBin: true + + handle-thing@2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + + handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + + har-schema@2.0.0: + resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} + engines: {node: '>=4'} + + har-validator@5.1.5: + resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} + engines: {node: '>=6'} + deprecated: this library is no longer supported + + has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + hosted-git-info@8.0.2: + resolution: {integrity: sha512-sYKnA7eGln5ov8T8gnYlkSOxFJvywzEx9BueN6xo/GKO8PGiI6uK6xx+DIGe45T3bdVjLAQDQW1aicT8z8JwQg==} + engines: {node: ^18.17.0 || >=20.5.0} + + hpack.js@2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + + html-entities@2.5.2: + resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + htmlparser2@9.1.0: + resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + + http-assert@1.5.0: + resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} + engines: {node: '>= 0.8'} + + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + + http-deceiver@1.2.7: + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} + + http-errors@1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + + http-errors@1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} + engines: {node: '>= 0.6'} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-parser-js@0.5.9: + resolution: {integrity: sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==} + + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + http-proxy-middleware@2.0.7: + resolution: {integrity: sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true + + http-proxy-middleware@3.0.3: + resolution: {integrity: sha512-usY0HG5nyDUwtqpiZdETNbmKtw3QQ1jwYFZ9wi5iHzX2BcILwQKtYDJPo7XHTsu5Z0B2Hj3W9NNnbd+AjFWjqg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + + http-signature@1.2.0: + resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} + engines: {node: '>=0.8', npm: '>=1.3.7'} + + http-signature@1.4.0: + resolution: {integrity: sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==} + engines: {node: '>=0.10'} + + http-status-codes@2.2.0: + resolution: {integrity: sha512-feERVo9iWxvnejp3SEfm/+oNG517npqL2/PIA8ORjyOZjGC7TwCRQsZylciLS64i6pJ0wRYz3rkXLRwbtFa8Ng==} + + http-status-codes@2.3.0: + resolution: {integrity: sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==} + + https-proxy-agent@2.2.4: + resolution: {integrity: sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==} + engines: {node: '>= 4.5.0'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} + hasBin: true + + hyperdyperid@1.2.0: + resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} + engines: {node: '>=10.18'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + icss-utils@5.1.0: + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore-walk@7.0.0: + resolution: {integrity: sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.3: + resolution: {integrity: sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==} + engines: {node: '>= 4'} + + image-size@0.5.5: + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + immutable@3.8.2: + resolution: {integrity: sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==} + engines: {node: '>=0.10.0'} + + immutable@5.0.3: + resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + inflation@2.1.0: + resolution: {integrity: sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==} + engines: {node: '>= 0.8.0'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@5.0.0: + resolution: {integrity: sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==} + engines: {node: ^18.17.0 || >=20.5.0} + + injection-js@2.4.0: + resolution: {integrity: sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==} + + internal-ip@6.2.0: + resolution: {integrity: sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==} + engines: {node: '>=10'} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + + ip-regex@4.3.0: + resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} + engines: {node: '>=8'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + ipaddr.js@2.2.0: + resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} + engines: {node: '>= 10'} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-deflate@1.0.0: + resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-gzip@1.0.0: + resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==} + engines: {node: '>=0.10.0'} + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-ip@3.1.0: + resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} + engines: {node: '>=8'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + + is-network-error@1.1.0: + resolution: {integrity: sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==} + engines: {node: '>=16'} + + is-number-like@1.0.8: + resolution: {integrity: sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-cwd@1.0.0: + resolution: {integrity: sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==} + engines: {node: '>=0.10.0'} + + is-path-in-cwd@1.0.1: + resolution: {integrity: sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==} + engines: {node: '>=0.10.0'} + + is-path-inside@1.0.1: + resolution: {integrity: sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==} + engines: {node: '>=0.10.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-promise@2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + + is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-stream-ended@0.1.4: + resolution: {integrity: sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-url@1.2.4: + resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + is-what@3.14.1: + resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} + + is-wsl@1.1.0: + resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} + engines: {node: '>=4'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + is@3.3.0: + resolution: {integrity: sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isbinaryfile@4.0.10: + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} + + isbinaryfile@5.0.4: + resolution: {integrity: sha512-YKBKVkKhty7s8rxddb40oOkuP0NbaeXrQvLin6QMHL7Ypiy2RW9LwOVrVgZRyOrhQlayMd9t+D8yDy8MKFTSDQ==} + engines: {node: '>= 18.0.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isexe@3.1.1: + resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} + engines: {node: '>=16'} + + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + isstream@0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jasmine-core@2.8.0: + resolution: {integrity: sha512-SNkOkS+/jMZvLhuSx1fjhcNWUC/KG6oVyFUGkSBEr9n1axSNduWU8GlI7suaHXr4yxjet6KjrUZxUTE5WzzWwQ==} + + jasmine-core@4.6.1: + resolution: {integrity: sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==} + + jasmine-core@5.6.0: + resolution: {integrity: sha512-niVlkeYVRwKFpmfWg6suo6H9CrNnydfBLEqefM5UjibYS+UoTjZdmvPJSiuyrRLGnFj1eYRhFd/ch+5hSlsFVA==} + + jasmine-reporters@2.5.2: + resolution: {integrity: sha512-qdewRUuFOSiWhiyWZX8Yx3YNQ9JG51ntBEO4ekLQRpktxFTwUHy24a86zD/Oi2BRTKksEdfWQZcQFqzjqIkPig==} + + jasmine-spec-reporter@7.0.0: + resolution: {integrity: sha512-OtC7JRasiTcjsaCBPtMO0Tl8glCejM4J4/dNuOJdA8lBjz4PmWjYQ6pzb0uzpBNAWJMDudYuj9OdXJWqM2QTJg==} + + jasmine@2.8.0: + resolution: {integrity: sha512-KbdGQTf5jbZgltoHs31XGiChAPumMSY64OZMWLNYnEnMfG5uwGBhffePwuskexjT+/Jea/gU3qAU8344hNohSw==} + hasBin: true + + jasmine@5.6.0: + resolution: {integrity: sha512-6frlW22jhgRjtlp68QY/DDVCUfrYqmSxDBWM13mrBzYQGx1XITfVcJltnY15bk8B5cRfN5IpKvemkDiDTSRCsA==} + hasBin: true + + jasminewd2@2.2.0: + resolution: {integrity: sha512-Rn0nZe4rfDhzA63Al3ZGh0E+JTmM6ESZYXJGKuqKGZObsAB9fwXPD03GjtIEvJBDOhN94T5MzbwZSqzFHSQPzg==} + engines: {node: '>= 6.9.x'} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + + jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + + js-base64@3.7.7: + resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbn@0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-bigint@1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-parse-even-better-errors@4.0.0: + resolution: {integrity: sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==} + engines: {node: ^18.17.0 || >=20.5.0} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + jsonfile@3.0.1: + resolution: {integrity: sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==} + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + + jsprim@1.4.2: + resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} + engines: {node: '>=0.6.0'} + + jsprim@2.0.2: + resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} + engines: {'0': node >=0.6.0} + + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + + jwa@1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + + jwa@2.0.0: + resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} + + jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + + jws@4.0.0: + resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} + + karma-chrome-launcher@3.2.0: + resolution: {integrity: sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==} + + karma-coverage@2.2.1: + resolution: {integrity: sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==} + engines: {node: '>=10.0.0'} + + karma-jasmine-html-reporter@2.1.0: + resolution: {integrity: sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==} + peerDependencies: + jasmine-core: ^4.0.0 || ^5.0.0 + karma: ^6.0.0 + karma-jasmine: ^5.0.0 + + karma-jasmine@5.1.0: + resolution: {integrity: sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==} + engines: {node: '>=12'} + peerDependencies: + karma: ^6.0.0 + + karma-source-map-support@1.4.0: + resolution: {integrity: sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==} + + karma@6.4.4: + resolution: {integrity: sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==} + engines: {node: '>= 10'} + hasBin: true + + keygrip@1.1.0: + resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} + engines: {node: '>= 0.6'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + koa-compose@4.1.0: + resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} + + koa-convert@2.0.0: + resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==} + engines: {node: '>= 10'} + + koa-etag@4.0.0: + resolution: {integrity: sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==} + + koa-send@5.0.1: + resolution: {integrity: sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==} + engines: {node: '>= 8'} + + koa-static@5.0.0: + resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==} + engines: {node: '>= 7.6.0'} + + koa@2.16.0: + resolution: {integrity: sha512-Afhqq0Vq3W7C+/rW6IqHVBDLzqObwZ07JaUNUEF8yCQ6afiyFE3RAy+i7V0E46XOWlH7vPWn/x0vsZwNy6PWxw==} + engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} + + launch-editor@2.10.0: + resolution: {integrity: sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==} + + less-loader@12.2.0: + resolution: {integrity: sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + less: ^3.5.0 || ^4.0.0 + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + + less@4.2.2: + resolution: {integrity: sha512-tkuLHQlvWUTeQ3doAqnHbNn8T6WX1KA8yvbKG9x4VtKtIjHsVKQZCH11zRgAfbDAXC2UNIg/K9BYAAcEzUIrNg==} + engines: {node: '>=6'} + hasBin: true + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + license-webpack-plugin@4.0.2: + resolution: {integrity: sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==} + peerDependencies: + webpack: '*' + peerDependenciesMeta: + webpack: + optional: true + + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + + lighthouse-logger@1.4.2: + resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==} + + limiter@1.1.5: + resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + listr2@8.2.5: + resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} + engines: {node: '>=18.0.0'} + + lmdb@3.2.6: + resolution: {integrity: sha512-SuHqzPl7mYStna8WRotY8XX/EUZBjjv3QyKIByeCLFfC9uXT/OIHByEcA07PzbMfQAM0KYJtLgtpMRlIe5dErQ==} + hasBin: true + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} + + loader-utils@3.3.1: + resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} + engines: {node: '>= 12.13.0'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lockfile@1.0.4: + resolution: {integrity: sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isfinite@3.3.2: + resolution: {integrity: sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==} + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + + lodash.snakecase@4.1.1: + resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-update@4.0.0: + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} + + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + + log4js@6.9.1: + resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==} + engines: {node: '>=8.0'} + + long@4.0.0: + resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} + + long@5.3.1: + resolution: {integrity: sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==} + + lowdb@1.0.0: + resolution: {integrity: sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==} + engines: {node: '>=4'} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + lru-cache@8.0.5: + resolution: {integrity: sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==} + engines: {node: '>=16.14'} + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + make-fetch-happen@14.0.3: + resolution: {integrity: sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + marky@1.2.5: + resolution: {integrity: sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + memfs@4.17.0: + resolution: {integrity: sha512-4eirfZ7thblFmqFjywlTmuWVSvccHAJbn1r8qQLzmTO11qcqpohOjmY2mFce6x7x7WtskzRqApPD0hv+Oa74jg==} + engines: {node: '>= 4.0.0'} + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.53.0: + resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + mini-css-extract-plugin@2.9.2: + resolution: {integrity: sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimatch@3.0.8: + resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@7.4.6: + resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass-collect@2.0.1: + resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass-fetch@4.0.1: + resolution: {integrity: sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + + minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + + minipass-sized@1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + minizlib@3.0.1: + resolution: {integrity: sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==} + engines: {node: '>= 18'} + + mitt@1.2.0: + resolution: {integrity: sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + + mrmime@2.0.1: + resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} + engines: {node: '>=10'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + msgpackr-extract@3.0.3: + resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==} + hasBin: true + + msgpackr@1.11.2: + resolution: {integrity: sha512-F9UngXRlPyWCDEASDpTf6c9uNhGPTqnTeLVt7bN+bU1eajoR/8V9ys2BRaV5C/e5ihE6sJ9uPIKaYt6bFuO32g==} + + multicast-dns@7.2.5: + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} + hasBin: true + + mute-stream@1.0.0: + resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} + + nanocolors@0.2.13: + resolution: {integrity: sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==} + + nanoid@3.3.9: + resolution: {integrity: sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + needle@3.3.1: + resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} + engines: {node: '>= 4.4.x'} + hasBin: true + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + + ng-packagr@19.2.0: + resolution: {integrity: sha512-bDyB9tmXMCL/4IhKcX84zGQlQrZhPhdCaomdJocz6EN57cZWdTP7SGhrswzpdGJY+y89855detet27oJLgR3IQ==} + engines: {node: ^18.19.1 || >=20.11.1} + hasBin: true + peerDependencies: + '@angular/compiler-cli': ^19.0.0 || ^19.1.0-next.0 || ^19.2.0-next.0 + tailwindcss: ^2.0.0 || ^3.0.0 || ^4.0.0 + tslib: ^2.3.0 + typescript: 5.8.1-rc + peerDependenciesMeta: + tailwindcss: + optional: true + + node-addon-api@6.1.0: + resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + + node-fetch-native@1.6.6: + resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==} + + node-fetch@2.6.7: + resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + + node-gyp-build-optional-packages@5.2.2: + resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} + hasBin: true + + node-gyp@11.1.0: + resolution: {integrity: sha512-/+7TuHKnBpnMvUQnsYEb0JOozDZqarQbfNuSGLXIjhStMT0fbw7IdSqWgopOP5xhRZE+lsbIvAHcekddruPZgQ==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + nopt@8.1.0: + resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + npm-bundled@4.0.0: + resolution: {integrity: sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==} + engines: {node: ^18.17.0 || >=20.5.0} + + npm-install-checks@7.1.1: + resolution: {integrity: sha512-u6DCwbow5ynAX5BdiHQ9qvexme4U3qHW3MWe5NqH+NeBm0LbiH6zvGjNNew1fY+AZZUtVHbOPF3j7mJxbUzpXg==} + engines: {node: ^18.17.0 || >=20.5.0} + + npm-normalize-package-bin@4.0.0: + resolution: {integrity: sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==} + engines: {node: ^18.17.0 || >=20.5.0} + + npm-package-arg@12.0.2: + resolution: {integrity: sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==} + engines: {node: ^18.17.0 || >=20.5.0} + + npm-packlist@9.0.0: + resolution: {integrity: sha512-8qSayfmHJQTx3nJWYbbUmflpyarbLMBc6LCAjYsiGtXxDB68HaZpb8re6zeaLGxZzDuMdhsg70jryJe+RrItVQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + npm-pick-manifest@10.0.0: + resolution: {integrity: sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + npm-registry-fetch@18.0.2: + resolution: {integrity: sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm@10.9.2: + resolution: {integrity: sha512-iriPEPIkoMYUy3F6f3wwSZAU93E0Eg6cHwIR6jzzOXWSy+SD/rOODEs74cVONHKSx2obXtuUoyidVEhISrisgQ==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + bundledDependencies: + - '@isaacs/string-locale-compare' + - '@npmcli/arborist' + - '@npmcli/config' + - '@npmcli/fs' + - '@npmcli/map-workspaces' + - '@npmcli/package-json' + - '@npmcli/promise-spawn' + - '@npmcli/redact' + - '@npmcli/run-script' + - '@sigstore/tuf' + - abbrev + - archy + - cacache + - chalk + - ci-info + - cli-columns + - fastest-levenshtein + - fs-minipass + - glob + - graceful-fs + - hosted-git-info + - ini + - init-package-json + - is-cidr + - json-parse-even-better-errors + - libnpmaccess + - libnpmdiff + - libnpmexec + - libnpmfund + - libnpmhook + - libnpmorg + - libnpmpack + - libnpmpublish + - libnpmsearch + - libnpmteam + - libnpmversion + - make-fetch-happen + - minimatch + - minipass + - minipass-pipeline + - ms + - node-gyp + - nopt + - normalize-package-data + - npm-audit-report + - npm-install-checks + - npm-package-arg + - npm-pick-manifest + - npm-profile + - npm-registry-fetch + - npm-user-validate + - p-map + - pacote + - parse-conflict-json + - proc-log + - qrcode-terminal + - read + - semver + - spdx-expression-parse + - ssri + - supports-color + - tar + - text-table + - tiny-relative-date + - treeverse + - validate-npm-package-name + - which + - write-file-atomic + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + oauth-sign@0.9.0: + resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + + obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + + on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + only@0.0.2: + resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} + + open@10.1.0: + resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} + engines: {node: '>=18'} + + open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} + + opn@5.3.0: + resolution: {integrity: sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==} + engines: {node: '>=4'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + ordered-binary@1.5.3: + resolution: {integrity: sha512-oGFr3T+pYdTGJ+YFEILMpS3es+GiIbs9h/XQrclBXUtd44ey7XwfsMzM31f64I1SQOawDoDr/D823kNCADI8TA==} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + p-event@4.2.0: + resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} + engines: {node: '>=8'} + + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-map@7.0.3: + resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} + engines: {node: '>=18'} + + p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + + p-retry@6.2.1: + resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==} + engines: {node: '>=16.17'} + + p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + pac-proxy-agent@7.2.0: + resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} + engines: {node: '>= 14'} + + pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + pacote@20.0.0: + resolution: {integrity: sha512-pRjC5UFwZCgx9kUFDVM9YEahv4guZ1nSLqwmWiLUnDbGsjs+U5w7z6Uc8HNR1a6x8qnu5y9xtGE6D1uAuYz+0A==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + pako@0.2.9: + resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} + + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-node-version@1.0.1: + resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} + engines: {node: '>= 0.10'} + + parse5-html-rewriting-stream@7.0.0: + resolution: {integrity: sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==} + + parse5-sax-parser@7.0.0: + resolution: {integrity: sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-is-inside@1.0.2: + resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + path-type@6.0.0: + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} + engines: {node: '>=18'} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + peek-stream@1.1.3: + resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pify@3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + pinkie-promise@2.0.1: + resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} + engines: {node: '>=0.10.0'} + + pinkie@2.0.4: + resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} + engines: {node: '>=0.10.0'} + + pino-abstract-transport@1.2.0: + resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} + + pino-abstract-transport@2.0.0: + resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + + pino-std-serializers@7.0.0: + resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + + pino@9.5.0: + resolution: {integrity: sha512-xSEmD4pLnV54t0NOUN16yCl7RIB1c5UUOse5HSyEXtBp+FgFQyPeDutc+Q2ZO7/22vImV7VfEjH/1zV2QuqvYw==} + hasBin: true + + piscina@4.8.0: + resolution: {integrity: sha512-EZJb+ZxDrQf3dihsUL7p42pjNyrNIFJCrRHPMgxu/svsj+P3xS3fuEWp7k2+rfsavfl1N0G29b1HGs7J0m8rZA==} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + pkg-dir@7.0.0: + resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} + engines: {node: '>=14.16'} + + pkginfo@0.4.1: + resolution: {integrity: sha512-8xCNE/aT/EXKenuMDZ+xTVwkT8gsoHN2z/Q29l80u0ppGEXVvsKRzNMbtKhg8LS8k1tJLAHHylf6p4VFmP6XUQ==} + engines: {node: '>= 0.4.0'} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + portfinder@1.0.33: + resolution: {integrity: sha512-+2jndHT63cL5MdQOwDm9OT2dIe11zVpjV+0GGRXdtO1wpPxv260NfVqoEXtYAi/shanmm3W4+yLduIe55ektTw==} + engines: {node: '>= 0.12.0'} + + portscanner@2.2.0: + resolution: {integrity: sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==} + engines: {node: '>=0.4', npm: '>=1.0.0'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postcss-loader@8.1.1: + resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + + postcss-media-query-parser@0.2.3: + resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} + + postcss-modules-extract-imports@3.1.0: + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-local-by-default@4.2.0: + resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-scope@3.2.1: + resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-values@4.0.0: + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-selector-parser@7.1.0: + resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.5.2: + resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier@3.5.0: + resolution: {integrity: sha512-quyMrVt6svPS7CjQ9gKb3GLEX/rl3BCL2oa/QkNcXv4YNVBC9olt3s+H7ukto06q7B1Qz46PbrKLO34PR6vXcA==} + engines: {node: '>=14'} + hasBin: true + + prettier@3.5.3: + resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} + engines: {node: '>=14'} + hasBin: true + + proc-log@5.0.0: + resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process-warning@1.0.0: + resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} + + process-warning@4.0.1: + resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + + proto3-json-serializer@2.0.2: + resolution: {integrity: sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ==} + engines: {node: '>=14.0.0'} + + protobufjs@6.8.8: + resolution: {integrity: sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==} + hasBin: true + + protobufjs@7.4.0: + resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} + engines: {node: '>=12.0.0'} + + protractor@7.0.0: + resolution: {integrity: sha512-UqkFjivi4GcvUQYzqGYNe0mLzfn5jiLmO8w9nMhQoJRLhy2grJonpga2IWhI6yJO30LibWXJJtA4MOIZD2GgZw==} + engines: {node: '>=10.13.x'} + deprecated: We have news to share - Protractor is deprecated and will reach end-of-life by Summer 2023. To learn more and find out about other options please refer to this post on the Angular blog. Thank you for using and contributing to Protractor. https://goo.gle/state-of-e2e-in-angular + hasBin: true + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + proxy-agent@6.5.0: + resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} + engines: {node: '>= 14'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + prr@1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + + pump@2.0.1: + resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} + + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + + pumpify@1.5.1: + resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} + + punycode@1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + puppeteer-core@18.2.1: + resolution: {integrity: sha512-MRtTAZfQTluz3U2oU/X2VqVWPcR1+94nbA2V6ZrSZRVEwLqZ8eclZ551qGFQD/vD2PYqHJwWOW/fpC721uznVw==} + engines: {node: '>=14.1.0'} + + puppeteer-core@24.4.0: + resolution: {integrity: sha512-eFw66gCnWo0X8Hyf9KxxJtms7a61NJVMiSaWfItsFPzFBsjsWdmcNlBdsA1WVwln6neoHhsG+uTVesKmTREn/g==} + engines: {node: '>=18'} + + puppeteer@18.2.1: + resolution: {integrity: sha512-7+UhmYa7wxPh2oMRwA++k8UGVDxh3YdWFB52r9C3tM81T6BU7cuusUSxImz0GEYSOYUKk/YzIhkQ6+vc0gHbxQ==} + engines: {node: '>=14.1.0'} + deprecated: < 19.4.0 is no longer supported + + q@1.4.1: + resolution: {integrity: sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg==} + engines: {node: '>=0.6.0', teleport: '>=0.2.0'} + deprecated: |- + You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. + (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) + + q@1.5.1: + resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} + engines: {node: '>=0.6.0', teleport: '>=0.2.0'} + deprecated: |- + You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. + (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) + + qjobs@1.2.0: + resolution: {integrity: sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==} + engines: {node: '>=0.9'} + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + qs@6.13.1: + resolution: {integrity: sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==} + engines: {node: '>=0.6'} + + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + + qs@6.5.3: + resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} + engines: {node: '>=0.6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + + quicktype-core@23.0.171: + resolution: {integrity: sha512-2kFUFtVdCbc54IBlCG30Yzsb5a1l6lX/8UjKaf2B009WFsqvduidaSOdJ4IKMhMi7DCrq60mnU7HZ1fDazGRlw==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readable-stream@4.5.2: + resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + + rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + + reflect-metadata@0.1.14: + resolution: {integrity: sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==} + + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + + regex-parser@2.3.1: + resolution: {integrity: sha512-yXLRqatcCuKtVHsWrNg0JL3l1zGfdXeEvDa0bdu4tCDQw0RpMDZsqbkyRTUnKMR0tXF627V2oEWjBEaEdqTwtQ==} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + regexpu-core@6.2.0: + resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} + engines: {node: '>=4'} + + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.12.0: + resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} + hasBin: true + + request@2.88.2: + resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} + engines: {node: '>= 6'} + deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-path@1.4.0: + resolution: {integrity: sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==} + engines: {node: '>= 0.8'} + + resolve-url-loader@5.0.0: + resolution: {integrity: sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==} + engines: {node: '>=12'} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + resp-modifier@6.0.2: + resolution: {integrity: sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==} + engines: {node: '>= 0.8.0'} + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + retry-request@7.0.2: + resolution: {integrity: sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==} + engines: {node: '>=14'} + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rimraf@2.7.1: + resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@5.0.10: + resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} + hasBin: true + + rollup-license-plugin@3.0.2: + resolution: {integrity: sha512-68LWDlUKxqLO4Si3Extca4X7P99tU7s0KLnVUzN6h6SDihGAWYMQ0q73XLnHbUmG0IFgvC0AzuYvbogceQ9Hcw==} + engines: {node: '>=18.0.0'} + + rollup-plugin-sourcemaps@0.6.3: + resolution: {integrity: sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==} + engines: {node: '>=10.0.0'} + peerDependencies: + '@types/node': '>=10.0.0' + rollup: '>=0.31.2' + peerDependenciesMeta: + '@types/node': + optional: true + + rollup@4.34.8: + resolution: {integrity: sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rx@4.1.0: + resolution: {integrity: sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sass-loader@16.0.5: + resolution: {integrity: sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + sass: ^1.3.0 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + webpack: + optional: true + + sass@1.85.0: + resolution: {integrity: sha512-3ToiC1xZ1Y8aU7+CkgCI/tqyuPXEmYGJXO7H4uqp0xkLXUqp88rQQ4j1HmP37xSJLbCJPaIiv+cT1y+grssrww==} + engines: {node: '>=14.0.0'} + hasBin: true + + saucelabs@1.5.0: + resolution: {integrity: sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==} + + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + + schema-utils@4.3.0: + resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} + engines: {node: '>= 10.13.0'} + + select-hose@2.0.0: + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} + + selenium-webdriver@3.6.0: + resolution: {integrity: sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==} + engines: {node: '>= 6.9.0'} + + selenium-webdriver@4.29.0: + resolution: {integrity: sha512-8XPGtDoji5xk7ZUCzFT1rqHmCp67DCzESsttId7DzmrJmlTRmRLF6X918rbwclcH89amcBNM4zB3lVPj404I0g==} + engines: {node: '>= 18.20.5'} + + selfsigned@2.4.1: + resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} + engines: {node: '>=10'} + + semver@5.6.0: + resolution: {integrity: sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==} + hasBin: true + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + + send@0.19.1: + resolution: {integrity: sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==} + engines: {node: '>= 0.8.0'} + + send@1.1.0: + resolution: {integrity: sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==} + engines: {node: '>= 18'} + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + serve-index@1.9.1: + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + engines: {node: '>= 0.8.0'} + + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + + server-destroy@1.0.1: + resolution: {integrity: sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==} + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + setprototypeof@1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-quote@1.8.2: + resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} + engines: {node: '>= 0.4'} + + shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + sigstore@3.1.0: + resolution: {integrity: sha512-ZpzWAFHIFqyFE56dXqgX/DkDRZdz+rRcjoIk/RQU4IX0wiCv1l8S7ZrXDHcCc+uaf+6o7w3h2l3g6GYG5TKN9Q==} + engines: {node: ^18.17.0 || >=20.5.0} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + socket.io-adapter@2.5.5: + resolution: {integrity: sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==} + + socket.io-client@4.8.1: + resolution: {integrity: sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==} + engines: {node: '>=10.0.0'} + + socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} + + socket.io@4.8.1: + resolution: {integrity: sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==} + engines: {node: '>=10.2.0'} + + sockjs@0.3.24: + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} + engines: {node: '>= 14'} + + socks@2.8.4: + resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + + sonic-boom@3.8.1: + resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==} + + sonic-boom@4.2.0: + resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-loader@5.0.0: + resolution: {integrity: sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + webpack: ^5.72.1 + + source-map-resolve@0.6.0: + resolution: {integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated + + source-map-support@0.4.18: + resolution: {integrity: sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map-support@0.5.9: + resolution: {integrity: sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==} + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-expression-validate@2.0.0: + resolution: {integrity: sha512-b3wydZLM+Tc6CFvaRDBOF9d76oGIHNCLYFeHbftFXUWjnfZWganmDmvtM5sm1cRwJc/VDBMLyGGrsLFd1vOxbg==} + + spdx-license-ids@3.0.21: + resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + + spdy-transport@3.0.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + + spdy@4.0.2: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} + + split-array-stream@1.0.3: + resolution: {integrity: sha512-yGY35QmZFzZkWZ0eHE06RPBi63umym8m+pdtuC/dlO1ADhdKSfCj0uNn87BYCXBBDFxyTq4oTw0BgLYT0K5z/A==} + + split-array-stream@2.0.0: + resolution: {integrity: sha512-hmMswlVY91WvGMxs0k8MRgq8zb2mSen4FmDNc5AFiTWtrBpdZN6nwD6kROVe4vNL+ywrvbCKsWVCnEd4riELIg==} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + sshpk@1.18.0: + resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + ssri@12.0.0: + resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + stack-trace@0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + + statuses@1.3.1: + resolution: {integrity: sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==} + engines: {node: '>= 0.6'} + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + steno@0.4.4: + resolution: {integrity: sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w==} + + stream-events@1.0.5: + resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==} + + stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + + stream-throttle@0.1.3: + resolution: {integrity: sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==} + engines: {node: '>= 0.10.0'} + hasBin: true + + streamroller@3.1.5: + resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==} + engines: {node: '>=8.0'} + + streamx@2.22.0: + resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + stubs@3.0.0: + resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==} + + supports-color@10.0.0: + resolution: {integrity: sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==} + engines: {node: '>=18'} + + supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + symbol-observable@4.0.0: + resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} + engines: {node: '>=0.10'} + + table-layout@4.1.1: + resolution: {integrity: sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==} + engines: {node: '>=12.17'} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + + tar-fs@3.0.8: + resolution: {integrity: sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + tar@7.4.3: + resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + engines: {node: '>=18'} + + teeny-request@9.0.0: + resolution: {integrity: sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==} + engines: {node: '>=14'} + + terser-webpack-plugin@5.3.14: + resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.39.0: + resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} + engines: {node: '>=10'} + hasBin: true + + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thingies@1.21.0: + resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==} + engines: {node: '>=10.18'} + peerDependencies: + tslib: ^2 + + thread-stream@3.1.0: + resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + + through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + + through2@4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + thunky@1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + + tiny-inflate@1.0.3: + resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} + + tldts-core@6.1.83: + resolution: {integrity: sha512-I2wb9OJc6rXyh9d4aInhSNWChNI+ra6qDnFEGEwe9OoA68lE4Temw29bOkf1Uvwt8VZS079t1BFZdXVBmmB4dw==} + + tldts@6.1.83: + resolution: {integrity: sha512-FHxxNJJ0WNsEBPHyC1oesQb3rRoxpuho/z2g3zIIAhw1WHJeQsUzK1jYK8TI1/iClaa4fS3Z2TCA9mtxXsENSg==} + hasBin: true + + tmp@0.0.30: + resolution: {integrity: sha512-HXdTB7lvMwcb55XFfrTM8CPr/IYREk4hVBFaQ4b/6nInrluSL86hfHm7vu0luYKCfyBZp2trCjpc8caC3vVM3w==} + engines: {node: '>=0.4.0'} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + tough-cookie@2.5.0: + resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} + engines: {node: '>=0.8'} + + tough-cookie@5.1.2: + resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} + engines: {node: '>=16'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tr46@5.0.0: + resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} + engines: {node: '>=18'} + + tree-dump@1.0.2: + resolution: {integrity: sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + true-case-path@2.2.1: + resolution: {integrity: sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==} + + ts-api-utils@2.0.1: + resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: 5.8.1-rc + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: 5.8.1-rc + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsscmp@1.0.6: + resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} + engines: {node: '>=0.6.x'} + + tsutils@3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: 5.8.1-rc + + tuf-js@3.0.1: + resolution: {integrity: sha512-+68OP1ZzSF84rTckf3FA95vJ1Zlx/uaXyiiKyPd1pA4rZNkpEvDAKmsu1xUSmbF/chCRYgZ6UZkDwC7PmzmAyA==} + engines: {node: ^18.17.0 || >=20.5.0} + + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + + tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + + typanion@3.14.0: + resolution: {integrity: sha512-ZW/lVMRabETuYCd9O9ZvMhAh8GslSqaUjxmK/JLPCh6l73CvLBiuXswj/+7LdnWOgYsQ130FqLzFz5aGT4I3Ug==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typed-assert@1.0.9: + resolution: {integrity: sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==} + + typed-graphqlify@3.1.6: + resolution: {integrity: sha512-Snlg1ZrokbkQuemOb4xjWWCJrNcOMeb2Ii0/BwMfwLCcJVNjygyqhrFkrYNvi4gDrwWFrGE0TvxxM+Slym2JMg==} + + typed-query-selector@2.12.0: + resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} + + typescript@5.8.1-rc: + resolution: {integrity: sha512-D8IlSOUk1E08jpFdK81reYkA1a/4XtEdV6MElOGdbu/uOy1RpEDqNO/onWmqUaLkTyeHmmU/QlWvjcM9cqF85g==} + engines: {node: '>=14.17'} + hasBin: true + + typical@4.0.0: + resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} + engines: {node: '>=8'} + + typical@7.3.0: + resolution: {integrity: sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw==} + engines: {node: '>=12.17'} + + ua-parser-js@0.7.40: + resolution: {integrity: sha512-us1E3K+3jJppDBa3Tl0L3MOJiGhe1C6P0+nIvQAFYbxlMAx0h81eOwLmU57xgqToduDDPx3y5QsdjPfDu+FgOQ==} + hasBin: true + + ua-parser-js@1.0.40: + resolution: {integrity: sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==} + hasBin: true + + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + engines: {node: '>=0.8.0'} + hasBin: true + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + undici@6.21.1: + resolution: {integrity: sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==} + engines: {node: '>=18.17'} + + unenv@1.10.0: + resolution: {integrity: sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==} + + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + engines: {node: '>=4'} + + unicode-properties@1.4.1: + resolution: {integrity: sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + + unicode-trie@2.0.0: + resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + + unique-filename@4.0.0: + resolution: {integrity: sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + unique-slug@5.0.0: + resolution: {integrity: sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==} + engines: {node: ^18.17.0 || >=20.5.0} + + universal-user-agent@7.0.2: + resolution: {integrity: sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unix-crypt-td-js@1.1.4: + resolution: {integrity: sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + urijs@1.19.11: + resolution: {integrity: sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + hasBin: true + + uuid@3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validate-npm-package-name@6.0.0: + resolution: {integrity: sha512-d7KLgL1LD3U3fgnvWEY1cQXoO/q6EQ1BSz48Sa149V/5zVTAbgmZIpyI8TRi6U9/JNyeYLlTKsEMPtLC27RFUg==} + engines: {node: ^18.17.0 || >=20.5.0} + + validator@13.12.0: + resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} + engines: {node: '>= 0.10'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + verdaccio-audit@13.0.0-next-8.7: + resolution: {integrity: sha512-kd6YdrDztkP1/GDZT7Ue2u41iGPvM9y+5aaUbIBUPvTY/YVv57K6MaCMfn9C/I+ZL4R7XOTSxTtWvz3JK4QrNg==} + engines: {node: '>=18'} + + verdaccio-auth-memory@10.2.2: + resolution: {integrity: sha512-JCAnSqwq2l1UPt0hQcPn1B3X9mYpJ5zMsDvuDdmnlWLkrIDx2Wev5fluW0HC9hcFMITFl/DJj/DyzYOOqwhFSQ==} + engines: {node: '>=8'} + + verdaccio-htpasswd@13.0.0-next-8.7: + resolution: {integrity: sha512-znyFnwt59mLKTAu6eHJrfWP07iaHUlYiQN7QoBo8KMAOT1AecUYreBqs93oKHdIOzjTI8j6tQLg57DpeVS5vgg==} + engines: {node: '>=18'} + + verdaccio@6.0.5: + resolution: {integrity: sha512-hv+v4mtG/rcNidGUHXAtNuVySiPE3/PM+7dYye5jCDrhCUmRJYOtnvDe/Ym1ZE/twti39g6izVRxEkjnSp52gA==} + engines: {node: '>=18'} + hasBin: true + + verror@1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} + + vite@6.2.3: + resolution: {integrity: sha512-IzwM54g4y9JA/xAeBPNaDXiBF8Jsgl3VBQ2YQ/wOY6fyW3xMdSoltIV3Bo59DErdqdE6RxUfv8W69DvUorE4Eg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + 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 + + void-elements@2.0.1: + resolution: {integrity: sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==} + engines: {node: '>=0.10.0'} + + watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} + engines: {node: '>=10.13.0'} + + wbuf@1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + weak-lru-cache@1.2.2: + resolution: {integrity: sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==} + + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + + webdriver-js-extender@2.1.0: + resolution: {integrity: sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==} + engines: {node: '>=6.9.x'} + + webdriver-manager@12.1.9: + resolution: {integrity: sha512-Yl113uKm8z4m/KMUVWHq1Sjtla2uxEBtx2Ue3AmIlnlPAKloDn/Lvmy6pqWCUersVISpdMeVpAaGbNnvMuT2LQ==} + engines: {node: '>=6.9.x'} + hasBin: true + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + webpack-dev-middleware@7.4.2: + resolution: {integrity: sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + webpack: ^5.0.0 + peerDependenciesMeta: + webpack: + optional: true + + webpack-dev-server@5.2.0: + resolution: {integrity: sha512-90SqqYXA2SK36KcT6o1bvwvZfJFcmoamqeJY7+boioffX9g9C0wjjJRGUrQIuh43pb0ttX7+ssavmj/WN2RHtA==} + engines: {node: '>= 18.12.0'} + hasBin: true + peerDependencies: + webpack: ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack: + optional: true + webpack-cli: + optional: true + + webpack-merge@6.0.1: + resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==} + engines: {node: '>=18.0.0'} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack-subresource-integrity@5.1.0: + resolution: {integrity: sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==} + engines: {node: '>= 12'} + peerDependencies: + html-webpack-plugin: '>= 5.0.0-beta.1 < 6' + webpack: ^5.12.0 + peerDependenciesMeta: + html-webpack-plugin: + optional: true + + webpack@5.98.0: + resolution: {integrity: sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + websocket-driver@0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} + + websocket-extensions@0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} + + whatwg-url@14.1.1: + resolution: {integrity: sha512-mDGf9diDad/giZ/Sm9Xi2YcyzaFpbdLpJPr+E9fSkyQ7KpQD4SdFcugkRQYzhmfI4KeV4Qpnn2sKPdo+kmsgRQ==} + engines: {node: '>=18'} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-module@2.0.1: + resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} + + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + which@5.0.0: + resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + wildcard@2.0.1: + resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + wordwrapjs@5.1.0: + resolution: {integrity: sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==} + engines: {node: '>=12.17'} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.1: + resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.9.0: + resolution: {integrity: sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xhr2@0.2.1: + resolution: {integrity: sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==} + engines: {node: '>= 6'} + + xml2js@0.4.23: + resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} + engines: {node: '>=4.0.0'} + + xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + + xmlhttprequest-ssl@2.1.2: + resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==} + engines: {node: '>=0.4.0'} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@4.0.3: + resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@18.1.3: + resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} + engines: {node: '>=6'} + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@15.4.1: + resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} + engines: {node: '>=8'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + ylru@1.4.0: + resolution: {integrity: sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==} + engines: {node: '>= 4.0.0'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yocto-queue@1.2.0: + resolution: {integrity: sha512-KHBC7z61OJeaMGnF3wqNZj+GGNXOyypZviiKpQeiHirG5Ib1ImwcLBH70rbMSkKfSmUNBsdf2PwaEJtKvgmkNw==} + engines: {node: '>=12.20'} + + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + + zod@3.24.2: + resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} + + zone.js@0.15.0: + resolution: {integrity: sha512-9oxn0IIjbCZkJ67L+LkhYWRyAy7axphb3VgE2MBDlOqnmHMPWGYMxJxBYFueFq/JGY2GMwS0rU+UCLunEmy5UA==} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@angular/animations@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))': + dependencies: + '@angular/core': 19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) + tslib: 2.8.1 + + '@angular/benchpress@0.3.0(rxjs@7.8.1)(zone.js@0.15.0)': + dependencies: + '@angular/core': 14.3.0(rxjs@7.8.1)(zone.js@0.15.0) + reflect-metadata: 0.1.14 + transitivePeerDependencies: + - rxjs + - zone.js + + '@angular/build-tooling@https://codeload.github.com/angular/dev-infra-private-build-tooling-builds/tar.gz/d4727212a9d0f7eb63ae3116d73c769d9bd0bdc1(debug@4.4.0)(karma-chrome-launcher@3.2.0)(karma-jasmine@5.1.0(karma@6.4.4(debug@4.4.0)))(karma@6.4.4(debug@4.4.0))(rxjs@7.8.1)(terser@5.39.0)(zone.js@0.15.0)': + dependencies: + '@angular/benchpress': 0.3.0(rxjs@7.8.1)(zone.js@0.15.0) + '@angular/build': link:packages/angular/build + '@babel/core': 7.26.10 + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.26.10) + '@bazel/buildifier': 6.3.3 + '@bazel/concatjs': 5.8.1(karma-chrome-launcher@3.2.0)(karma-jasmine@5.1.0(karma@6.4.4(debug@4.4.0)))(karma@6.4.4(debug@4.4.0))(typescript@5.8.1-rc) + '@bazel/esbuild': 5.8.1 + '@bazel/protractor': 5.8.1(protractor@7.0.0) + '@bazel/runfiles': 5.8.1 + '@bazel/terser': 5.8.1(terser@5.39.0) + '@bazel/typescript': 5.8.1(typescript@5.8.1-rc) + '@microsoft/api-extractor': 7.50.0(@types/node@18.19.76) + '@types/browser-sync': 2.29.0 + '@types/minimatch': 5.1.2 + '@types/node': 18.19.76 + '@types/selenium-webdriver': 4.1.28 + '@types/send': 0.17.4 + '@types/tmp': 0.2.6 + '@types/ws': 8.5.14 + '@types/yargs': 17.0.33 + browser-sync: 3.0.3(debug@4.4.0) + prettier: 3.5.0 + protractor: 7.0.0 + selenium-webdriver: 4.29.0 + send: 1.1.0 + source-map: 0.7.4 + tmp: 0.2.3 + true-case-path: 2.2.1 + tslib: 2.8.1 + typescript: 5.8.1-rc + uuid: 11.1.0 + yargs: 17.7.2 + transitivePeerDependencies: + - bufferutil + - debug + - karma + - karma-chrome-launcher + - karma-firefox-launcher + - karma-jasmine + - karma-junit-reporter + - karma-requirejs + - karma-sourcemap-loader + - rxjs + - supports-color + - terser + - utf-8-validate + - zone.js + + '@angular/cdk@19.2.0-rc.0(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1)': dependencies: - '@angular/animations': 19.1.0-rc.0(@angular/core@19.1.0-rc.0) - '@angular/cdk': 19.1.0-next.3(@angular/common@19.1.0-rc.0)(@angular/core@19.1.0-rc.0)(rxjs@7.8.1) - '@angular/common': 19.1.0-rc.0(@angular/core@19.1.0-rc.0)(rxjs@7.8.1) - '@angular/core': 19.1.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) - '@angular/forms': 19.1.0-rc.0(@angular/common@19.1.0-rc.0)(@angular/core@19.1.0-rc.0)(@angular/platform-browser@19.1.0-rc.0)(rxjs@7.8.1) - '@angular/platform-browser': 19.1.0-rc.0(@angular/animations@19.1.0-rc.0)(@angular/common@19.1.0-rc.0)(@angular/core@19.1.0-rc.0) + '@angular/common': 19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1) + '@angular/core': 19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) rxjs: 7.8.1 tslib: 2.8.1 - dev: true + optionalDependencies: + parse5: 7.2.1 - /@angular/platform-browser-dynamic@19.1.0-rc.0(@angular/common@19.1.0-rc.0)(@angular/compiler@19.1.0-rc.0)(@angular/core@19.1.0-rc.0)(@angular/platform-browser@19.1.0-rc.0): - resolution: {integrity: sha512-sUDbSeHS5uVWNT5cFcDFCZVOAIBa9ZaRUN504FJ2psPv0vBtMBDdA67rSz9xa8e/GRm/EOX+a7izEVKeU48M5Q==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - peerDependencies: - '@angular/common': 19.1.0-rc.0 - '@angular/compiler': 19.1.0-rc.0 - '@angular/core': 19.1.0-rc.0 - '@angular/platform-browser': 19.1.0-rc.0 + '@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1)': dependencies: - '@angular/common': 19.1.0-rc.0(@angular/core@19.1.0-rc.0)(rxjs@7.8.1) - '@angular/compiler': 19.1.0-rc.0(@angular/core@19.1.0-rc.0) - '@angular/core': 19.1.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) - '@angular/platform-browser': 19.1.0-rc.0(@angular/animations@19.1.0-rc.0)(@angular/common@19.1.0-rc.0)(@angular/core@19.1.0-rc.0) + '@angular/core': 19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) + rxjs: 7.8.1 tslib: 2.8.1 - dev: true - /@angular/platform-browser@19.1.0-rc.0(@angular/animations@19.1.0-rc.0)(@angular/common@19.1.0-rc.0)(@angular/core@19.1.0-rc.0): - resolution: {integrity: sha512-IwAO/oNUYe3zWunIyJsdzV/Nq4Yu6KxognJGCEUKkxj++Yu2pwaUnheNm/+L++yx5bYPMVcIURgseRqpwJt55g==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - peerDependencies: - '@angular/animations': 19.1.0-rc.0 - '@angular/common': 19.1.0-rc.0 - '@angular/core': 19.1.0-rc.0 - peerDependenciesMeta: - '@angular/animations': - optional: true + '@angular/compiler-cli@19.2.0-rc.0(@angular/compiler@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.1-rc)': + dependencies: + '@angular/compiler': 19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)) + '@babel/core': 7.26.9 + '@jridgewell/sourcemap-codec': 1.5.0 + chokidar: 4.0.3 + convert-source-map: 1.9.0 + reflect-metadata: 0.2.2 + semver: 7.7.1 + tslib: 2.8.1 + typescript: 5.8.1-rc + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + + '@angular/compiler@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))': dependencies: - '@angular/animations': 19.1.0-rc.0(@angular/core@19.1.0-rc.0) - '@angular/common': 19.1.0-rc.0(@angular/core@19.1.0-rc.0)(rxjs@7.8.1) - '@angular/core': 19.1.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) tslib: 2.8.1 - dev: true + optionalDependencies: + '@angular/core': 19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) - /@angular/platform-server@19.1.0-rc.0(@angular/animations@19.1.0-rc.0)(@angular/common@19.1.0-rc.0)(@angular/compiler@19.1.0-rc.0)(@angular/core@19.1.0-rc.0)(@angular/platform-browser@19.1.0-rc.0): - resolution: {integrity: sha512-kPdNLnBMxLc32Rq76qHdpMufZ7l6w7K2TOTlXGj5nWDymhLJhg19TvYHWH2PgbIY/11bAwejw9TI4756enIEAQ==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - peerDependencies: - '@angular/animations': 19.1.0-rc.0 - '@angular/common': 19.1.0-rc.0 - '@angular/compiler': 19.1.0-rc.0 - '@angular/core': 19.1.0-rc.0 - '@angular/platform-browser': 19.1.0-rc.0 - dependencies: - '@angular/animations': 19.1.0-rc.0(@angular/core@19.1.0-rc.0) - '@angular/common': 19.1.0-rc.0(@angular/core@19.1.0-rc.0)(rxjs@7.8.1) - '@angular/compiler': 19.1.0-rc.0(@angular/core@19.1.0-rc.0) - '@angular/core': 19.1.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) - '@angular/platform-browser': 19.1.0-rc.0(@angular/animations@19.1.0-rc.0)(@angular/common@19.1.0-rc.0)(@angular/core@19.1.0-rc.0) + '@angular/core@14.3.0(rxjs@7.8.1)(zone.js@0.15.0)': + dependencies: + rxjs: 7.8.1 + tslib: 2.8.1 + zone.js: 0.15.0 + + '@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)': + dependencies: + rxjs: 7.8.1 + tslib: 2.8.1 + zone.js: 0.15.0 + + '@angular/forms@19.2.0-rc.0(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(@angular/platform-browser@19.2.0-rc.0(@angular/animations@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(rxjs@7.8.1)': + dependencies: + '@angular/common': 19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1) + '@angular/core': 19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) + '@angular/platform-browser': 19.2.0-rc.0(@angular/animations@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)) + rxjs: 7.8.1 + tslib: 2.8.1 + + '@angular/localize@19.2.0-rc.0(@angular/compiler-cli@19.2.0-rc.0(@angular/compiler@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.1-rc))(@angular/compiler@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))': + dependencies: + '@angular/compiler': 19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)) + '@angular/compiler-cli': 19.2.0-rc.0(@angular/compiler@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.1-rc) + '@babel/core': 7.26.9 + '@types/babel__core': 7.20.5 + fast-glob: 3.3.3 + yargs: 17.7.2 + transitivePeerDependencies: + - supports-color + + '@angular/material@19.2.0-rc.0(jieetpysohtsqwbmsmxuwuxddy)': + dependencies: + '@angular/cdk': 19.2.0-rc.0(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1) + '@angular/common': 19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1) + '@angular/core': 19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) + '@angular/forms': 19.2.0-rc.0(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(@angular/platform-browser@19.2.0-rc.0(@angular/animations@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(rxjs@7.8.1) + '@angular/platform-browser': 19.2.0-rc.0(@angular/animations@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)) + rxjs: 7.8.1 + tslib: 2.8.1 + + '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/252589f7bc8fe6ca13b31e02d506ec52e826cdd2(encoding@0.1.13)': + dependencies: + '@google-cloud/spanner': 7.18.1(encoding@0.1.13)(supports-color@10.0.0) + '@octokit/rest': 21.1.1 + '@types/semver': 7.5.8 + '@types/supports-color': 10.0.0 + '@yarnpkg/lockfile': 1.1.0 + chalk: 5.4.1 + semver: 7.7.1 + supports-color: 10.0.0 + typed-graphqlify: 3.1.6 + typescript: 5.8.1-rc + which: 5.0.0 + yaml: 2.7.0 + transitivePeerDependencies: + - encoding + + '@angular/platform-browser-dynamic@19.2.0-rc.0(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/compiler@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(@angular/platform-browser@19.2.0-rc.0(@angular/animations@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))': + dependencies: + '@angular/common': 19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1) + '@angular/compiler': 19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)) + '@angular/core': 19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) + '@angular/platform-browser': 19.2.0-rc.0(@angular/animations@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)) + tslib: 2.8.1 + + '@angular/platform-browser@19.2.0-rc.0(@angular/animations@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))': + dependencies: + '@angular/common': 19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1) + '@angular/core': 19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) + tslib: 2.8.1 + optionalDependencies: + '@angular/animations': 19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)) + + '@angular/platform-server@19.2.0-rc.0(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/compiler@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(@angular/platform-browser@19.2.0-rc.0(@angular/animations@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(rxjs@7.8.1)': + dependencies: + '@angular/common': 19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1) + '@angular/compiler': 19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)) + '@angular/core': 19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) + '@angular/platform-browser': 19.2.0-rc.0(@angular/animations@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)) + rxjs: 7.8.1 tslib: 2.8.1 xhr2: 0.2.1 - dev: true - /@angular/router@19.1.0-rc.0(@angular/common@19.1.0-rc.0)(@angular/core@19.1.0-rc.0)(@angular/platform-browser@19.1.0-rc.0)(rxjs@7.8.1): - resolution: {integrity: sha512-GYrTk2Me7nVfSGMlAh/IcKX2Fxan+ZXSCIx9y/BHGhG4SxUtTitqnj0oXsJy6DXibn6G2FkJqByC7ceZOD0OoA==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - peerDependencies: - '@angular/common': 19.1.0-rc.0 - '@angular/core': 19.1.0-rc.0 - '@angular/platform-browser': 19.1.0-rc.0 - rxjs: ^6.5.3 || ^7.4.0 + '@angular/router@19.2.0-rc.0(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(@angular/platform-browser@19.2.0-rc.0(@angular/animations@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(rxjs@7.8.1)': dependencies: - '@angular/common': 19.1.0-rc.0(@angular/core@19.1.0-rc.0)(rxjs@7.8.1) - '@angular/core': 19.1.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) - '@angular/platform-browser': 19.1.0-rc.0(@angular/animations@19.1.0-rc.0)(@angular/common@19.1.0-rc.0)(@angular/core@19.1.0-rc.0) + '@angular/common': 19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1) + '@angular/core': 19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) + '@angular/platform-browser': 19.2.0-rc.0(@angular/animations@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(@angular/common@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1))(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)) rxjs: 7.8.1 tslib: 2.8.1 - dev: true - /@angular/service-worker@19.1.0-rc.0(@angular/common@19.1.0-rc.0)(@angular/core@19.1.0-rc.0): - resolution: {integrity: sha512-ApYISgyN8mOefdf/enWGRln9J9D+qsNwQ5v67mLT5LzYaw2q+KJBKFTLgRdPWPHSstttuLCrVmJmEzeyIyleZA==} - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - hasBin: true - peerDependencies: - '@angular/common': 19.1.0-rc.0 - '@angular/core': 19.1.0-rc.0 + '@angular/service-worker@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0))(rxjs@7.8.1)': dependencies: - '@angular/common': 19.1.0-rc.0(@angular/core@19.1.0-rc.0)(rxjs@7.8.1) - '@angular/core': 19.1.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) + '@angular/core': 19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0) + rxjs: 7.8.1 tslib: 2.8.1 - dev: true - /@babel/code-frame@7.26.2: - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} - engines: {node: '>=6.9.0'} + '@babel/code-frame@7.26.2': dependencies: '@babel/helper-validator-identifier': 7.25.9 js-tokens: 4.0.0 picocolors: 1.1.1 - dev: true - /@babel/compat-data@7.26.3: - resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/compat-data@7.26.8': {} - /@babel/core@7.26.0: - resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} - engines: {node: '>=6.9.0'} + '@babel/core@7.26.10': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.3 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helpers': 7.26.0 - '@babel/parser': 7.26.3 - '@babel/template': 7.25.9 - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/generator': 7.26.10 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helpers': 7.26.10 + '@babel/parser': 7.26.10 + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.10 + '@babel/types': 7.26.10 convert-source-map: 2.0.0 debug: 4.4.0(supports-color@10.0.0) gensync: 1.0.0-beta.2 @@ -914,1195 +8614,758 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /@babel/generator@7.26.3: - resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} - engines: {node: '>=6.9.0'} + '@babel/core@7.26.9': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.10 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) + '@babel/helpers': 7.26.9 + '@babel/parser': 7.26.9 + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 + convert-source-map: 2.0.0 + debug: 4.4.0(supports-color@10.0.0) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.10': dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + '@babel/parser': 7.26.10 + '@babel/types': 7.26.10 '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 - dev: true - /@babel/helper-annotate-as-pure@7.25.9: - resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} - engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.26.3 - dev: true + '@babel/types': 7.26.9 - /@babel/helper-compilation-targets@7.25.9: - resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} - engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.26.5': dependencies: - '@babel/compat-data': 7.26.3 + '@babel/compat-data': 7.26.8 '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.3 + browserslist: 4.24.4 lru-cache: 5.1.1 semver: 6.3.1 - dev: true - /@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/helper-create-class-features-plugin@7.26.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@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/core@7.26.0) + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.26.9 semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.26.0): - resolution: {integrity: sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-annotate-as-pure': 7.25.9 regexpu-core: 6.2.0 semver: 6.3.1 - dev: true - /@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.0): - resolution: {integrity: sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 debug: 4.4.0(supports-color@10.0.0) lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: - supports-color - dev: true - /@babel/helper-environment-visitor@7.24.7: - resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} - engines: {node: '>=6.9.0'} + '@babel/helper-environment-visitor@7.24.7': dependencies: - '@babel/types': 7.26.3 - dev: true + '@babel/types': 7.26.9 - /@babel/helper-member-expression-to-functions@7.25.9: - resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} - engines: {node: '>=6.9.0'} + '@babel/helper-member-expression-to-functions@7.25.9': dependencies: - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 transitivePeerDependencies: - supports-color - dev: true - /@babel/helper-module-imports@7.25.9: - resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} - engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 transitivePeerDependencies: - supports-color - dev: true - /@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0): - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-module-imports': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.26.9 transitivePeerDependencies: - supports-color - dev: true - /@babel/helper-optimise-call-expression@7.25.9: - resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} - engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9)': dependencies: - '@babel/types': 7.26.3 - dev: true + '@babel/core': 7.26.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.9 + transitivePeerDependencies: + - supports-color - /@babel/helper-plugin-utils@7.25.9: - resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-optimise-call-expression@7.25.9': + dependencies: + '@babel/types': 7.26.9 - /@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-annotate-as-pure': 7.25.9 '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.26.9 transitivePeerDependencies: - supports-color - dev: true - /@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-member-expression-to-functions': 7.25.9 '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.26.9 transitivePeerDependencies: - supports-color - dev: true - /@babel/helper-skip-transparent-expression-wrappers@7.25.9: - resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} - engines: {node: '>=6.9.0'} + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 transitivePeerDependencies: - supports-color - dev: true - /@babel/helper-split-export-declaration@7.24.7: - resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} - engines: {node: '>=6.9.0'} + '@babel/helper-split-export-declaration@7.24.7': dependencies: - '@babel/types': 7.26.3 - dev: true + '@babel/types': 7.26.9 - /@babel/helper-string-parser@7.25.9: - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-string-parser@7.25.9': {} - /@babel/helper-validator-identifier@7.25.9: - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-validator-identifier@7.25.9': {} - /@babel/helper-validator-option@7.25.9: - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-validator-option@7.25.9': {} - /@babel/helper-wrap-function@7.25.9: - resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} - engines: {node: '>=6.9.0'} + '@babel/helper-wrap-function@7.25.9': dependencies: - '@babel/template': 7.25.9 - '@babel/traverse': 7.26.4 - '@babel/types': 7.26.3 + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.9 + '@babel/types': 7.26.9 transitivePeerDependencies: - supports-color - dev: true - /@babel/helpers@7.26.0: - resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} - engines: {node: '>=6.9.0'} + '@babel/helpers@7.26.10': dependencies: - '@babel/template': 7.25.9 - '@babel/types': 7.26.3 - dev: true + '@babel/template': 7.26.9 + '@babel/types': 7.26.10 - /@babel/parser@7.26.3: - resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} - engines: {node: '>=6.0.0'} - hasBin: true + '@babel/helpers@7.26.9': dependencies: - '@babel/types': 7.26.3 - dev: true + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 - /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/parser@7.26.10': + dependencies: + '@babel/types': 7.26.10 + + '@babel/parser@7.26.9': + dependencies: + '@babel/types': 7.26.9 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.9 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.13.0 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10) transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.9 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.26.0): - resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} - engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead. - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.10) transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0): - resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - dev: true + '@babel/core': 7.26.10 - /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0): - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.0): - resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0): - resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0): - resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) - '@babel/traverse': 7.26.4 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10) + '@babel/traverse': 7.26.9 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10) transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.0): - resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.12.0 + '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) - '@babel/traverse': 7.26.4 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) + '@babel/traverse': 7.26.9 globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/template': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/template': 7.26.9 - /@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.0): - resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-for-of@7.26.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/core': 7.26.10 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.9 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.0): - resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.4 + '@babel/traverse': 7.26.9 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) - dev: true + '@babel/core': 7.26.10 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10) - /@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 regenerator-transform: 0.15.2 - dev: true - /@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.0): - resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-runtime@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-runtime@7.26.10(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 - babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.0) - babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) - babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.26.5 + babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.10) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10) + babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.10) semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color - dev: true - /@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-template-literals@7.26.8(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-typeof-symbol@7.26.7(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 - /@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.0): - resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) - '@babel/helper-plugin-utils': 7.25.9 - dev: true + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 - /@babel/preset-env@7.26.0(@babel/core@7.26.0): - resolution: {integrity: sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 + '@babel/preset-env@7.26.9(@babel/core@7.26.10)': dependencies: - '@babel/compat-data': 7.26.3 - '@babel/core': 7.26.0 - '@babel/helper-compilation-targets': 7.25.9 - '@babel/helper-plugin-utils': 7.25.9 + '@babel/compat-data': 7.26.8 + '@babel/core': 7.26.10 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0) - '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.0) - '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-block-scoped-functions': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.0) - '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0) - '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.0) - '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-typeof-symbol': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.0) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.0) - babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.0) - babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) - babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.0) - core-js-compat: 3.39.0 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10) + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.10) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.10) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.10) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.10) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.10) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.10) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.26.10) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.10) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.10) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-template-literals': 7.26.8(@babel/core@7.26.10) + '@babel/plugin-transform-typeof-symbol': 7.26.7(@babel/core@7.26.10) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.10) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.10) + babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.10) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10) + babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.10) + core-js-compat: 3.41.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.0): - resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} - peerDependencies: - '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.10)': dependencies: - '@babel/core': 7.26.0 - '@babel/helper-plugin-utils': 7.25.9 - '@babel/types': 7.26.3 + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/types': 7.26.9 esutils: 2.0.3 - dev: true - /@babel/runtime@7.26.0: - resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} - engines: {node: '>=6.9.0'} + '@babel/runtime@7.26.10': dependencies: regenerator-runtime: 0.14.1 - dev: true - /@babel/template@7.25.9: - resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} - engines: {node: '>=6.9.0'} + '@babel/template@7.26.9': dependencies: '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 - dev: true + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 - /@babel/traverse@7.26.4: - resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} - engines: {node: '>=6.9.0'} + '@babel/traverse@7.26.10': dependencies: '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.3 - '@babel/parser': 7.26.3 - '@babel/template': 7.25.9 - '@babel/types': 7.26.3 + '@babel/generator': 7.26.10 + '@babel/parser': 7.26.10 + '@babel/template': 7.26.9 + '@babel/types': 7.26.10 debug: 4.4.0(supports-color@10.0.0) globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: true - /@babel/types@7.26.3: - resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} - engines: {node: '>=6.9.0'} + '@babel/traverse@7.26.9': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.10 + '@babel/parser': 7.26.9 + '@babel/template': 7.26.9 + '@babel/types': 7.26.9 + debug: 4.4.0(supports-color@10.0.0) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.10': dependencies: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - dev: true - /@bazel/bazelisk@1.25.0: - resolution: {integrity: sha512-IgesSUh9EwwLI9+Vs5rb/sx7vh6cI97CRLPqw9+/egFzeZlB5S2fTsKwbdDxtTVPjQMGS3GY64tTNsgejVFeKg==} - hasBin: true - dev: true + '@babel/types@7.26.9': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 - /@bazel/buildifier@6.3.3: - resolution: {integrity: sha512-0f5eNWhylZQbiTddfVkIXKkugQadzZdonLw4ur58oK4X+gIHOZ42Xv94sepu8Di9UWKFXNc4zxuuTiWM22hGvw==} - hasBin: true - dev: true + '@bazel/bazelisk@1.25.0': {} - /@bazel/buildifier@7.3.1: - resolution: {integrity: sha512-qhSjryLo2uHeib/uLc8Yeh6SBisqdf9pPO79QPlyNO3Apc4g9J1Tir/52VdOo9czHTgSasbtOjfWJCPzMoCSIA==} - hasBin: true - dev: true + '@bazel/buildifier@6.3.3': {} - /@bazel/concatjs@5.8.1(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-junit-reporter@2.0.1)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(typescript@5.7.2): - resolution: {integrity: sha512-TkARsNUxgi3bjFeGwIGlffmQglNhuR9qK9uE7uKhdBZvQE5caAWVCjYiMTzo3viKDhwKn5QNRcHY5huuJMVFfA==} - hasBin: true - peerDependencies: - karma: '>=4.0.0' - karma-chrome-launcher: '>=2.0.0' - karma-firefox-launcher: '>=1.0.0' - karma-jasmine: '>=2.0.0' - karma-junit-reporter: '>=2.0.0' - karma-requirejs: '>=1.0.0' - karma-sourcemap-loader: '>=0.3.0' + '@bazel/buildifier@8.0.3': {} + + '@bazel/concatjs@5.8.1(karma-chrome-launcher@3.2.0)(karma-jasmine@5.1.0(karma@6.4.4(debug@4.4.0)))(karma@6.4.4(debug@4.4.0))(typescript@5.8.1-rc)': dependencies: karma: 6.4.4(debug@4.4.0) karma-chrome-launcher: 3.2.0 - karma-firefox-launcher: 2.1.3 - karma-jasmine: 5.1.0(karma@6.4.4) - karma-junit-reporter: 2.0.1(karma@6.4.4) - karma-requirejs: 1.1.0(karma@6.4.4)(requirejs@2.3.7) - karma-sourcemap-loader: 0.4.0 + karma-jasmine: 5.1.0(karma@6.4.4(debug@4.4.0)) protobufjs: 6.8.8 source-map-support: 0.5.9 - tsutils: 3.21.0(typescript@5.7.2) + tsutils: 3.21.0(typescript@5.8.1-rc) transitivePeerDependencies: - typescript - dev: true - - /@bazel/esbuild@5.8.1: - resolution: {integrity: sha512-8k4LL8P3ivCnFeBOcjiFxL8U+M5VtEGuOyIqm2hfEiP8xDWsZLS7YQ7KhshKJy7Elh2dlK9oGgMtl0D/x9kxxg==} - dev: true - /@bazel/jasmine@5.8.1(jasmine-core@5.5.0)(jasmine@5.5.0): - resolution: {integrity: sha512-052veW5EbJRH+5hL4l9Sf99bTmdKQ5WXXMF0QiBOZcA3ZHYMAaKfYNO+brutiWoX6FrBloiskLrMzF8OiHBqyw==} - hasBin: true - peerDependencies: - jasmine: '>=2.99.0' - jasmine-core: '>=2.99.0' - dependencies: - c8: 7.5.0 - jasmine: 5.5.0 - jasmine-core: 5.5.0 - jasmine-reporters: 2.5.2 - dev: true + '@bazel/esbuild@5.8.1': {} - /@bazel/protractor@5.8.1(protractor@7.0.0): - resolution: {integrity: sha512-6JpP4uQLVRu3m0GrpexDjICKK8YJW/9voc8rZFQxVf3sm8yNjapUVN/b/PBAwua+nDY3uMe3W9aHgStZFOST0A==} - peerDependencies: - protractor: '>=5.0.0' + '@bazel/protractor@5.8.1(protractor@7.0.0)': dependencies: protractor: 7.0.0 - dev: true - - /@bazel/rollup@5.8.1(rollup@4.30.1): - resolution: {integrity: sha512-Ys+UWbRp1TY2j+z15N+SZgID/nuqAtJTgJDsz0NZVjm8F8KzmgXxLDnBb/cUKFVk83pNOAi84G/bq1tINjMSNA==} - hasBin: true - peerDependencies: - rollup: '>=2.3.0 <3.0.0' - dependencies: - '@bazel/worker': 5.8.1 - rollup: 4.30.1 - dev: true - /@bazel/runfiles@5.8.1: - resolution: {integrity: sha512-NDdfpdQ6rZlylgv++iMn5FkObC/QlBQvipinGLSOguTYpRywmieOyJ29XHvUilspwTFSILWpoE9CqMGkHXug1g==} - dev: true + '@bazel/runfiles@5.8.1': {} - /@bazel/runfiles@6.3.1: - resolution: {integrity: sha512-1uLNT5NZsUVIGS4syuHwTzZ8HycMPyr6POA3FCE4GbMtc4rhoJk8aZKtNIRthJYfL+iioppi+rTfH3olMPr9nA==} - dev: true + '@bazel/runfiles@6.3.1': {} - /@bazel/terser@5.8.1(terser@5.37.0): - resolution: {integrity: sha512-TPjSDhw1pSZt9P2hd/22IJwl8KCZiJL+u2gB5mghBTCFDVdC5Dgsx135pFtvlqc6LjjOvd3s6dzcQr0YJo2HSg==} - hasBin: true - peerDependencies: - terser: '>=4.0.0 <5.9.0' + '@bazel/terser@5.8.1(terser@5.39.0)': dependencies: - terser: 5.37.0 - dev: true + terser: 5.39.0 - /@bazel/typescript@5.8.1(typescript@5.7.2): - resolution: {integrity: sha512-NAJ8WQHZL1WE1YmRoCrq/1hhG15Mvy/viWh6TkvFnBeEhNUiQUsA5GYyhU1ztnBIYW03nATO3vwhAEfO7Q0U5g==} - deprecated: No longer maintained, https://github.com/aspect-build/rules_ts is the recommended replacement - hasBin: true - peerDependencies: - typescript: 5.7.2 + '@bazel/typescript@5.8.1(typescript@5.8.1-rc)': dependencies: '@bazel/worker': 5.8.1 semver: 5.6.0 source-map-support: 0.5.9 - tsutils: 3.21.0(typescript@5.7.2) - typescript: 5.7.2 - dev: true + tsutils: 3.21.0(typescript@5.8.1-rc) + typescript: 5.8.1-rc - /@bazel/worker@5.8.1: - resolution: {integrity: sha512-GMyZSNW3F34f9GjbJqvs1aHyed5BNrNeiDzNJhC1fIizo/UeBM21oBBONIYLBDoBtq936U85VyPZ76JaP/83hw==} + '@bazel/worker@5.8.1': dependencies: google-protobuf: 3.21.4 - dev: true - /@bcoe/v8-coverage@0.2.3: - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - dev: true + '@colors/colors@1.5.0': {} - /@colors/colors@1.5.0: - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} - engines: {node: '>=0.1.90'} - dev: true - - /@cspotcode/source-map-support@0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} + '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 - dev: true - /@cypress/request@3.0.7: - resolution: {integrity: sha512-LzxlLEMbBOPYB85uXrDqvD4MgcenjRBLIns3zyhx7vTPj/0u2eQhzXvPiGcaJrV38Q9dbkExWp6cOHPJ+EtFYg==} - engines: {node: '>= 6'} + '@cypress/request@3.0.7': dependencies: aws-sign2: 0.7.0 aws4: 1.13.2 @@ -2110,7 +9373,7 @@ packages: combined-stream: 1.0.8 extend: 3.0.2 forever-agent: 0.6.1 - form-data: 4.0.1 + form-data: 4.0.2 http-signature: 1.4.0 is-typedarray: 1.0.0 isstream: 0.1.2 @@ -2119,495 +9382,144 @@ packages: performance-now: 2.1.0 qs: 6.13.1 safe-buffer: 5.2.1 - tough-cookie: 5.0.0 + tough-cookie: 5.1.2 tunnel-agent: 0.6.0 uuid: 8.3.2 - dev: true - - /@discoveryjs/json-ext@0.6.3: - resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==} - engines: {node: '>=14.17.0'} - dev: true - - /@esbuild/aix-ppc64@0.24.0: - resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - dev: true - optional: true - - /@esbuild/aix-ppc64@0.24.2: - resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [aix] - dev: true - optional: true - - /@esbuild/android-arm64@0.24.0: - resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - dev: true - optional: true - - /@esbuild/android-arm64@0.24.2: - resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [android] - dev: true - optional: true - - /@esbuild/android-arm@0.24.0: - resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - dev: true - optional: true - - /@esbuild/android-arm@0.24.2: - resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} - engines: {node: '>=18'} - cpu: [arm] - os: [android] - dev: true - optional: true - - /@esbuild/android-x64@0.24.0: - resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - dev: true - optional: true - - /@esbuild/android-x64@0.24.2: - resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} - engines: {node: '>=18'} - cpu: [x64] - os: [android] - dev: true - optional: true - - /@esbuild/darwin-arm64@0.24.0: - resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - dev: true - optional: true - - /@esbuild/darwin-arm64@0.24.2: - resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [darwin] - dev: true - optional: true - - /@esbuild/darwin-x64@0.24.0: - resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - dev: true - optional: true - - /@esbuild/darwin-x64@0.24.2: - resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} - engines: {node: '>=18'} - cpu: [x64] - os: [darwin] - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.24.0: - resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - dev: true - optional: true - - /@esbuild/freebsd-arm64@0.24.2: - resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [freebsd] - dev: true - optional: true - - /@esbuild/freebsd-x64@0.24.0: - resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - dev: true - optional: true - - /@esbuild/freebsd-x64@0.24.2: - resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [freebsd] - dev: true - optional: true - - /@esbuild/linux-arm64@0.24.0: - resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - dev: true - optional: true - - /@esbuild/linux-arm64@0.24.2: - resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [linux] - dev: true - optional: true - - /@esbuild/linux-arm@0.24.0: - resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - dev: true - optional: true - - /@esbuild/linux-arm@0.24.2: - resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} - engines: {node: '>=18'} - cpu: [arm] - os: [linux] - dev: true - optional: true - - /@esbuild/linux-ia32@0.24.0: - resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - dev: true - optional: true - - /@esbuild/linux-ia32@0.24.2: - resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [linux] - dev: true - optional: true - /@esbuild/linux-loong64@0.24.0: - resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - dev: true - optional: true - - /@esbuild/linux-loong64@0.24.2: - resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} - engines: {node: '>=18'} - cpu: [loong64] - os: [linux] - dev: true - optional: true + '@discoveryjs/json-ext@0.6.3': {} - /@esbuild/linux-mips64el@0.24.0: - resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - dev: true + '@esbuild/aix-ppc64@0.25.1': optional: true - /@esbuild/linux-mips64el@0.24.2: - resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} - engines: {node: '>=18'} - cpu: [mips64el] - os: [linux] - dev: true + '@esbuild/android-arm64@0.25.1': optional: true - /@esbuild/linux-ppc64@0.24.0: - resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - dev: true + '@esbuild/android-arm@0.25.1': optional: true - /@esbuild/linux-ppc64@0.24.2: - resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} - engines: {node: '>=18'} - cpu: [ppc64] - os: [linux] - dev: true + '@esbuild/android-x64@0.25.1': optional: true - /@esbuild/linux-riscv64@0.24.0: - resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - dev: true + '@esbuild/darwin-arm64@0.25.1': optional: true - /@esbuild/linux-riscv64@0.24.2: - resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} - engines: {node: '>=18'} - cpu: [riscv64] - os: [linux] - dev: true + '@esbuild/darwin-x64@0.25.1': optional: true - /@esbuild/linux-s390x@0.24.0: - resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - dev: true + '@esbuild/freebsd-arm64@0.25.1': optional: true - /@esbuild/linux-s390x@0.24.2: - resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} - engines: {node: '>=18'} - cpu: [s390x] - os: [linux] - dev: true + '@esbuild/freebsd-x64@0.25.1': optional: true - /@esbuild/linux-x64@0.24.0: - resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - dev: true + '@esbuild/linux-arm64@0.25.1': optional: true - /@esbuild/linux-x64@0.24.2: - resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [linux] - dev: true + '@esbuild/linux-arm@0.25.1': optional: true - /@esbuild/netbsd-arm64@0.24.2: - resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} - engines: {node: '>=18'} - cpu: [arm64] - os: [netbsd] - dev: true + '@esbuild/linux-ia32@0.25.1': optional: true - /@esbuild/netbsd-x64@0.24.0: - resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - dev: true + '@esbuild/linux-loong64@0.25.1': optional: true - /@esbuild/netbsd-x64@0.24.2: - resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} - engines: {node: '>=18'} - cpu: [x64] - os: [netbsd] - dev: true + '@esbuild/linux-mips64el@0.25.1': optional: true - /@esbuild/openbsd-arm64@0.24.0: - resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - dev: true + '@esbuild/linux-ppc64@0.25.1': optional: true - /@esbuild/openbsd-arm64@0.24.2: - resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} - engines: {node: '>=18'} - cpu: [arm64] - os: [openbsd] - dev: true + '@esbuild/linux-riscv64@0.25.1': optional: true - /@esbuild/openbsd-x64@0.24.0: - resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - dev: true + '@esbuild/linux-s390x@0.25.1': optional: true - /@esbuild/openbsd-x64@0.24.2: - resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} - engines: {node: '>=18'} - cpu: [x64] - os: [openbsd] - dev: true + '@esbuild/linux-x64@0.25.1': optional: true - /@esbuild/sunos-x64@0.24.0: - resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - dev: true + '@esbuild/netbsd-arm64@0.25.1': optional: true - /@esbuild/sunos-x64@0.24.2: - resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} - engines: {node: '>=18'} - cpu: [x64] - os: [sunos] - dev: true + '@esbuild/netbsd-x64@0.25.1': optional: true - /@esbuild/win32-arm64@0.24.0: - resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - dev: true + '@esbuild/openbsd-arm64@0.25.1': optional: true - /@esbuild/win32-arm64@0.24.2: - resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} - engines: {node: '>=18'} - cpu: [arm64] - os: [win32] - dev: true + '@esbuild/openbsd-x64@0.25.1': optional: true - /@esbuild/win32-ia32@0.24.0: - resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - dev: true + '@esbuild/sunos-x64@0.25.1': optional: true - /@esbuild/win32-ia32@0.24.2: - resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} - engines: {node: '>=18'} - cpu: [ia32] - os: [win32] - dev: true + '@esbuild/win32-arm64@0.25.1': optional: true - /@esbuild/win32-x64@0.24.0: - resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - dev: true + '@esbuild/win32-ia32@0.25.1': optional: true - /@esbuild/win32-x64@0.24.2: - resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} - engines: {node: '>=18'} - cpu: [x64] - os: [win32] - dev: true + '@esbuild/win32-x64@0.25.1': optional: true - /@eslint-community/eslint-utils@4.4.1(eslint@8.57.0): - resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@eslint-community/eslint-utils@4.4.1(eslint@8.57.0)': dependencies: eslint: 8.57.0 eslint-visitor-keys: 3.4.3 - dev: true - /@eslint-community/regexpp@4.12.1: - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true + '@eslint-community/regexpp@4.12.1': {} - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 debug: 4.4.0(supports-color@10.0.0) espree: 9.6.1 globals: 13.24.0 ignore: 5.3.2 - import-fresh: 3.3.0 + import-fresh: 3.3.1 js-yaml: 4.1.0 minimatch: 3.1.2 strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: true - /@eslint/js@8.57.0: - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@eslint/js@8.57.0': {} - /@glideapps/ts-necessities@2.2.3: - resolution: {integrity: sha512-gXi0awOZLHk3TbW55GZLCPP6O+y/b5X1pBXKBVckFONSwF1z1E5ND2BGJsghQFah+pW7pkkyFb2VhUQI2qhL5w==} - dev: true + '@glideapps/ts-necessities@2.2.3': {} - /@google-cloud/common@5.0.2(supports-color@10.0.0): - resolution: {integrity: sha512-V7bmBKYQyu0eVG2BFejuUjlBt+zrya6vtsKdY+JxMM/dNntPF41vZ9+LhOshEUH01zOHEqBSvI7Dad7ZS6aUeA==} - engines: {node: '>=14.0.0'} + '@google-cloud/common@5.0.2(encoding@0.1.13)(supports-color@10.0.0)': dependencies: '@google-cloud/projectify': 4.0.0 - '@google-cloud/promisify': 4.0.0 + '@google-cloud/promisify': 4.1.0 arrify: 2.0.1 duplexify: 4.1.3 extend: 3.0.2 - google-auth-library: 9.15.0(supports-color@10.0.0) + google-auth-library: 9.15.1(encoding@0.1.13)(supports-color@10.0.0) html-entities: 2.5.2 - retry-request: 7.0.2(supports-color@10.0.0) - teeny-request: 9.0.0(supports-color@10.0.0) + retry-request: 7.0.2(encoding@0.1.13)(supports-color@10.0.0) + teeny-request: 9.0.0(encoding@0.1.13)(supports-color@10.0.0) transitivePeerDependencies: - encoding - supports-color - dev: true - /@google-cloud/precise-date@4.0.0: - resolution: {integrity: sha512-1TUx3KdaU3cN7nfCdNf+UVqA/PSX29Cjcox3fZZBtINlRrXVTmUkQnCKv2MbBUbCopbK4olAT1IHl76uZyCiVA==} - engines: {node: '>=14.0.0'} - dev: true + '@google-cloud/precise-date@4.0.0': {} - /@google-cloud/projectify@4.0.0: - resolution: {integrity: sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==} - engines: {node: '>=14.0.0'} - dev: true + '@google-cloud/projectify@4.0.0': {} - /@google-cloud/promisify@4.0.0: - resolution: {integrity: sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==} - engines: {node: '>=14'} - dev: true + '@google-cloud/promisify@4.1.0': {} - /@google-cloud/spanner@7.17.1(supports-color@10.0.0): - resolution: {integrity: sha512-+dTR6wvb2jANVxNe2bF048QCOVRGbesHe8Tm0OFRhvCgv3ot31JFGPyRKukD7y3jAFSBqyX0bIUV9GVNk4oRPQ==} - engines: {node: '>=14.0.0'} + '@google-cloud/spanner@7.18.1(encoding@0.1.13)(supports-color@10.0.0)': dependencies: - '@google-cloud/common': 5.0.2(supports-color@10.0.0) + '@google-cloud/common': 5.0.2(encoding@0.1.13)(supports-color@10.0.0) '@google-cloud/precise-date': 4.0.0 '@google-cloud/projectify': 4.0.0 - '@google-cloud/promisify': 4.0.0 + '@google-cloud/promisify': 4.1.0 '@grpc/proto-loader': 0.7.13 '@opentelemetry/api': 1.9.0 - '@opentelemetry/context-async-hooks': 1.30.0(@opentelemetry/api@1.9.0) - '@opentelemetry/core': 1.30.0(@opentelemetry/api@1.9.0) - '@opentelemetry/semantic-conventions': 1.28.0 + '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.30.0 '@types/big.js': 6.2.2 '@types/stack-trace': 0.0.33 arrify: 2.0.1 @@ -2616,678 +9528,476 @@ packages: duplexify: 4.1.3 events-intercept: 2.0.0 extend: 3.0.2 - google-auth-library: 9.15.0(supports-color@10.0.0) - google-gax: 4.4.1(supports-color@10.0.0) - grpc-gcp: 1.0.1 + google-auth-library: 9.15.1(encoding@0.1.13)(supports-color@10.0.0) + google-gax: 4.4.1(encoding@0.1.13)(supports-color@10.0.0) + grpc-gcp: 1.0.1(protobufjs@7.4.0) is: 3.3.0 lodash.snakecase: 4.1.1 merge-stream: 2.0.0 p-queue: 6.6.2 protobufjs: 7.4.0 - retry-request: 7.0.2(supports-color@10.0.0) + retry-request: 7.0.2(encoding@0.1.13)(supports-color@10.0.0) split-array-stream: 2.0.0 stack-trace: 0.0.10 stream-events: 1.0.5 - teeny-request: 9.0.0(supports-color@10.0.0) + teeny-request: 9.0.0(encoding@0.1.13)(supports-color@10.0.0) through2: 4.0.2 transitivePeerDependencies: - encoding - supports-color - dev: true - /@grpc/grpc-js@1.12.5: - resolution: {integrity: sha512-d3iiHxdpg5+ZcJ6jnDSOT8Z0O0VMVGy34jAnYLUX8yd36b1qn8f1TwOA/Lc7TsOh03IkPJ38eGI5qD2EjNkoEA==} - engines: {node: '>=12.10.0'} + '@grpc/grpc-js@1.12.6': dependencies: '@grpc/proto-loader': 0.7.13 '@js-sdsl/ordered-map': 4.4.2 - dev: true - /@grpc/proto-loader@0.7.13: - resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} - engines: {node: '>=6'} - hasBin: true + '@grpc/proto-loader@0.7.13': dependencies: lodash.camelcase: 4.3.0 - long: 5.2.3 + long: 5.3.1 protobufjs: 7.4.0 yargs: 17.7.2 - dev: true - /@hapi/bourne@3.0.0: - resolution: {integrity: sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w==} - dev: true + '@hapi/bourne@3.0.0': {} - /@humanwhocodes/config-array@0.11.14: - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@humanwhocodes/config-array@0.11.14': dependencies: '@humanwhocodes/object-schema': 2.0.3 debug: 4.4.0(supports-color@10.0.0) minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true + '@humanwhocodes/module-importer@1.0.1': {} - /@humanwhocodes/object-schema@2.0.3: - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead - dev: true + '@humanwhocodes/object-schema@2.0.3': {} - /@inquirer/checkbox@4.0.4(@types/node@18.19.70): - resolution: {integrity: sha512-fYAKCAcGNMdfjL6hZTRUwkIByQ8EIZCXKrIQZH7XjADnN/xvRUhj8UdBbpC4zoUzvChhkSC/zRKaP/tDs3dZpg==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' + '@inquirer/checkbox@4.1.3(@types/node@18.19.76)': dependencies: - '@inquirer/core': 10.1.2(@types/node@18.19.70) - '@inquirer/figures': 1.0.9 - '@inquirer/type': 3.0.2(@types/node@18.19.70) - '@types/node': 18.19.70 + '@inquirer/core': 10.1.8(@types/node@18.19.76) + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.5(@types/node@18.19.76) ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.2 - dev: true + optionalDependencies: + '@types/node': 18.19.76 - /@inquirer/confirm@5.1.0(@types/node@18.19.70): - resolution: {integrity: sha512-osaBbIMEqVFjTX5exoqPXs6PilWQdjaLhGtMDXMXg/yxkHXNq43GlxGyTA35lK2HpzUgDN+Cjh/2AmqCN0QJpw==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' + '@inquirer/checkbox@4.1.3(@types/node@22.13.10)': dependencies: - '@inquirer/core': 10.1.2(@types/node@18.19.70) - '@inquirer/type': 3.0.2(@types/node@18.19.70) - '@types/node': 18.19.70 - dev: true + '@inquirer/core': 10.1.8(@types/node@22.13.10) + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.5(@types/node@22.13.10) + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.10 - /@inquirer/confirm@5.1.1(@types/node@18.19.70): - resolution: {integrity: sha512-vVLSbGci+IKQvDOtzpPTCOiEJCNidHcAq9JYVoWTW0svb5FiwSLotkM+JXNXejfjnzVYV9n0DTBythl9+XgTxg==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' + '@inquirer/confirm@5.1.6(@types/node@18.19.76)': dependencies: - '@inquirer/core': 10.1.2(@types/node@18.19.70) - '@inquirer/type': 3.0.2(@types/node@18.19.70) - '@types/node': 18.19.70 - dev: true + '@inquirer/core': 10.1.8(@types/node@18.19.76) + '@inquirer/type': 3.0.5(@types/node@18.19.76) + optionalDependencies: + '@types/node': 18.19.76 - /@inquirer/core@10.1.2(@types/node@18.19.70): - resolution: {integrity: sha512-bHd96F3ezHg1mf/J0Rb4CV8ndCN0v28kUlrHqP7+ECm1C/A+paB7Xh2lbMk6x+kweQC+rZOxM/YeKikzxco8bQ==} - engines: {node: '>=18'} + '@inquirer/confirm@5.1.6(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.1.8(@types/node@22.13.10) + '@inquirer/type': 3.0.5(@types/node@22.13.10) + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/core@10.1.8(@types/node@18.19.76)': dependencies: - '@inquirer/figures': 1.0.9 - '@inquirer/type': 3.0.2(@types/node@18.19.70) + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.5(@types/node@18.19.76) ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 - strip-ansi: 6.0.1 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.2 - transitivePeerDependencies: - - '@types/node' - dev: true + optionalDependencies: + '@types/node': 18.19.76 - /@inquirer/editor@4.2.1(@types/node@18.19.70): - resolution: {integrity: sha512-xn9aDaiP6nFa432i68JCaL302FyL6y/6EG97nAtfIPnWZ+mWPgCMLGc4XZ2QQMsZtu9q3Jd5AzBPjXh10aX9kA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' + '@inquirer/core@10.1.8(@types/node@22.13.10)': + dependencies: + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.5(@types/node@22.13.10) + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/editor@4.2.8(@types/node@18.19.76)': dependencies: - '@inquirer/core': 10.1.2(@types/node@18.19.70) - '@inquirer/type': 3.0.2(@types/node@18.19.70) - '@types/node': 18.19.70 + '@inquirer/core': 10.1.8(@types/node@18.19.76) + '@inquirer/type': 3.0.5(@types/node@18.19.76) external-editor: 3.1.0 - dev: true + optionalDependencies: + '@types/node': 18.19.76 - /@inquirer/expand@4.0.4(@types/node@18.19.70): - resolution: {integrity: sha512-GYocr+BPyxKPxQ4UZyNMqZFSGKScSUc0Vk17II3J+0bDcgGsQm0KYQNooN1Q5iBfXsy3x/VWmHGh20QnzsaHwg==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' + '@inquirer/editor@4.2.8(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.1.8(@types/node@22.13.10) + '@inquirer/type': 3.0.5(@types/node@22.13.10) + external-editor: 3.1.0 + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/expand@4.0.10(@types/node@18.19.76)': dependencies: - '@inquirer/core': 10.1.2(@types/node@18.19.70) - '@inquirer/type': 3.0.2(@types/node@18.19.70) - '@types/node': 18.19.70 + '@inquirer/core': 10.1.8(@types/node@18.19.76) + '@inquirer/type': 3.0.5(@types/node@18.19.76) yoctocolors-cjs: 2.1.2 - dev: true + optionalDependencies: + '@types/node': 18.19.76 - /@inquirer/figures@1.0.9: - resolution: {integrity: sha512-BXvGj0ehzrngHTPTDqUoDT3NXL8U0RxUk2zJm2A66RhCEIWdtU1v6GuUqNAgArW4PQ9CinqIWyHdQgdwOj06zQ==} - engines: {node: '>=18'} - dev: true + '@inquirer/expand@4.0.10(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.1.8(@types/node@22.13.10) + '@inquirer/type': 3.0.5(@types/node@22.13.10) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.10 - /@inquirer/input@4.1.1(@types/node@18.19.70): - resolution: {integrity: sha512-nAXAHQndZcXB+7CyjIW3XuQZZHbQQ0q8LX6miY6bqAWwDzNa9JUioDBYrFmOUNIsuF08o1WT/m2gbBXvBhYVxg==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' + '@inquirer/figures@1.0.11': {} + + '@inquirer/input@4.1.7(@types/node@18.19.76)': dependencies: - '@inquirer/core': 10.1.2(@types/node@18.19.70) - '@inquirer/type': 3.0.2(@types/node@18.19.70) - '@types/node': 18.19.70 - dev: true + '@inquirer/core': 10.1.8(@types/node@18.19.76) + '@inquirer/type': 3.0.5(@types/node@18.19.76) + optionalDependencies: + '@types/node': 18.19.76 - /@inquirer/number@3.0.4(@types/node@18.19.70): - resolution: {integrity: sha512-DX7a6IXRPU0j8kr2ovf+QaaDiIf+zEKaZVzCWdLOTk7XigqSXvoh4cul7x68xp54WTQrgSnW7P1WBJDbyY3GhA==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' + '@inquirer/input@4.1.7(@types/node@22.13.10)': dependencies: - '@inquirer/core': 10.1.2(@types/node@18.19.70) - '@inquirer/type': 3.0.2(@types/node@18.19.70) - '@types/node': 18.19.70 - dev: true + '@inquirer/core': 10.1.8(@types/node@22.13.10) + '@inquirer/type': 3.0.5(@types/node@22.13.10) + optionalDependencies: + '@types/node': 22.13.10 - /@inquirer/password@4.0.4(@types/node@18.19.70): - resolution: {integrity: sha512-wiliQOWdjM8FnBmdIHtQV2Ca3S1+tMBUerhyjkRCv1g+4jSvEweGu9GCcvVEgKDhTBT15nrxvk5/bVrGUqSs1w==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' + '@inquirer/number@3.0.10(@types/node@18.19.76)': + dependencies: + '@inquirer/core': 10.1.8(@types/node@18.19.76) + '@inquirer/type': 3.0.5(@types/node@18.19.76) + optionalDependencies: + '@types/node': 18.19.76 + + '@inquirer/number@3.0.10(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.1.8(@types/node@22.13.10) + '@inquirer/type': 3.0.5(@types/node@22.13.10) + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/password@4.0.10(@types/node@18.19.76)': dependencies: - '@inquirer/core': 10.1.2(@types/node@18.19.70) - '@inquirer/type': 3.0.2(@types/node@18.19.70) - '@types/node': 18.19.70 + '@inquirer/core': 10.1.8(@types/node@18.19.76) + '@inquirer/type': 3.0.5(@types/node@18.19.76) ansi-escapes: 4.3.2 - dev: true + optionalDependencies: + '@types/node': 18.19.76 - /@inquirer/prompts@7.2.1(@types/node@18.19.70): - resolution: {integrity: sha512-v2JSGri6/HXSfoGIwuKEn8sNCQK6nsB2BNpy2lSX6QH9bsECrMv93QHnj5+f+1ZWpF/VNioIV2B/PDox8EvGuQ==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' + '@inquirer/password@4.0.10(@types/node@22.13.10)': dependencies: - '@inquirer/checkbox': 4.0.4(@types/node@18.19.70) - '@inquirer/confirm': 5.1.1(@types/node@18.19.70) - '@inquirer/editor': 4.2.1(@types/node@18.19.70) - '@inquirer/expand': 4.0.4(@types/node@18.19.70) - '@inquirer/input': 4.1.1(@types/node@18.19.70) - '@inquirer/number': 3.0.4(@types/node@18.19.70) - '@inquirer/password': 4.0.4(@types/node@18.19.70) - '@inquirer/rawlist': 4.0.4(@types/node@18.19.70) - '@inquirer/search': 3.0.4(@types/node@18.19.70) - '@inquirer/select': 4.0.4(@types/node@18.19.70) - '@types/node': 18.19.70 - dev: true - - /@inquirer/rawlist@4.0.4(@types/node@18.19.70): - resolution: {integrity: sha512-IsVN2EZdNHsmFdKWx9HaXb8T/s3FlR/U1QPt9dwbSyPtjFbMTlW9CRFvnn0bm/QIsrMRD2oMZqrQpSWPQVbXXg==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' + '@inquirer/core': 10.1.8(@types/node@22.13.10) + '@inquirer/type': 3.0.5(@types/node@22.13.10) + ansi-escapes: 4.3.2 + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/prompts@7.3.2(@types/node@18.19.76)': + dependencies: + '@inquirer/checkbox': 4.1.3(@types/node@18.19.76) + '@inquirer/confirm': 5.1.6(@types/node@18.19.76) + '@inquirer/editor': 4.2.8(@types/node@18.19.76) + '@inquirer/expand': 4.0.10(@types/node@18.19.76) + '@inquirer/input': 4.1.7(@types/node@18.19.76) + '@inquirer/number': 3.0.10(@types/node@18.19.76) + '@inquirer/password': 4.0.10(@types/node@18.19.76) + '@inquirer/rawlist': 4.0.10(@types/node@18.19.76) + '@inquirer/search': 3.0.10(@types/node@18.19.76) + '@inquirer/select': 4.0.10(@types/node@18.19.76) + optionalDependencies: + '@types/node': 18.19.76 + + '@inquirer/prompts@7.3.2(@types/node@22.13.10)': + dependencies: + '@inquirer/checkbox': 4.1.3(@types/node@22.13.10) + '@inquirer/confirm': 5.1.6(@types/node@22.13.10) + '@inquirer/editor': 4.2.8(@types/node@22.13.10) + '@inquirer/expand': 4.0.10(@types/node@22.13.10) + '@inquirer/input': 4.1.7(@types/node@22.13.10) + '@inquirer/number': 3.0.10(@types/node@22.13.10) + '@inquirer/password': 4.0.10(@types/node@22.13.10) + '@inquirer/rawlist': 4.0.10(@types/node@22.13.10) + '@inquirer/search': 3.0.10(@types/node@22.13.10) + '@inquirer/select': 4.0.10(@types/node@22.13.10) + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/rawlist@4.0.10(@types/node@18.19.76)': dependencies: - '@inquirer/core': 10.1.2(@types/node@18.19.70) - '@inquirer/type': 3.0.2(@types/node@18.19.70) - '@types/node': 18.19.70 + '@inquirer/core': 10.1.8(@types/node@18.19.76) + '@inquirer/type': 3.0.5(@types/node@18.19.76) yoctocolors-cjs: 2.1.2 - dev: true + optionalDependencies: + '@types/node': 18.19.76 - /@inquirer/search@3.0.4(@types/node@18.19.70): - resolution: {integrity: sha512-tSkJk2SDmC2MEdTIjknXWmCnmPr5owTs9/xjfa14ol1Oh95n6xW7SYn5fiPk4/vrJPys0ggSWiISdPze4LTa7A==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' + '@inquirer/rawlist@4.0.10(@types/node@22.13.10)': dependencies: - '@inquirer/core': 10.1.2(@types/node@18.19.70) - '@inquirer/figures': 1.0.9 - '@inquirer/type': 3.0.2(@types/node@18.19.70) - '@types/node': 18.19.70 + '@inquirer/core': 10.1.8(@types/node@22.13.10) + '@inquirer/type': 3.0.5(@types/node@22.13.10) yoctocolors-cjs: 2.1.2 - dev: true + optionalDependencies: + '@types/node': 22.13.10 - /@inquirer/select@4.0.4(@types/node@18.19.70): - resolution: {integrity: sha512-ZzYLuLoUzTIW9EJm++jBpRiTshGqS3Q1o5qOEQqgzaBlmdsjQr6pA4TUNkwu6OBYgM2mIRbCz6mUhFDfl/GF+w==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' + '@inquirer/search@3.0.10(@types/node@18.19.76)': + dependencies: + '@inquirer/core': 10.1.8(@types/node@18.19.76) + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.5(@types/node@18.19.76) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 18.19.76 + + '@inquirer/search@3.0.10(@types/node@22.13.10)': + dependencies: + '@inquirer/core': 10.1.8(@types/node@22.13.10) + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.5(@types/node@22.13.10) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.10 + + '@inquirer/select@4.0.10(@types/node@18.19.76)': dependencies: - '@inquirer/core': 10.1.2(@types/node@18.19.70) - '@inquirer/figures': 1.0.9 - '@inquirer/type': 3.0.2(@types/node@18.19.70) - '@types/node': 18.19.70 + '@inquirer/core': 10.1.8(@types/node@18.19.76) + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.5(@types/node@18.19.76) ansi-escapes: 4.3.2 yoctocolors-cjs: 2.1.2 - dev: true + optionalDependencies: + '@types/node': 18.19.76 - /@inquirer/type@1.5.5: - resolution: {integrity: sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==} - engines: {node: '>=18'} + '@inquirer/select@4.0.10(@types/node@22.13.10)': dependencies: - mute-stream: 1.0.0 - dev: true + '@inquirer/core': 10.1.8(@types/node@22.13.10) + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.5(@types/node@22.13.10) + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.10 - /@inquirer/type@3.0.2(@types/node@18.19.70): - resolution: {integrity: sha512-ZhQ4TvhwHZF+lGhQ2O/rsjo80XoZR5/5qhOY3t6FJuX5XBg5Be8YzYTvaUGJnc12AUGI2nr4QSUE4PhKSigx7g==} - engines: {node: '>=18'} - peerDependencies: - '@types/node': '>=18' + '@inquirer/type@1.5.5': dependencies: - '@types/node': 18.19.70 - dev: true + mute-stream: 1.0.0 - /@isaacs/cliui@8.0.2: - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} + '@inquirer/type@3.0.5(@types/node@18.19.76)': + optionalDependencies: + '@types/node': 18.19.76 + + '@inquirer/type@3.0.5(@types/node@22.13.10)': + optionalDependencies: + '@types/node': 22.13.10 + + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 - string-width-cjs: /string-width@4.2.3 + string-width-cjs: string-width@4.2.3 strip-ansi: 7.1.0 - strip-ansi-cjs: /strip-ansi@6.0.1 + strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 - wrap-ansi-cjs: /wrap-ansi@7.0.0 - dev: true + wrap-ansi-cjs: wrap-ansi@7.0.0 - /@isaacs/fs-minipass@4.0.1: - resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} - engines: {node: '>=18.0.0'} + '@isaacs/fs-minipass@4.0.1': dependencies: minipass: 7.1.2 - dev: true - /@istanbuljs/schema@0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - dev: true + '@istanbuljs/schema@0.1.3': {} - /@jridgewell/gen-mapping@0.3.8: - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.8': dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 - dev: true - /@jridgewell/resolve-uri@3.1.2: - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - dev: true + '@jridgewell/resolve-uri@3.1.2': {} - /@jridgewell/set-array@1.2.1: - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - dev: true + '@jridgewell/set-array@1.2.1': {} - /@jridgewell/source-map@0.3.6: - resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + '@jridgewell/source-map@0.3.6': dependencies: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - dev: true - /@jridgewell/sourcemap-codec@1.5.0: - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - dev: true + '@jridgewell/sourcemap-codec@1.5.0': {} - /@jridgewell/trace-mapping@0.3.25: - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - dev: true - /@jridgewell/trace-mapping@0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - dev: true - /@js-sdsl/ordered-map@4.4.2: - resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} - dev: true + '@js-sdsl/ordered-map@4.4.2': {} - /@jsonjoy.com/base64@1.1.2(tslib@2.8.1): - resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' + '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': dependencies: tslib: 2.8.1 - dev: true - /@jsonjoy.com/json-pack@1.1.1(tslib@2.8.1): - resolution: {integrity: sha512-osjeBqMJ2lb/j/M8NCPjs1ylqWIcTRTycIhVB5pt6LgzgeRSb0YRZ7j9RfA8wIUrsr/medIuhVyonXRZWLyfdw==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' + '@jsonjoy.com/json-pack@1.2.0(tslib@2.8.1)': dependencies: '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1) '@jsonjoy.com/util': 1.5.0(tslib@2.8.1) hyperdyperid: 1.2.0 thingies: 1.21.0(tslib@2.8.1) tslib: 2.8.1 - dev: true - /@jsonjoy.com/util@1.5.0(tslib@2.8.1): - resolution: {integrity: sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' + '@jsonjoy.com/util@1.5.0(tslib@2.8.1)': dependencies: tslib: 2.8.1 - dev: true - /@leichtgewicht/ip-codec@2.0.5: - resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - dev: true + '@leichtgewicht/ip-codec@2.0.5': {} - /@listr2/prompt-adapter-inquirer@2.0.18(@inquirer/prompts@7.2.1): - resolution: {integrity: sha512-0hz44rAcrphyXcA8IS7EJ2SCoaBZD2u5goE8S/e+q/DL+dOGpqpcLidVOFeLG3VgML62SXmfRLAhWt0zL1oW4Q==} - engines: {node: '>=18.0.0'} - peerDependencies: - '@inquirer/prompts': '>= 3 < 8' + '@listr2/prompt-adapter-inquirer@2.0.18(@inquirer/prompts@7.3.2(@types/node@18.19.76))': dependencies: - '@inquirer/prompts': 7.2.1(@types/node@18.19.70) + '@inquirer/prompts': 7.3.2(@types/node@18.19.76) '@inquirer/type': 1.5.5 - dev: true - - /@lmdb/lmdb-darwin-arm64@3.2.0: - resolution: {integrity: sha512-Ca5N6DGDlH/lIycMj2U3FtokNPdUmGyL+htto3G+gexoXYaDE9cbojVgwXd3/Zih9Friqh7l5qZk+LZEVDwJvQ==} - cpu: [arm64] - os: [darwin] - dev: true - optional: true - - /@lmdb/lmdb-darwin-arm64@3.2.2: - resolution: {integrity: sha512-WBSJT9Z7DTol5viq+DZD2TapeWOw7mlwXxiSBHgAzqVwsaVb0h/ekMD9iu/jDD8MUA20tO9N0WEdnT06fsUp+g==} - cpu: [arm64] - os: [darwin] - dev: true - optional: true - - /@lmdb/lmdb-darwin-x64@3.2.0: - resolution: {integrity: sha512-s/MXLuRXxJjQpg0aM/yN3FJh34tqEPo6Zg+FJvc9+gUNpzXzZwBB9MOTYA05WVrvxwtIKxMg7ocLjAH1LQUT3A==} - cpu: [x64] - os: [darwin] - dev: true - optional: true - - /@lmdb/lmdb-darwin-x64@3.2.2: - resolution: {integrity: sha512-4S13kUtR7c/j/MzkTIBJCXv52hQ41LG2ukeaqw4Eng9K0pNKLFjo1sDSz96/yKhwykxrWDb13ddJ/ZqD3rAhUA==} - cpu: [x64] - os: [darwin] - dev: true - optional: true - - /@lmdb/lmdb-linux-arm64@3.2.0: - resolution: {integrity: sha512-XRkaZok4AkzMXKLfsdJYVBXYJ/6idDpuLIPGiVjelxKLbZIKB7F+Xp2BDfeelAPdjRbW/qhzF7FNA0u1blz/Og==} - cpu: [arm64] - os: [linux] - dev: true - optional: true - /@lmdb/lmdb-linux-arm64@3.2.2: - resolution: {integrity: sha512-4hdgZtWI1idQlWRp+eleWXD9KLvObgboRaVoBj2POdPEYvsKANllvMW0El8tEQwtw74yB9NT6P8ENBB5UJf5+g==} - cpu: [arm64] - os: [linux] - dev: true - optional: true + '@listr2/prompt-adapter-inquirer@2.0.18(@inquirer/prompts@7.3.2(@types/node@22.13.10))': + dependencies: + '@inquirer/prompts': 7.3.2(@types/node@22.13.10) + '@inquirer/type': 1.5.5 - /@lmdb/lmdb-linux-arm@3.2.0: - resolution: {integrity: sha512-e9pljI8rZk1UAaDdi7sGiY0zkqsNAS3a4llOuk2UslAH4UP9vGZfjfCR5D+HKPUPbSEk28adOiNmIUT4N2lTBw==} - cpu: [arm] - os: [linux] - dev: true + '@lmdb/lmdb-darwin-arm64@3.2.6': optional: true - /@lmdb/lmdb-linux-arm@3.2.2: - resolution: {integrity: sha512-uW31JmfuPAaLUYW7NsEU8gzwgDAzpGPwjvkxnKlcWd8iDutoPKDJi8Wk9lFmPEZRxVSB0j1/wDQ7N2qliR9UFA==} - cpu: [arm] - os: [linux] - dev: true + '@lmdb/lmdb-darwin-x64@3.2.6': optional: true - /@lmdb/lmdb-linux-x64@3.2.0: - resolution: {integrity: sha512-c8HMb044qzMT/wvk4HzBesRv3wQNeFkUFz6laH3FKVs0+ztM7snuT3izPWdeYhgCLkAiIqshqlcbvzQfPDeg2Q==} - cpu: [x64] - os: [linux] - dev: true + '@lmdb/lmdb-linux-arm64@3.2.6': optional: true - /@lmdb/lmdb-linux-x64@3.2.2: - resolution: {integrity: sha512-A0zjf4a2vM4B4GAx78ncuOTZ8Ka1DbTaG1Axf1e00Sa7f5coqlWiLg1PX7Gxvyibc2YqtqB+8tg1KKrE8guZVw==} - cpu: [x64] - os: [linux] - dev: true + '@lmdb/lmdb-linux-arm@3.2.6': optional: true - /@lmdb/lmdb-win32-x64@3.2.0: - resolution: {integrity: sha512-xcrdSOPtpZ4ScWJM2x4g+eWCOctINOcaEWGSvZbmXPFD69SAFywyhqNsB3snAY3assYV0B52PWmiAwXWfijd+g==} - cpu: [x64] - os: [win32] - dev: true + '@lmdb/lmdb-linux-x64@3.2.6': optional: true - /@lmdb/lmdb-win32-x64@3.2.2: - resolution: {integrity: sha512-Y0qoSCAja+xZE7QQ0LCHoYAuyI1n9ZqukQJa8lv9X3yCvWahFF7OYHAgVH1ejp43XWstj3U89/PAAzcowgF/uQ==} - cpu: [x64] - os: [win32] - dev: true + '@lmdb/lmdb-win32-x64@3.2.6': optional: true - /@microsoft/api-extractor-model@7.30.1(@types/node@18.19.70): - resolution: {integrity: sha512-CTS2PlASJHxVY8hqHORVb1HdECWOEMcMnM6/kDkPr0RZapAFSIHhg9D4jxuE8g+OWYHtPc10LCpmde5pylTRlA==} + '@microsoft/api-extractor-model@7.30.3(@types/node@18.19.76)': dependencies: '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.10.1(@types/node@18.19.70) + '@rushstack/node-core-library': 5.11.0(@types/node@18.19.76) transitivePeerDependencies: - '@types/node' - dev: true - /@microsoft/api-extractor@7.49.0(@types/node@18.19.70): - resolution: {integrity: sha512-X5b462k0/yl8qWdGx3siq5vyI8fTDU9fRnwqTMlGHqFhLxpASmLWA2EU6nft+ZG8cQM2HRZlr4HSo62UqiAnug==} - hasBin: true + '@microsoft/api-extractor@7.50.0(@types/node@18.19.76)': dependencies: - '@microsoft/api-extractor-model': 7.30.1(@types/node@18.19.70) + '@microsoft/api-extractor-model': 7.30.3(@types/node@18.19.76) '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.10.1(@types/node@18.19.70) + '@rushstack/node-core-library': 5.11.0(@types/node@18.19.76) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.14.4(@types/node@18.19.70) - '@rushstack/ts-command-line': 4.23.2(@types/node@18.19.70) + '@rushstack/terminal': 0.15.0(@types/node@18.19.76) + '@rushstack/ts-command-line': 4.23.5(@types/node@18.19.76) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.10 semver: 7.5.4 source-map: 0.6.1 - typescript: 5.7.2 + typescript: 5.8.1-rc transitivePeerDependencies: - '@types/node' - dev: true - /@microsoft/tsdoc-config@0.17.1: - resolution: {integrity: sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==} + '@microsoft/tsdoc-config@0.17.1': dependencies: '@microsoft/tsdoc': 0.15.1 ajv: 8.12.0 jju: 1.4.0 resolve: 1.22.10 - dev: true - /@microsoft/tsdoc@0.15.1: - resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==} - dev: true + '@microsoft/tsdoc@0.15.1': {} - /@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3: - resolution: {integrity: sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw==} - cpu: [arm64] - os: [darwin] - dev: true + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3': optional: true - /@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3: - resolution: {integrity: sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw==} - cpu: [x64] - os: [darwin] - dev: true + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3': optional: true - /@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3: - resolution: {integrity: sha512-YxQL+ax0XqBJDZiKimS2XQaf+2wDGVa1enVRGzEvLLVFeqa5kx2bWbtcSXgsxjQB7nRqqIGFIcLteF/sHeVtQg==} - cpu: [arm64] - os: [linux] - dev: true + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.3': optional: true - /@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3: - resolution: {integrity: sha512-fg0uy/dG/nZEXfYilKoRe7yALaNmHoYeIoJuJ7KJ+YyU2bvY8vPv27f7UKhGRpY6euFYqEVhxCFZgAUNQBM3nw==} - cpu: [arm] - os: [linux] - dev: true + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.3': optional: true - /@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3: - resolution: {integrity: sha512-cvwNfbP07pKUfq1uH+S6KJ7dT9K8WOE4ZiAcsrSes+UY55E/0jLYc+vq+DO7jlmqRb5zAggExKm0H7O/CBaesg==} - cpu: [x64] - os: [linux] - dev: true + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.3': optional: true - /@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3: - resolution: {integrity: sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ==} - cpu: [x64] - os: [win32] - dev: true + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.3': optional: true - /@napi-rs/nice-android-arm-eabi@1.0.1: - resolution: {integrity: sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w==} - engines: {node: '>= 10'} - cpu: [arm] - os: [android] - dev: true + '@napi-rs/nice-android-arm-eabi@1.0.1': optional: true - /@napi-rs/nice-android-arm64@1.0.1: - resolution: {integrity: sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [android] - dev: true + '@napi-rs/nice-android-arm64@1.0.1': optional: true - /@napi-rs/nice-darwin-arm64@1.0.1: - resolution: {integrity: sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - dev: true + '@napi-rs/nice-darwin-arm64@1.0.1': optional: true - /@napi-rs/nice-darwin-x64@1.0.1: - resolution: {integrity: sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - dev: true + '@napi-rs/nice-darwin-x64@1.0.1': optional: true - /@napi-rs/nice-freebsd-x64@1.0.1: - resolution: {integrity: sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [freebsd] - dev: true + '@napi-rs/nice-freebsd-x64@1.0.1': optional: true - /@napi-rs/nice-linux-arm-gnueabihf@1.0.1: - resolution: {integrity: sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - dev: true + '@napi-rs/nice-linux-arm-gnueabihf@1.0.1': optional: true - /@napi-rs/nice-linux-arm64-gnu@1.0.1: - resolution: {integrity: sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - dev: true + '@napi-rs/nice-linux-arm64-gnu@1.0.1': optional: true - /@napi-rs/nice-linux-arm64-musl@1.0.1: - resolution: {integrity: sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - dev: true + '@napi-rs/nice-linux-arm64-musl@1.0.1': optional: true - /@napi-rs/nice-linux-ppc64-gnu@1.0.1: - resolution: {integrity: sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q==} - engines: {node: '>= 10'} - cpu: [ppc64] - os: [linux] - dev: true + '@napi-rs/nice-linux-ppc64-gnu@1.0.1': optional: true - /@napi-rs/nice-linux-riscv64-gnu@1.0.1: - resolution: {integrity: sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig==} - engines: {node: '>= 10'} - cpu: [riscv64] - os: [linux] - dev: true + '@napi-rs/nice-linux-riscv64-gnu@1.0.1': optional: true - /@napi-rs/nice-linux-s390x-gnu@1.0.1: - resolution: {integrity: sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg==} - engines: {node: '>= 10'} - cpu: [s390x] - os: [linux] - dev: true + '@napi-rs/nice-linux-s390x-gnu@1.0.1': optional: true - /@napi-rs/nice-linux-x64-gnu@1.0.1: - resolution: {integrity: sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - dev: true + '@napi-rs/nice-linux-x64-gnu@1.0.1': optional: true - - /@napi-rs/nice-linux-x64-musl@1.0.1: - resolution: {integrity: sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - dev: true + + '@napi-rs/nice-linux-x64-musl@1.0.1': optional: true - /@napi-rs/nice-win32-arm64-msvc@1.0.1: - resolution: {integrity: sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - dev: true + '@napi-rs/nice-win32-arm64-msvc@1.0.1': optional: true - /@napi-rs/nice-win32-ia32-msvc@1.0.1: - resolution: {integrity: sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - dev: true + '@napi-rs/nice-win32-ia32-msvc@1.0.1': optional: true - /@napi-rs/nice-win32-x64-msvc@1.0.1: - resolution: {integrity: sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - dev: true + '@napi-rs/nice-win32-x64-msvc@1.0.1': optional: true - /@napi-rs/nice@1.0.1: - resolution: {integrity: sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ==} - engines: {node: '>= 10'} + '@napi-rs/nice@1.0.1': optionalDependencies: '@napi-rs/nice-android-arm-eabi': 1.0.1 '@napi-rs/nice-android-arm64': 1.0.1 @@ -3305,33 +10015,21 @@ packages: '@napi-rs/nice-win32-arm64-msvc': 1.0.1 '@napi-rs/nice-win32-ia32-msvc': 1.0.1 '@napi-rs/nice-win32-x64-msvc': 1.0.1 - dev: true optional: true - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true + '@nodelib/fs.stat@2.0.5': {} - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.18.0 - dev: true + fastq: 1.19.1 - /@npmcli/agent@3.0.0: - resolution: {integrity: sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==} - engines: {node: ^18.17.0 || >=20.5.0} + '@npmcli/agent@3.0.0': dependencies: agent-base: 7.1.3 http-proxy-agent: 7.0.2 @@ -3340,913 +10038,428 @@ packages: socks-proxy-agent: 8.0.5 transitivePeerDependencies: - supports-color - dev: true - /@npmcli/fs@4.0.0: - resolution: {integrity: sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==} - engines: {node: ^18.17.0 || >=20.5.0} + '@npmcli/fs@4.0.0': dependencies: - semver: 7.6.3 - dev: true + semver: 7.7.1 - /@npmcli/git@6.0.1: - resolution: {integrity: sha512-BBWMMxeQzalmKadyimwb2/VVQyJB01PH0HhVSNLHNBDZN/M/h/02P6f8fxedIiFhpMj11SO9Ep5tKTBE7zL2nw==} - engines: {node: ^18.17.0 || >=20.5.0} + '@npmcli/git@6.0.3': dependencies: '@npmcli/promise-spawn': 8.0.2 ini: 5.0.0 lru-cache: 10.4.3 npm-pick-manifest: 10.0.0 proc-log: 5.0.0 - promise-inflight: 1.0.1 promise-retry: 2.0.1 - semver: 7.6.3 + semver: 7.7.1 which: 5.0.0 - transitivePeerDependencies: - - bluebird - dev: true - /@npmcli/installed-package-contents@3.0.0: - resolution: {integrity: sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true + '@npmcli/installed-package-contents@3.0.0': dependencies: npm-bundled: 4.0.0 npm-normalize-package-bin: 4.0.0 - dev: true - /@npmcli/node-gyp@4.0.0: - resolution: {integrity: sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==} - engines: {node: ^18.17.0 || >=20.5.0} - dev: true + '@npmcli/node-gyp@4.0.0': {} - /@npmcli/package-json@6.1.0: - resolution: {integrity: sha512-t6G+6ZInT4X+tqj2i+wlLIeCKnKOTuz9/VFYDtj+TGTur5q7sp/OYrQA19LdBbWfXDOi0Y4jtedV6xtB8zQ9ug==} - engines: {node: ^18.17.0 || >=20.5.0} + '@npmcli/package-json@6.1.1': dependencies: - '@npmcli/git': 6.0.1 + '@npmcli/git': 6.0.3 glob: 10.4.5 hosted-git-info: 8.0.2 json-parse-even-better-errors: 4.0.0 - normalize-package-data: 7.0.0 proc-log: 5.0.0 - semver: 7.6.3 - transitivePeerDependencies: - - bluebird - dev: true + semver: 7.7.1 + validate-npm-package-license: 3.0.4 - /@npmcli/promise-spawn@8.0.2: - resolution: {integrity: sha512-/bNJhjc+o6qL+Dwz/bqfTQClkEO5nTQ1ZEcdCkAQjhkZMHIh22LPG7fNh1enJP1NKWDqYiiABnjFCY7E0zHYtQ==} - engines: {node: ^18.17.0 || >=20.5.0} + '@npmcli/promise-spawn@8.0.2': dependencies: which: 5.0.0 - dev: true - /@npmcli/redact@3.0.0: - resolution: {integrity: sha512-/1uFzjVcfzqrgCeGW7+SZ4hv0qLWmKXVzFahZGJ6QuJBj6Myt9s17+JL86i76NV9YSnJRcGXJYQbAU0rn1YTCQ==} - engines: {node: ^18.17.0 || >=20.5.0} - dev: true + '@npmcli/redact@3.1.1': {} - /@npmcli/run-script@9.0.2: - resolution: {integrity: sha512-cJXiUlycdizQwvqE1iaAb4VRUM3RX09/8q46zjvy+ct9GhfZRWd7jXYVc1tn/CfRlGPVkX/u4sstRlepsm7hfw==} - engines: {node: ^18.17.0 || >=20.5.0} + '@npmcli/run-script@9.1.0': dependencies: '@npmcli/node-gyp': 4.0.0 - '@npmcli/package-json': 6.1.0 + '@npmcli/package-json': 6.1.1 '@npmcli/promise-spawn': 8.0.2 - node-gyp: 11.0.0 + node-gyp: 11.1.0 proc-log: 5.0.0 which: 5.0.0 transitivePeerDependencies: - - bluebird - supports-color - dev: true - /@octokit/auth-token@5.1.1: - resolution: {integrity: sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==} - engines: {node: '>= 18'} - dev: true + '@octokit/auth-token@5.1.2': {} - /@octokit/core@6.1.3: - resolution: {integrity: sha512-z+j7DixNnfpdToYsOutStDgeRzJSMnbj8T1C/oQjB6Aa+kRfNjs/Fn7W6c8bmlt6mfy3FkgeKBRnDjxQow5dow==} - engines: {node: '>= 18'} + '@octokit/core@6.1.4': dependencies: - '@octokit/auth-token': 5.1.1 - '@octokit/graphql': 8.1.2 - '@octokit/request': 9.1.4 - '@octokit/request-error': 6.1.6 - '@octokit/types': 13.6.2 + '@octokit/auth-token': 5.1.2 + '@octokit/graphql': 8.2.1 + '@octokit/request': 9.2.2 + '@octokit/request-error': 6.1.7 + '@octokit/types': 13.8.0 before-after-hook: 3.0.2 universal-user-agent: 7.0.2 - dev: true - /@octokit/endpoint@10.1.2: - resolution: {integrity: sha512-XybpFv9Ms4hX5OCHMZqyODYqGTZ3H6K6Vva+M9LR7ib/xr1y1ZnlChYv9H680y77Vd/i/k+thXApeRASBQkzhA==} - engines: {node: '>= 18'} + '@octokit/endpoint@10.1.3': dependencies: - '@octokit/types': 13.6.2 + '@octokit/types': 13.8.0 universal-user-agent: 7.0.2 - dev: true - /@octokit/graphql@8.1.2: - resolution: {integrity: sha512-bdlj/CJVjpaz06NBpfHhp4kGJaRZfz7AzC+6EwUImRtrwIw8dIgJ63Xg0OzV9pRn3rIzrt5c2sa++BL0JJ8GLw==} - engines: {node: '>= 18'} + '@octokit/graphql@8.2.1': dependencies: - '@octokit/request': 9.1.4 - '@octokit/types': 13.6.2 + '@octokit/request': 9.2.2 + '@octokit/types': 13.8.0 universal-user-agent: 7.0.2 - dev: true - /@octokit/openapi-types@22.2.0: - resolution: {integrity: sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==} - dev: true + '@octokit/openapi-types@23.0.1': {} - /@octokit/plugin-paginate-rest@11.3.6(@octokit/core@6.1.3): - resolution: {integrity: sha512-zcvqqf/+TicbTCa/Z+3w4eBJcAxCFymtc0UAIsR3dEVoNilWld4oXdscQ3laXamTszUZdusw97K8+DrbFiOwjw==} - engines: {node: '>= 18'} - peerDependencies: - '@octokit/core': '>=6' + '@octokit/plugin-paginate-rest@11.4.3(@octokit/core@6.1.4)': dependencies: - '@octokit/core': 6.1.3 - '@octokit/types': 13.6.2 - dev: true + '@octokit/core': 6.1.4 + '@octokit/types': 13.8.0 - /@octokit/plugin-request-log@5.3.1(@octokit/core@6.1.3): - resolution: {integrity: sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==} - engines: {node: '>= 18'} - peerDependencies: - '@octokit/core': '>=6' + '@octokit/plugin-request-log@5.3.1(@octokit/core@6.1.4)': dependencies: - '@octokit/core': 6.1.3 - dev: true + '@octokit/core': 6.1.4 - /@octokit/plugin-rest-endpoint-methods@13.2.6(@octokit/core@6.1.3): - resolution: {integrity: sha512-wMsdyHMjSfKjGINkdGKki06VEkgdEldIGstIEyGX0wbYHGByOwN/KiM+hAAlUwAtPkP3gvXtVQA9L3ITdV2tVw==} - engines: {node: '>= 18'} - peerDependencies: - '@octokit/core': '>=6' + '@octokit/plugin-rest-endpoint-methods@13.3.1(@octokit/core@6.1.4)': dependencies: - '@octokit/core': 6.1.3 - '@octokit/types': 13.6.2 - dev: true + '@octokit/core': 6.1.4 + '@octokit/types': 13.8.0 - /@octokit/request-error@6.1.6: - resolution: {integrity: sha512-pqnVKYo/at0NuOjinrgcQYpEbv4snvP3bKMRqHaD9kIsk9u1LCpb2smHZi8/qJfgeNqLo5hNW4Z7FezNdEo0xg==} - engines: {node: '>= 18'} + '@octokit/request-error@6.1.7': dependencies: - '@octokit/types': 13.6.2 - dev: true + '@octokit/types': 13.8.0 - /@octokit/request@9.1.4: - resolution: {integrity: sha512-tMbOwGm6wDII6vygP3wUVqFTw3Aoo0FnVQyhihh8vVq12uO3P+vQZeo2CKMpWtPSogpACD0yyZAlVlQnjW71DA==} - engines: {node: '>= 18'} + '@octokit/request@9.2.2': dependencies: - '@octokit/endpoint': 10.1.2 - '@octokit/request-error': 6.1.6 - '@octokit/types': 13.6.2 + '@octokit/endpoint': 10.1.3 + '@octokit/request-error': 6.1.7 + '@octokit/types': 13.8.0 fast-content-type-parse: 2.0.1 universal-user-agent: 7.0.2 - dev: true - /@octokit/rest@21.0.2: - resolution: {integrity: sha512-+CiLisCoyWmYicH25y1cDfCrv41kRSvTq6pPWtRroRJzhsCZWZyCqGyI8foJT5LmScADSwRAnr/xo+eewL04wQ==} - engines: {node: '>= 18'} + '@octokit/rest@21.1.1': dependencies: - '@octokit/core': 6.1.3 - '@octokit/plugin-paginate-rest': 11.3.6(@octokit/core@6.1.3) - '@octokit/plugin-request-log': 5.3.1(@octokit/core@6.1.3) - '@octokit/plugin-rest-endpoint-methods': 13.2.6(@octokit/core@6.1.3) - dev: true + '@octokit/core': 6.1.4 + '@octokit/plugin-paginate-rest': 11.4.3(@octokit/core@6.1.4) + '@octokit/plugin-request-log': 5.3.1(@octokit/core@6.1.4) + '@octokit/plugin-rest-endpoint-methods': 13.3.1(@octokit/core@6.1.4) - /@octokit/types@13.6.2: - resolution: {integrity: sha512-WpbZfZUcZU77DrSW4wbsSgTPfKcp286q3ItaIgvSbBpZJlu6mnYXAkjZz6LVZPXkEvLIM8McanyZejKTYUHipA==} + '@octokit/types@13.8.0': dependencies: - '@octokit/openapi-types': 22.2.0 - dev: true + '@octokit/openapi-types': 23.0.1 - /@opentelemetry/api@1.9.0: - resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} - engines: {node: '>=8.0.0'} - dev: true + '@opentelemetry/api@1.9.0': {} - /@opentelemetry/context-async-hooks@1.30.0(@opentelemetry/api@1.9.0): - resolution: {integrity: sha512-roCetrG/cz0r/gugQm/jFo75UxblVvHaNSRoR0kSSRSzXFAiIBqFCZuH458BHBNRtRe+0yJdIJ21L9t94bw7+g==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 - dev: true - /@opentelemetry/core@1.30.0(@opentelemetry/api@1.9.0): - resolution: {integrity: sha512-Q/3u/K73KUjTCnFUP97ZY+pBjQ1kPEgjOfXj/bJl8zW7GbXdkw6cwuyZk6ZTXkVgCBsYRYUzx4fvYK1jxdb9MA==} - engines: {node: '>=14'} - peerDependencies: - '@opentelemetry/api': '>=1.0.0 <1.10.0' + '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.28.0 - dev: true - /@opentelemetry/semantic-conventions@1.28.0: - resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} - engines: {node: '>=14'} - dev: true + '@opentelemetry/semantic-conventions@1.28.0': {} - /@parcel/watcher-android-arm64@2.5.0: - resolution: {integrity: sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [android] - dev: true + '@opentelemetry/semantic-conventions@1.30.0': {} + + '@parcel/watcher-android-arm64@2.5.1': optional: true - /@parcel/watcher-darwin-arm64@2.5.0: - resolution: {integrity: sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [darwin] - dev: true + '@parcel/watcher-darwin-arm64@2.5.1': optional: true - /@parcel/watcher-darwin-x64@2.5.0: - resolution: {integrity: sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [darwin] - dev: true + '@parcel/watcher-darwin-x64@2.5.1': optional: true - /@parcel/watcher-freebsd-x64@2.5.0: - resolution: {integrity: sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [freebsd] - dev: true + '@parcel/watcher-freebsd-x64@2.5.1': optional: true - /@parcel/watcher-linux-arm-glibc@2.5.0: - resolution: {integrity: sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==} - engines: {node: '>= 10.0.0'} - cpu: [arm] - os: [linux] - dev: true + '@parcel/watcher-linux-arm-glibc@2.5.1': optional: true - /@parcel/watcher-linux-arm-musl@2.5.0: - resolution: {integrity: sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==} - engines: {node: '>= 10.0.0'} - cpu: [arm] - os: [linux] - dev: true + '@parcel/watcher-linux-arm-musl@2.5.1': optional: true - /@parcel/watcher-linux-arm64-glibc@2.5.0: - resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [linux] - dev: true + '@parcel/watcher-linux-arm64-glibc@2.5.1': optional: true - /@parcel/watcher-linux-arm64-musl@2.5.0: - resolution: {integrity: sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [linux] - dev: true + '@parcel/watcher-linux-arm64-musl@2.5.1': optional: true - /@parcel/watcher-linux-x64-glibc@2.5.0: - resolution: {integrity: sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [linux] - dev: true + '@parcel/watcher-linux-x64-glibc@2.5.1': optional: true - /@parcel/watcher-linux-x64-musl@2.5.0: - resolution: {integrity: sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [linux] - dev: true + '@parcel/watcher-linux-x64-musl@2.5.1': optional: true - /@parcel/watcher-win32-arm64@2.5.0: - resolution: {integrity: sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [win32] - dev: true + '@parcel/watcher-win32-arm64@2.5.1': optional: true - /@parcel/watcher-win32-ia32@2.5.0: - resolution: {integrity: sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==} - engines: {node: '>= 10.0.0'} - cpu: [ia32] - os: [win32] - dev: true + '@parcel/watcher-win32-ia32@2.5.1': optional: true - /@parcel/watcher-win32-x64@2.5.0: - resolution: {integrity: sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [win32] - dev: true + '@parcel/watcher-win32-x64@2.5.1': optional: true - /@parcel/watcher@2.5.0: - resolution: {integrity: sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==} - engines: {node: '>= 10.0.0'} + '@parcel/watcher@2.5.1': dependencies: detect-libc: 1.0.3 is-glob: 4.0.3 micromatch: 4.0.8 node-addon-api: 7.1.1 optionalDependencies: - '@parcel/watcher-android-arm64': 2.5.0 - '@parcel/watcher-darwin-arm64': 2.5.0 - '@parcel/watcher-darwin-x64': 2.5.0 - '@parcel/watcher-freebsd-x64': 2.5.0 - '@parcel/watcher-linux-arm-glibc': 2.5.0 - '@parcel/watcher-linux-arm-musl': 2.5.0 - '@parcel/watcher-linux-arm64-glibc': 2.5.0 - '@parcel/watcher-linux-arm64-musl': 2.5.0 - '@parcel/watcher-linux-x64-glibc': 2.5.0 - '@parcel/watcher-linux-x64-musl': 2.5.0 - '@parcel/watcher-win32-arm64': 2.5.0 - '@parcel/watcher-win32-ia32': 2.5.0 - '@parcel/watcher-win32-x64': 2.5.0 - dev: true + '@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 optional: true - /@pkgjs/parseargs@0.11.0: - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - dev: true + '@pkgjs/parseargs@0.11.0': optional: true - /@protobufjs/aspromise@1.1.2: - resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} - dev: true + '@protobufjs/aspromise@1.1.2': {} - /@protobufjs/base64@1.1.2: - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - dev: true + '@protobufjs/base64@1.1.2': {} - /@protobufjs/codegen@2.0.4: - resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} - dev: true + '@protobufjs/codegen@2.0.4': {} - /@protobufjs/eventemitter@1.1.0: - resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} - dev: true + '@protobufjs/eventemitter@1.1.0': {} - /@protobufjs/fetch@1.1.0: - resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + '@protobufjs/fetch@1.1.0': dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/inquire': 1.1.0 - dev: true - /@protobufjs/float@1.0.2: - resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - dev: true + '@protobufjs/float@1.0.2': {} - /@protobufjs/inquire@1.1.0: - resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} - dev: true + '@protobufjs/inquire@1.1.0': {} - /@protobufjs/path@1.1.2: - resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} - dev: true + '@protobufjs/path@1.1.2': {} - /@protobufjs/pool@1.1.0: - resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} - dev: true + '@protobufjs/pool@1.1.0': {} - /@protobufjs/utf8@1.1.0: - resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - dev: true + '@protobufjs/utf8@1.1.0': {} - /@puppeteer/browsers@2.6.1: - resolution: {integrity: sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==} - engines: {node: '>=18'} - hasBin: true + '@puppeteer/browsers@2.8.0': dependencies: debug: 4.4.0(supports-color@10.0.0) extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.5.0 - semver: 7.6.3 - tar-fs: 3.0.6 - unbzip2-stream: 1.4.3 + semver: 7.7.1 + tar-fs: 3.0.8 yargs: 17.7.2 transitivePeerDependencies: + - bare-buffer - supports-color - dev: true - /@rollup/plugin-alias@5.1.1(rollup@4.30.1): - resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - rollup: 4.30.1 - dev: true + '@rollup/plugin-alias@5.1.1(rollup@4.34.8)': + optionalDependencies: + rollup: 4.34.8 - /@rollup/plugin-commonjs@28.0.2(rollup@4.30.1): - resolution: {integrity: sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==} - engines: {node: '>=16.0.0 || 14 >= 14.17'} - peerDependencies: - rollup: ^2.68.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true + '@rollup/plugin-commonjs@28.0.3(rollup@4.34.8)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.30.1) + '@rollup/pluginutils': 5.1.4(rollup@4.34.8) commondir: 1.0.1 estree-walker: 2.0.2 - fdir: 6.4.2(picomatch@4.0.2) + fdir: 6.4.3(picomatch@4.0.2) is-reference: 1.2.1 magic-string: 0.30.17 picomatch: 4.0.2 - rollup: 4.30.1 - dev: true + optionalDependencies: + rollup: 4.34.8 - /@rollup/plugin-json@6.1.0(rollup@4.30.1): - resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true + '@rollup/plugin-json@6.1.0(rollup@4.34.8)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.30.1) - rollup: 4.30.1 - dev: true + '@rollup/pluginutils': 5.1.4(rollup@4.34.8) + optionalDependencies: + rollup: 4.34.8 - /@rollup/plugin-node-resolve@13.3.0(rollup@4.30.1): - resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==} - engines: {node: '>= 10.0.0'} - peerDependencies: - rollup: ^2.42.0 + '@rollup/plugin-node-resolve@13.3.0(rollup@4.34.8)': dependencies: - '@rollup/pluginutils': 3.1.0(rollup@4.30.1) + '@rollup/pluginutils': 3.1.0(rollup@4.34.8) '@types/resolve': 1.17.1 deepmerge: 4.3.1 is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.10 - rollup: 4.30.1 - dev: true - - /@rollup/plugin-node-resolve@15.3.1(rollup@4.30.1): - resolution: {integrity: sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.30.1) - '@types/resolve': 1.20.2 - deepmerge: 4.3.1 - is-module: 1.0.0 - resolve: 1.22.10 - rollup: 4.30.1 - dev: true - - /@rollup/pluginutils@3.1.0(rollup@4.30.1): - resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} - engines: {node: '>= 8.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0 - dependencies: - '@types/estree': 0.0.39 - estree-walker: 1.0.1 - picomatch: 2.3.1 - rollup: 4.30.1 - dev: true - - /@rollup/pluginutils@5.1.4(rollup@4.30.1): - resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@types/estree': 1.0.6 - estree-walker: 2.0.2 - picomatch: 4.0.2 - rollup: 4.30.1 - dev: true - - /@rollup/rollup-android-arm-eabi@4.28.1: - resolution: {integrity: sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==} - cpu: [arm] - os: [android] - dev: true - optional: true - - /@rollup/rollup-android-arm-eabi@4.30.1: - resolution: {integrity: sha512-pSWY+EVt3rJ9fQ3IqlrEUtXh3cGqGtPDH1FQlNZehO2yYxCHEX1SPsz1M//NXwYfbTlcKr9WObLnJX9FsS9K1Q==} - cpu: [arm] - os: [android] - dev: true - optional: true - - /@rollup/rollup-android-arm64@4.28.1: - resolution: {integrity: sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==} - cpu: [arm64] - os: [android] - dev: true - optional: true - - /@rollup/rollup-android-arm64@4.30.1: - resolution: {integrity: sha512-/NA2qXxE3D/BRjOJM8wQblmArQq1YoBVJjrjoTSBS09jgUisq7bqxNHJ8kjCHeV21W/9WDGwJEWSN0KQ2mtD/w==} - cpu: [arm64] - os: [android] - dev: true - optional: true - - /@rollup/rollup-darwin-arm64@4.28.1: - resolution: {integrity: sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==} - cpu: [arm64] - os: [darwin] - dev: true - optional: true - - /@rollup/rollup-darwin-arm64@4.30.1: - resolution: {integrity: sha512-r7FQIXD7gB0WJ5mokTUgUWPl0eYIH0wnxqeSAhuIwvnnpjdVB8cRRClyKLQr7lgzjctkbp5KmswWszlwYln03Q==} - cpu: [arm64] - os: [darwin] - dev: true - optional: true - - /@rollup/rollup-darwin-x64@4.28.1: - resolution: {integrity: sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==} - cpu: [x64] - os: [darwin] - dev: true - optional: true - - /@rollup/rollup-darwin-x64@4.30.1: - resolution: {integrity: sha512-x78BavIwSH6sqfP2xeI1hd1GpHL8J4W2BXcVM/5KYKoAD3nNsfitQhvWSw+TFtQTLZ9OmlF+FEInEHyubut2OA==} - cpu: [x64] - os: [darwin] - dev: true - optional: true - - /@rollup/rollup-freebsd-arm64@4.28.1: - resolution: {integrity: sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==} - cpu: [arm64] - os: [freebsd] - dev: true - optional: true - - /@rollup/rollup-freebsd-arm64@4.30.1: - resolution: {integrity: sha512-HYTlUAjbO1z8ywxsDFWADfTRfTIIy/oUlfIDmlHYmjUP2QRDTzBuWXc9O4CXM+bo9qfiCclmHk1x4ogBjOUpUQ==} - cpu: [arm64] - os: [freebsd] - dev: true - optional: true - - /@rollup/rollup-freebsd-x64@4.28.1: - resolution: {integrity: sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==} - cpu: [x64] - os: [freebsd] - dev: true - optional: true - - /@rollup/rollup-freebsd-x64@4.30.1: - resolution: {integrity: sha512-1MEdGqogQLccphhX5myCJqeGNYTNcmTyaic9S7CG3JhwuIByJ7J05vGbZxsizQthP1xpVx7kd3o31eOogfEirw==} - cpu: [x64] - os: [freebsd] - dev: true - optional: true - - /@rollup/rollup-linux-arm-gnueabihf@4.28.1: - resolution: {integrity: sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==} - cpu: [arm] - os: [linux] - dev: true - optional: true - - /@rollup/rollup-linux-arm-gnueabihf@4.30.1: - resolution: {integrity: sha512-PaMRNBSqCx7K3Wc9QZkFx5+CX27WFpAMxJNiYGAXfmMIKC7jstlr32UhTgK6T07OtqR+wYlWm9IxzennjnvdJg==} - cpu: [arm] - os: [linux] - dev: true - optional: true - - /@rollup/rollup-linux-arm-musleabihf@4.28.1: - resolution: {integrity: sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==} - cpu: [arm] - os: [linux] - dev: true - optional: true - - /@rollup/rollup-linux-arm-musleabihf@4.30.1: - resolution: {integrity: sha512-B8Rcyj9AV7ZlEFqvB5BubG5iO6ANDsRKlhIxySXcF1axXYUyqwBok+XZPgIYGBgs7LDXfWfifxhw0Ik57T0Yug==} - cpu: [arm] - os: [linux] - dev: true - optional: true - - /@rollup/rollup-linux-arm64-gnu@4.28.1: - resolution: {integrity: sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==} - cpu: [arm64] - os: [linux] - dev: true - optional: true + rollup: 4.34.8 - /@rollup/rollup-linux-arm64-gnu@4.30.1: - resolution: {integrity: sha512-hqVyueGxAj3cBKrAI4aFHLV+h0Lv5VgWZs9CUGqr1z0fZtlADVV1YPOij6AhcK5An33EXaxnDLmJdQikcn5NEw==} - cpu: [arm64] - os: [linux] - dev: true - optional: true + '@rollup/plugin-node-resolve@15.3.1(rollup@4.34.8)': + dependencies: + '@rollup/pluginutils': 5.1.4(rollup@4.34.8) + '@types/resolve': 1.20.2 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.10 + optionalDependencies: + rollup: 4.34.8 - /@rollup/rollup-linux-arm64-musl@4.28.1: - resolution: {integrity: sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==} - cpu: [arm64] - os: [linux] - dev: true - optional: true + '@rollup/pluginutils@3.1.0(rollup@4.34.8)': + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 4.34.8 - /@rollup/rollup-linux-arm64-musl@4.30.1: - resolution: {integrity: sha512-i4Ab2vnvS1AE1PyOIGp2kXni69gU2DAUVt6FSXeIqUCPIR3ZlheMW3oP2JkukDfu3PsexYRbOiJrY+yVNSk9oA==} - cpu: [arm64] - os: [linux] - dev: true + '@rollup/pluginutils@5.1.4(rollup@4.34.8)': + dependencies: + '@types/estree': 1.0.6 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.34.8 + + '@rollup/rollup-android-arm-eabi@4.34.8': optional: true - /@rollup/rollup-linux-loongarch64-gnu@4.28.1: - resolution: {integrity: sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==} - cpu: [loong64] - os: [linux] - dev: true + '@rollup/rollup-android-arm64@4.34.8': optional: true - /@rollup/rollup-linux-loongarch64-gnu@4.30.1: - resolution: {integrity: sha512-fARcF5g296snX0oLGkVxPmysetwUk2zmHcca+e9ObOovBR++9ZPOhqFUM61UUZ2EYpXVPN1redgqVoBB34nTpQ==} - cpu: [loong64] - os: [linux] - dev: true + '@rollup/rollup-darwin-arm64@4.34.8': optional: true - /@rollup/rollup-linux-powerpc64le-gnu@4.28.1: - resolution: {integrity: sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==} - cpu: [ppc64] - os: [linux] - dev: true + '@rollup/rollup-darwin-x64@4.34.8': optional: true - /@rollup/rollup-linux-powerpc64le-gnu@4.30.1: - resolution: {integrity: sha512-GLrZraoO3wVT4uFXh67ElpwQY0DIygxdv0BNW9Hkm3X34wu+BkqrDrkcsIapAY+N2ATEbvak0XQ9gxZtCIA5Rw==} - cpu: [ppc64] - os: [linux] - dev: true + '@rollup/rollup-freebsd-arm64@4.34.8': optional: true - /@rollup/rollup-linux-riscv64-gnu@4.28.1: - resolution: {integrity: sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==} - cpu: [riscv64] - os: [linux] - dev: true + '@rollup/rollup-freebsd-x64@4.34.8': optional: true - /@rollup/rollup-linux-riscv64-gnu@4.30.1: - resolution: {integrity: sha512-0WKLaAUUHKBtll0wvOmh6yh3S0wSU9+yas923JIChfxOaaBarmb/lBKPF0w/+jTVozFnOXJeRGZ8NvOxvk/jcw==} - cpu: [riscv64] - os: [linux] - dev: true + '@rollup/rollup-linux-arm-gnueabihf@4.34.8': optional: true - /@rollup/rollup-linux-s390x-gnu@4.28.1: - resolution: {integrity: sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==} - cpu: [s390x] - os: [linux] - dev: true + '@rollup/rollup-linux-arm-musleabihf@4.34.8': optional: true - /@rollup/rollup-linux-s390x-gnu@4.30.1: - resolution: {integrity: sha512-GWFs97Ruxo5Bt+cvVTQkOJ6TIx0xJDD/bMAOXWJg8TCSTEK8RnFeOeiFTxKniTc4vMIaWvCplMAFBt9miGxgkA==} - cpu: [s390x] - os: [linux] - dev: true + '@rollup/rollup-linux-arm64-gnu@4.34.8': optional: true - /@rollup/rollup-linux-x64-gnu@4.28.1: - resolution: {integrity: sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==} - cpu: [x64] - os: [linux] - dev: true + '@rollup/rollup-linux-arm64-musl@4.34.8': optional: true - /@rollup/rollup-linux-x64-gnu@4.30.1: - resolution: {integrity: sha512-UtgGb7QGgXDIO+tqqJ5oZRGHsDLO8SlpE4MhqpY9Llpzi5rJMvrK6ZGhsRCST2abZdBqIBeXW6WPD5fGK5SDwg==} - cpu: [x64] - os: [linux] - dev: true + '@rollup/rollup-linux-loongarch64-gnu@4.34.8': optional: true - /@rollup/rollup-linux-x64-musl@4.28.1: - resolution: {integrity: sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==} - cpu: [x64] - os: [linux] - dev: true + '@rollup/rollup-linux-powerpc64le-gnu@4.34.8': optional: true - /@rollup/rollup-linux-x64-musl@4.30.1: - resolution: {integrity: sha512-V9U8Ey2UqmQsBT+xTOeMzPzwDzyXmnAoO4edZhL7INkwQcaW1Ckv3WJX3qrrp/VHaDkEWIBWhRwP47r8cdrOow==} - cpu: [x64] - os: [linux] - dev: true + '@rollup/rollup-linux-riscv64-gnu@4.34.8': optional: true - /@rollup/rollup-win32-arm64-msvc@4.28.1: - resolution: {integrity: sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==} - cpu: [arm64] - os: [win32] - dev: true + '@rollup/rollup-linux-s390x-gnu@4.34.8': optional: true - /@rollup/rollup-win32-arm64-msvc@4.30.1: - resolution: {integrity: sha512-WabtHWiPaFF47W3PkHnjbmWawnX/aE57K47ZDT1BXTS5GgrBUEpvOzq0FI0V/UYzQJgdb8XlhVNH8/fwV8xDjw==} - cpu: [arm64] - os: [win32] - dev: true + '@rollup/rollup-linux-x64-gnu@4.34.8': optional: true - /@rollup/rollup-win32-ia32-msvc@4.28.1: - resolution: {integrity: sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==} - cpu: [ia32] - os: [win32] - dev: true + '@rollup/rollup-linux-x64-musl@4.34.8': optional: true - /@rollup/rollup-win32-ia32-msvc@4.30.1: - resolution: {integrity: sha512-pxHAU+Zv39hLUTdQQHUVHf4P+0C47y/ZloorHpzs2SXMRqeAWmGghzAhfOlzFHHwjvgokdFAhC4V+6kC1lRRfw==} - cpu: [ia32] - os: [win32] - dev: true + '@rollup/rollup-win32-arm64-msvc@4.34.8': optional: true - /@rollup/rollup-win32-x64-msvc@4.28.1: - resolution: {integrity: sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==} - cpu: [x64] - os: [win32] - dev: true + '@rollup/rollup-win32-ia32-msvc@4.34.8': optional: true - /@rollup/rollup-win32-x64-msvc@4.30.1: - resolution: {integrity: sha512-D6qjsXGcvhTjv0kI4fU8tUuBDF/Ueee4SVX79VfNDXZa64TfCW1Slkb6Z7O1p7vflqZjcmOVdZlqf8gvJxc6og==} - cpu: [x64] - os: [win32] - dev: true + '@rollup/rollup-win32-x64-msvc@4.34.8': optional: true - /@rollup/wasm-node@4.30.0: - resolution: {integrity: sha512-fRkB9VoRK/rWFVMw3eaBz8x3I74xoX9HXM01yM4qmm7Uptzq/jM8TJZEJPBGqyMZtEhU6HORUAOPX38wmXJj1g==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true + '@rollup/wasm-node@4.35.0': dependencies: '@types/estree': 1.0.6 optionalDependencies: fsevents: 2.3.3 - dev: true - /@rtsao/scc@1.1.0: - resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - dev: true + '@rtsao/scc@1.1.0': {} - /@rushstack/node-core-library@5.10.1(@types/node@18.19.70): - resolution: {integrity: sha512-BSb/KcyBHmUQwINrgtzo6jiH0HlGFmrUy33vO6unmceuVKTEyL2q+P0fQq2oB5hvXVWOEUhxB2QvlkZluvUEmg==} - peerDependencies: - '@types/node': '*' - peerDependenciesMeta: - '@types/node': - optional: true + '@rushstack/node-core-library@5.11.0(@types/node@18.19.76)': dependencies: - '@types/node': 18.19.70 ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) ajv-formats: 3.0.1(ajv@8.13.0) - fs-extra: 7.0.1 + fs-extra: 11.3.0 import-lazy: 4.0.0 jju: 1.4.0 resolve: 1.22.10 semver: 7.5.4 - dev: true + optionalDependencies: + '@types/node': 18.19.76 - /@rushstack/rig-package@0.5.3: - resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==} + '@rushstack/rig-package@0.5.3': dependencies: resolve: 1.22.10 strip-json-comments: 3.1.1 - dev: true - /@rushstack/terminal@0.14.4(@types/node@18.19.70): - resolution: {integrity: sha512-NxACqERW0PHq8Rpq1V6v5iTHEwkRGxenjEW+VWqRYQ8T9puUzgmGHmEZUaUEDHAe9Qyvp0/Ew04sAiQw9XjhJg==} - peerDependencies: - '@types/node': '*' - peerDependenciesMeta: - '@types/node': - optional: true + '@rushstack/terminal@0.15.0(@types/node@18.19.76)': dependencies: - '@rushstack/node-core-library': 5.10.1(@types/node@18.19.70) - '@types/node': 18.19.70 + '@rushstack/node-core-library': 5.11.0(@types/node@18.19.76) supports-color: 8.1.1 - dev: true + optionalDependencies: + '@types/node': 18.19.76 - /@rushstack/ts-command-line@4.23.2(@types/node@18.19.70): - resolution: {integrity: sha512-JJ7XZX5K3ThBBva38aomgsPv1L7FV6XmSOcR6HtM7HDFZJkepqT65imw26h9ggGqMjsY0R9jcl30tzKcVj9aOQ==} + '@rushstack/ts-command-line@4.23.5(@types/node@18.19.76)': dependencies: - '@rushstack/terminal': 0.14.4(@types/node@18.19.70) + '@rushstack/terminal': 0.15.0(@types/node@18.19.76) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 transitivePeerDependencies: - '@types/node' - dev: true - /@sigstore/bundle@3.0.0: - resolution: {integrity: sha512-XDUYX56iMPAn/cdgh/DTJxz5RWmqKV4pwvUAEKEWJl+HzKdCd/24wUa9JYNMlDSCb7SUHAdtksxYX779Nne/Zg==} - engines: {node: ^18.17.0 || >=20.5.0} + '@sigstore/bundle@3.1.0': dependencies: - '@sigstore/protobuf-specs': 0.3.2 - dev: true + '@sigstore/protobuf-specs': 0.4.0 - /@sigstore/core@2.0.0: - resolution: {integrity: sha512-nYxaSb/MtlSI+JWcwTHQxyNmWeWrUXJJ/G4liLrGG7+tS4vAz6LF3xRXqLH6wPIVUoZQel2Fs4ddLx4NCpiIYg==} - engines: {node: ^18.17.0 || >=20.5.0} - dev: true + '@sigstore/core@2.0.0': {} - /@sigstore/protobuf-specs@0.3.2: - resolution: {integrity: sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==} - engines: {node: ^16.14.0 || >=18.0.0} - dev: true + '@sigstore/protobuf-specs@0.4.0': {} - /@sigstore/sign@3.0.0: - resolution: {integrity: sha512-UjhDMQOkyDoktpXoc5YPJpJK6IooF2gayAr5LvXI4EL7O0vd58okgfRcxuaH+YTdhvb5aa1Q9f+WJ0c2sVuYIw==} - engines: {node: ^18.17.0 || >=20.5.0} + '@sigstore/sign@3.1.0': dependencies: - '@sigstore/bundle': 3.0.0 + '@sigstore/bundle': 3.1.0 '@sigstore/core': 2.0.0 - '@sigstore/protobuf-specs': 0.3.2 + '@sigstore/protobuf-specs': 0.4.0 make-fetch-happen: 14.0.3 proc-log: 5.0.0 promise-retry: 2.0.1 transitivePeerDependencies: - supports-color - dev: true - /@sigstore/tuf@3.0.0: - resolution: {integrity: sha512-9Xxy/8U5OFJu7s+OsHzI96IX/OzjF/zj0BSSaWhgJgTqtlBhQIV2xdrQI5qxLD7+CWWDepadnXAxzaZ3u9cvRw==} - engines: {node: ^18.17.0 || >=20.5.0} + '@sigstore/tuf@3.1.0': dependencies: - '@sigstore/protobuf-specs': 0.3.2 + '@sigstore/protobuf-specs': 0.4.0 tuf-js: 3.0.1 transitivePeerDependencies: - supports-color - dev: true - /@sigstore/verify@2.0.0: - resolution: {integrity: sha512-Ggtq2GsJuxFNUvQzLoXqRwS4ceRfLAJnrIHUDrzAD0GgnOhwujJkKkxM/s5Bako07c3WtAs/sZo5PJq7VHjeDg==} - engines: {node: ^18.17.0 || >=20.5.0} + '@sigstore/verify@2.1.0': dependencies: - '@sigstore/bundle': 3.0.0 + '@sigstore/bundle': 3.1.0 '@sigstore/core': 2.0.0 - '@sigstore/protobuf-specs': 0.3.2 - dev: true + '@sigstore/protobuf-specs': 0.4.0 - /@sindresorhus/merge-streams@2.3.0: - resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} - engines: {node: '>=18'} - dev: true + '@sindresorhus/merge-streams@2.3.0': {} - /@socket.io/component-emitter@3.1.2: - resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} - dev: true + '@socket.io/component-emitter@3.1.2': {} - /@stylistic/eslint-plugin@2.12.1(eslint@8.57.0)(typescript@5.7.2): - resolution: {integrity: sha512-fubZKIHSPuo07FgRTn6S4Nl0uXPRPYVNpyZzIDGfp7Fny6JjNus6kReLD7NI380JXi4HtUTSOZ34LBuNPO1XLQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: '>=8.40.0' + '@stylistic/eslint-plugin@3.1.0(eslint@8.57.0)(typescript@5.8.1-rc)': dependencies: - '@typescript-eslint/utils': 8.19.1(eslint@8.57.0)(typescript@5.7.2) + '@typescript-eslint/utils': 8.26.0(eslint@8.57.0)(typescript@5.8.1-rc) eslint: 8.57.0 eslint-visitor-keys: 4.2.0 espree: 10.3.0 @@ -4255,322 +10468,207 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /@tootallnate/once@2.0.0: - resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} - engines: {node: '>= 10'} - dev: true + '@tootallnate/once@2.0.0': {} - /@tootallnate/quickjs-emscripten@0.23.0: - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - dev: true + '@tootallnate/quickjs-emscripten@0.23.0': {} - /@tsconfig/node10@1.0.11: - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - dev: true + '@tsconfig/node10@1.0.11': {} - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true + '@tsconfig/node12@1.0.11': {} - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true + '@tsconfig/node14@1.0.3': {} - /@tsconfig/node16@1.0.4: - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - dev: true + '@tsconfig/node16@1.0.4': {} - /@tufjs/canonical-json@2.0.0: - resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==} - engines: {node: ^16.14.0 || >=18.0.0} - dev: true + '@tufjs/canonical-json@2.0.0': {} - /@tufjs/models@3.0.1: - resolution: {integrity: sha512-UUYHISyhCU3ZgN8yaear3cGATHb3SMuKHsQ/nVbHXcmnBf+LzQ/cQfhNG+rfaSHgqGKNEm2cOCLVLELStUQ1JA==} - engines: {node: ^18.17.0 || >=20.5.0} + '@tufjs/models@3.0.1': dependencies: '@tufjs/canonical-json': 2.0.0 minimatch: 9.0.5 - dev: true - /@types/accepts@1.3.7: - resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} + '@types/accepts@1.3.7': dependencies: - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 - /@types/argparse@1.0.38: - resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} - dev: true + '@types/argparse@1.0.38': {} - /@types/babel__code-frame@7.0.6: - resolution: {integrity: sha512-Anitqkl3+KrzcW2k77lRlg/GfLZLWXBuNgbEcIOU6M92yw42vsd3xV/Z/yAHEj8m+KUjL6bWOVOFqX8PFPJ4LA==} - dev: true + '@types/babel__code-frame@7.0.6': {} - /@types/babel__core@7.20.5: - resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 - dev: true - /@types/babel__generator@7.6.8: - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.26.3 - dev: true + '@babel/types': 7.26.9 - /@types/babel__template@7.4.4: - resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.26.3 - '@babel/types': 7.26.3 - dev: true + '@babel/parser': 7.26.9 + '@babel/types': 7.26.9 - /@types/babel__traverse@7.20.6: - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.26.3 - dev: true + '@babel/types': 7.26.9 - /@types/big.js@6.2.2: - resolution: {integrity: sha512-e2cOW9YlVzFY2iScnGBBkplKsrn2CsObHQ2Hiw4V1sSyiGbgWL8IyqE3zFi1Pt5o1pdAtYkDAIsF3KKUPjdzaA==} - dev: true + '@types/big.js@6.2.2': {} - /@types/body-parser@1.19.5: - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 - /@types/bonjour@3.5.13: - resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} + '@types/bonjour@3.5.13': dependencies: - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 - /@types/browser-sync@2.29.0: - resolution: {integrity: sha512-d2V8FDX/LbDCSm343N2VChzDxvll0h76I8oSigYpdLgPDmcdcR6fywTggKBkUiDM3qAbHOq7NZvepj/HJM5e2g==} + '@types/browser-sync@2.29.0': dependencies: '@types/micromatch': 2.3.35 - '@types/node': 22.10.5 + '@types/node': 18.19.76 '@types/serve-static': 1.15.7 chokidar: 3.6.0 - dev: true - /@types/caseless@0.12.5: - resolution: {integrity: sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==} - dev: true + '@types/caseless@0.12.5': {} - /@types/co-body@6.1.3: - resolution: {integrity: sha512-UhuhrQ5hclX6UJctv5m4Rfp52AfG9o9+d9/HwjxhVB5NjXxr5t9oKgJxN8xRHgr35oo8meUEHUPFWiKg6y71aA==} + '@types/co-body@6.1.3': dependencies: - '@types/node': 22.10.5 - '@types/qs': 6.9.17 - dev: true + '@types/node': 18.19.76 + '@types/qs': 6.9.18 - /@types/command-line-args@5.2.3: - resolution: {integrity: sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==} - dev: true + '@types/command-line-args@5.2.3': {} - /@types/connect-history-api-fallback@1.5.4: - resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} + '@types/connect-history-api-fallback@1.5.4': dependencies: - '@types/express-serve-static-core': 5.0.3 - '@types/node': 22.10.5 - dev: true + '@types/express-serve-static-core': 5.0.6 + '@types/node': 18.19.76 - /@types/connect@3.4.38: - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + '@types/connect@3.4.38': dependencies: - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 - /@types/content-disposition@0.5.8: - resolution: {integrity: sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==} - dev: true - - /@types/convert-source-map@2.0.3: - resolution: {integrity: sha512-ag0BfJLZf6CQz8VIuRIEYQ5Ggwk/82uvTQf27RcpyDNbY0Vw49LIPqAxk5tqYfrCs9xDaIMvl4aj7ZopnYL8bA==} - dev: true + '@types/content-disposition@0.5.8': {} - /@types/cookie@0.4.1: - resolution: {integrity: sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==} - dev: true + '@types/convert-source-map@2.0.3': {} - /@types/cookies@0.9.0: - resolution: {integrity: sha512-40Zk8qR147RABiQ7NQnBzWzDcjKzNrntB5BAmeGCb2p/MIyOE+4BVvc17wumsUqUw00bJYqoXFHYygQnEFh4/Q==} + '@types/cookies@0.9.0': dependencies: '@types/connect': 3.4.38 '@types/express': 5.0.0 '@types/keygrip': 1.0.6 - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 - /@types/cors@2.8.17: - resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} + '@types/cors@2.8.17': dependencies: - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 - /@types/debounce@1.2.4: - resolution: {integrity: sha512-jBqiORIzKDOToaF63Fm//haOCHuwQuLa2202RK4MozpA6lh93eCBc+/8+wZn5OzjJt3ySdc+74SXWXB55Ewtyw==} - dev: true + '@types/debounce@1.2.4': {} - /@types/duplexify@3.6.4: - resolution: {integrity: sha512-2eahVPsd+dy3CL6FugAzJcxoraWhUghZGEQJns1kTKfCXWKJ5iG/VkaB05wRVrDKHfOFKqb0X0kXh91eE99RZg==} + '@types/duplexify@3.6.4': dependencies: - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 - /@types/eslint-scope@3.7.7: - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + '@types/eslint-scope@3.7.7': dependencies: '@types/eslint': 9.6.1 '@types/estree': 1.0.6 - dev: true - /@types/eslint@9.6.1: - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + '@types/eslint@9.6.1': dependencies: '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 - dev: true - /@types/estree@0.0.39: - resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} - dev: true + '@types/estree@0.0.39': {} - /@types/estree@1.0.6: - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - dev: true + '@types/estree@1.0.6': {} - /@types/express-serve-static-core@4.19.6: - resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} + '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 22.10.5 - '@types/qs': 6.9.17 + '@types/node': 18.19.76 + '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 - dev: true - /@types/express-serve-static-core@5.0.3: - resolution: {integrity: sha512-JEhMNwUJt7bw728CydvYzntD0XJeTmDnvwLlbfbAhE7Tbslm/ax6bdIiUwTgeVlZTsJQPwZwKpAkyDtIjsvx3g==} + '@types/express-serve-static-core@5.0.6': dependencies: - '@types/node': 22.10.5 - '@types/qs': 6.9.17 + '@types/node': 18.19.76 + '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 - dev: true - /@types/express@4.17.21: - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + '@types/express@4.17.21': dependencies: '@types/body-parser': 1.19.5 '@types/express-serve-static-core': 4.19.6 - '@types/qs': 6.9.17 + '@types/qs': 6.9.18 '@types/serve-static': 1.15.7 - dev: true - /@types/express@5.0.0: - resolution: {integrity: sha512-DvZriSMehGHL1ZNLzi6MidnsDhUZM/x2pRdDIKdwbUNqqwHxMlRdkxtn6/EPKyqKpHqTl/4nRZsRNLpZxZRpPQ==} + '@types/express@5.0.0': dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 5.0.3 - '@types/qs': 6.9.17 + '@types/express-serve-static-core': 5.0.6 + '@types/qs': 6.9.18 '@types/serve-static': 1.15.7 - dev: true - /@types/glob@7.2.0: - resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 - /@types/graceful-fs@4.1.9: - resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 - /@types/http-assert@1.5.6: - resolution: {integrity: sha512-TTEwmtjgVbYAzZYWyeHPrrtWnfVkm8tQkP8P21uQifPgMRgjrow3XDEYqucuC8SKZJT7pUnhU/JymvjggxO9vw==} - dev: true + '@types/http-assert@1.5.6': {} - /@types/http-errors@2.0.4: - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - dev: true + '@types/http-errors@2.0.4': {} - /@types/http-proxy@1.17.15: - resolution: {integrity: sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==} + '@types/http-proxy@1.17.16': dependencies: - '@types/node': 22.10.5 - dev: true - - /@types/ini@4.1.1: - resolution: {integrity: sha512-MIyNUZipBTbyUNnhvuXJTY7B6qNI78meck9Jbv3wk0OgNwRyOOVEKDutAkOs1snB/tx0FafyR6/SN4Ps0hZPeg==} - dev: true + '@types/node': 18.19.76 - /@types/is-windows@1.0.2: - resolution: {integrity: sha512-Qt86FJkakTwcZR+r08JSrOtw1g05EhZwSKRu9S5tu8pXulFRl06KS2fYAoxE32fc3gVXkpwlYIxUkjFIusvyFQ==} - dev: true + '@types/ini@4.1.1': {} - /@types/istanbul-lib-coverage@2.0.6: - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - dev: true + '@types/istanbul-lib-coverage@2.0.6': {} - /@types/istanbul-lib-report@3.0.3: - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + '@types/istanbul-lib-report@3.0.3': dependencies: '@types/istanbul-lib-coverage': 2.0.6 - dev: true - /@types/istanbul-reports@3.0.4: - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + '@types/istanbul-reports@3.0.4': dependencies: '@types/istanbul-lib-report': 3.0.3 - dev: true - /@types/jasmine@5.1.5: - resolution: {integrity: sha512-SaCZ3kM5NjOiJqMRYwHpLbTfUC2Dyk1KS3QanNFsUYPGTk70CWVK/J9ueun6zNhw/UkgV7xl8V4ZLQZNRbfnNw==} - dev: true + '@types/jasmine-reporters@2.5.3': + dependencies: + '@types/jasmine': 5.1.7 + + '@types/jasmine@5.1.7': {} - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true + '@types/json-schema@7.0.15': {} - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true + '@types/json5@0.0.29': {} - /@types/karma@6.3.9: - resolution: {integrity: sha512-sjE/MHnoAZAQYAKRXAbjTOiBKyGGErEM725bruRcmDdMa2vp1bjWPhApI7/i564PTyHlzc3vIGXLL6TFIpAxFg==} + '@types/karma@6.3.9': dependencies: - '@types/node': 22.10.5 + '@types/node': 18.19.76 log4js: 6.9.1 transitivePeerDependencies: - supports-color - dev: true - /@types/keygrip@1.0.6: - resolution: {integrity: sha512-lZuNAY9xeJt7Bx4t4dx0rYCDqGPW8RXhQZK1td7d4H6E9zYbLoOtjBvfwdTKpsyxQI/2jv+armjX/RW+ZNpXOQ==} - dev: true + '@types/keygrip@1.0.6': {} - /@types/koa-compose@3.2.8: - resolution: {integrity: sha512-4Olc63RY+MKvxMwVknCUDhRQX1pFQoBZ/lXcRLP69PQkEpze/0cr8LNqJQe5NFb/b19DWi2a5bTi2VAlQzhJuA==} + '@types/koa-compose@3.2.8': dependencies: '@types/koa': 2.15.0 - dev: true - /@types/koa@2.15.0: - resolution: {integrity: sha512-7QFsywoE5URbuVnG3loe03QXuGajrnotr3gQkXcEBShORai23MePfFYdhz90FEtBBpkyIYQbVD+evKtloCgX3g==} + '@types/koa@2.15.0': dependencies: '@types/accepts': 1.3.7 '@types/content-disposition': 0.5.8 @@ -4579,430 +10677,321 @@ packages: '@types/http-errors': 2.0.4 '@types/keygrip': 1.0.6 '@types/koa-compose': 3.2.8 - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 - /@types/less@3.0.7: - resolution: {integrity: sha512-+SD1DrM8EwJsilPFSR1IMMGWOTg5sO1waewoJ1k3BHCvU07zQThy8t2wTfxvHz//R0uK3koAUl9WbWwal0H+YA==} - dev: true + '@types/less@3.0.8': {} - /@types/loader-utils@2.0.6: - resolution: {integrity: sha512-cgu0Xefgq9O5FjFR78jgI6X31aPjDWCaJ6LCfRtlj6BtyVVWiXagysSYlPACwGKAzRwsFLjKXcj4iGfcVt6cLw==} + '@types/loader-utils@2.0.6': dependencies: - '@types/node': 22.10.5 + '@types/node': 18.19.76 '@types/webpack': 4.41.40 - dev: true - /@types/lodash@4.17.14: - resolution: {integrity: sha512-jsxagdikDiDBeIRaPYtArcT8my4tN1og7MtMRquFT3XNA6axxyHDRUemqDz/taRDdOUn0GnGHRCuff4q48sW9A==} - dev: true + '@types/lodash@4.17.16': {} - /@types/long@4.0.2: - resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} - dev: true + '@types/long@4.0.2': {} - /@types/micromatch@2.3.35: - resolution: {integrity: sha512-J749bHo/Zu56w0G0NI/IGHLQPiSsjx//0zJhfEVAN95K/xM5C8ZDmhkXtU3qns0sBOao7HuQzr8XV1/2o5LbXA==} + '@types/micromatch@2.3.35': dependencies: '@types/parse-glob': 3.0.32 - dev: true - /@types/mime@1.3.5: - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - dev: true + '@types/mime@1.3.5': {} - /@types/minimatch@5.1.2: - resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - dev: true + '@types/minimatch@5.1.2': {} - /@types/node-fetch@3.0.2: - resolution: {integrity: sha512-3q5FyT6iuekUxXeL2qjcyIhtMJdfMF7RGhYXWKkYpdcW9k36A/+txXrjG0l+NMVkiC30jKNrcOqVlqBl7BcCHA==} + '@types/node-fetch@3.0.2': dependencies: node-fetch: 3.3.2 - dev: true - /@types/node-forge@1.3.11: - resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + '@types/node-forge@1.3.11': dependencies: - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 - /@types/node@10.17.60: - resolution: {integrity: sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==} - dev: true + '@types/node@10.17.60': {} - /@types/node@18.19.70: - resolution: {integrity: sha512-RE+K0+KZoEpDUbGGctnGdkrLFwi1eYKTlIHNl2Um98mUkGsm1u2Ff6Ltd0e8DktTtC98uy7rSj+hO8t/QuLoVQ==} + '@types/node@18.19.76': dependencies: undici-types: 5.26.5 - dev: true - /@types/node@22.10.5: - resolution: {integrity: sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==} + '@types/node@22.13.10': dependencies: undici-types: 6.20.0 - dev: true - /@types/npm-package-arg@6.1.4: - resolution: {integrity: sha512-vDgdbMy2QXHnAruzlv68pUtXCjmqUk3WrBAsRboRovsOmxbfn/WiYCjmecyKjGztnMps5dWp4Uq2prp+Ilo17Q==} - dev: true + '@types/npm-package-arg@6.1.4': {} - /@types/npm-registry-fetch@8.0.7: - resolution: {integrity: sha512-db9iBh7kDDg4lRT4k4XZ6IiecTEgFCID4qk+VDVPbtzU855q3KZLCn08ATr4H27ntRJVhulQ7GWjl24H42x96w==} + '@types/npm-registry-fetch@8.0.7': dependencies: - '@types/node': 22.10.5 + '@types/node': 18.19.76 '@types/node-fetch': 3.0.2 '@types/npm-package-arg': 6.1.4 '@types/npmlog': 7.0.0 '@types/ssri': 7.1.5 - dev: true - /@types/npmlog@7.0.0: - resolution: {integrity: sha512-hJWbrKFvxKyWwSUXjZMYTINsSOY6IclhvGOZ97M8ac2tmR9hMwmTnYaMdpGhvju9ctWLTPhCS+eLfQNluiEjQQ==} + '@types/npmlog@7.0.0': dependencies: - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 - /@types/pacote@11.1.8: - resolution: {integrity: sha512-/XLR0VoTh2JEO0jJg1q/e6Rh9bxjBq9vorJuQmtT7rRrXSiWz7e7NsvXVYJQ0i8JxMlBMPPYDTnrRe7MZRFA8Q==} + '@types/pacote@11.1.8': dependencies: - '@types/node': 22.10.5 + '@types/node': 18.19.76 '@types/npm-registry-fetch': 8.0.7 '@types/npmlog': 7.0.0 '@types/ssri': 7.1.5 - dev: true - /@types/parse-glob@3.0.32: - resolution: {integrity: sha512-n4xmml2WKR12XeQprN8L/sfiVPa8FHS3k+fxp4kSr/PA2GsGUgFND+bvISJxM0y5QdvzNEGjEVU3eIrcKks/pA==} - dev: true + '@types/parse-glob@3.0.32': {} - /@types/parse5@6.0.3: - resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} - dev: true + '@types/parse5@6.0.3': {} - /@types/picomatch@3.0.1: - resolution: {integrity: sha512-1MRgzpzY0hOp9pW/kLRxeQhUWwil6gnrUYd3oEpeYBqp/FexhaCPv3F8LsYr47gtUU45fO2cm1dbwkSrHEo8Uw==} - dev: true + '@types/picomatch@3.0.2': {} - /@types/progress@2.0.7: - resolution: {integrity: sha512-iadjw02vte8qWx7U0YM++EybBha2CQLPGu9iJ97whVgJUT5Zq9MjAPYUnbfRI2Kpehimf1QjFJYxD0t8nqzu5w==} + '@types/progress@2.0.7': dependencies: - '@types/node': 22.10.5 - dev: true + '@types/node': 22.13.10 - /@types/pumpify@1.4.4: - resolution: {integrity: sha512-+cWbQUecD04MQYkjNBhPmcUIP368aloYmqm+ImdMKA8rMpxRNAhZAD6gIj+sAVTF1DliqrT/qUp6aGNi/9U3tw==} + '@types/pumpify@1.4.4': dependencies: '@types/duplexify': 3.6.4 - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 - /@types/q@0.0.32: - resolution: {integrity: sha512-qYi3YV9inU/REEfxwVcGZzbS3KG/Xs90lv0Pr+lDtuVjBPGd1A+eciXzVSaRvLify132BfcvhvEjeVahrUl0Ug==} - dev: true + '@types/q@0.0.32': {} - /@types/qs@6.9.17: - resolution: {integrity: sha512-rX4/bPcfmvxHDv0XjfJELTTr+iB+tn032nPILqHm5wbthUUUuVtNGGqzhya9XUxjTP8Fpr0qYgSZZKxGY++svQ==} - dev: true + '@types/qs@6.9.18': {} - /@types/range-parser@1.2.7: - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - dev: true + '@types/range-parser@1.2.7': {} - /@types/request@2.48.12: - resolution: {integrity: sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==} + '@types/request@2.48.12': dependencies: '@types/caseless': 0.12.5 - '@types/node': 22.10.5 + '@types/node': 18.19.76 '@types/tough-cookie': 4.0.5 - form-data: 2.5.2 - dev: true + form-data: 2.5.3 - /@types/resolve@1.17.1: - resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + '@types/resolve@1.17.1': dependencies: - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 - /@types/resolve@1.20.2: - resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - dev: true + '@types/resolve@1.20.2': {} - /@types/resolve@1.20.6: - resolution: {integrity: sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==} - dev: true + '@types/resolve@1.20.6': {} - /@types/retry@0.12.2: - resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} - dev: true + '@types/retry@0.12.2': {} - /@types/selenium-webdriver@3.0.26: - resolution: {integrity: sha512-dyIGFKXfUFiwkMfNGn1+F6b80ZjR3uSYv1j6xVJSDlft5waZ2cwkHW4e7zNzvq7hiEackcgvBpmnXZrI1GltPg==} - dev: true + '@types/selenium-webdriver@3.0.26': {} - /@types/selenium-webdriver@4.1.27: - resolution: {integrity: sha512-ALqsj8D7Swb6MnBQuAQ58J3KC3yh6fLGtAmpBmnZX8j+0kmP7NaLt56CuzBw2W2bXPrvHFTgn8iekOQFUKXEQA==} + '@types/selenium-webdriver@4.1.28': dependencies: - '@types/node': 22.10.5 - '@types/ws': 8.5.13 - dev: true + '@types/node': 18.19.76 + '@types/ws': 8.18.0 - /@types/semver@7.5.8: - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - dev: true + '@types/semver@7.5.8': {} - /@types/send@0.17.4: - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 - /@types/serve-index@1.9.4: - resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} + '@types/serve-index@1.9.4': dependencies: '@types/express': 5.0.0 - dev: true - /@types/serve-static@1.15.7: - resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.10.5 + '@types/node': 18.19.76 '@types/send': 0.17.4 - dev: true - /@types/shelljs@0.8.15: - resolution: {integrity: sha512-vzmnCHl6hViPu9GNLQJ+DZFd6BQI2DBTUeOvYHqkWQLMfKAAQYMb/xAmZkTogZI/vqXHCWkqDRymDI5p0QTi5Q==} + '@types/shelljs@0.8.15': dependencies: '@types/glob': 7.2.0 - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 - /@types/sockjs@0.3.36: - resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} + '@types/sockjs@0.3.36': dependencies: - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 - /@types/source-list-map@0.1.6: - resolution: {integrity: sha512-5JcVt1u5HDmlXkwOD2nslZVllBBc7HDuOICfiZah2Z0is8M8g+ddAEawbmd3VjedfDHBzxCaXLs07QEmb7y54g==} - dev: true + '@types/source-list-map@0.1.6': {} - /@types/ssri@7.1.5: - resolution: {integrity: sha512-odD/56S3B51liILSk5aXJlnYt99S6Rt9EFDDqGtJM26rKHApHcwyU/UoYHrzKkdkHMAIquGWCuHtQTbes+FRQw==} + '@types/ssri@7.1.5': dependencies: - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 - /@types/stack-trace@0.0.33: - resolution: {integrity: sha512-O7in6531Bbvlb2KEsJ0dq0CHZvc3iWSR5ZYMtvGgnHA56VgriAN/AU2LorfmcvAl2xc9N5fbCTRyMRRl8nd74g==} - dev: true + '@types/stack-trace@0.0.33': {} - /@types/supports-color@8.1.3: - resolution: {integrity: sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==} - dev: true + '@types/supports-color@10.0.0': + dependencies: + supports-color: 10.0.0 - /@types/tapable@1.0.12: - resolution: {integrity: sha512-bTHG8fcxEqv1M9+TD14P8ok8hjxoOCkfKc8XXLaaD05kI7ohpeI956jtDOD3XHKBQrlyPughUtzm1jtVhHpA5Q==} - dev: true + '@types/tapable@1.0.12': {} - /@types/tmp@0.2.6: - resolution: {integrity: sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==} - dev: true + '@types/tmp@0.2.6': {} - /@types/tough-cookie@4.0.5: - resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - dev: true + '@types/tough-cookie@4.0.5': {} - /@types/uglify-js@3.17.5: - resolution: {integrity: sha512-TU+fZFBTBcXj/GpDpDaBmgWk/gn96kMZ+uocaFUlV2f8a6WdMzzI44QBCmGcCiYR0Y6ZlNRiyUyKKt5nl/lbzQ==} + '@types/uglify-js@3.17.5': dependencies: source-map: 0.6.1 - dev: true - /@types/watchpack@2.4.4: - resolution: {integrity: sha512-SbuSavsPxfOPZwVHBgQUVuzYBe6+8KL7dwiJLXaj5rmv3DxktOMwX5WP1J6UontwUbewjVoc7pCgZvqy6rPn+A==} + '@types/watchpack@2.4.4': dependencies: '@types/graceful-fs': 4.1.9 - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 - /@types/webpack-sources@3.2.3: - resolution: {integrity: sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw==} + '@types/webpack-sources@3.2.3': dependencies: - '@types/node': 22.10.5 + '@types/node': 18.19.76 '@types/source-list-map': 0.1.6 source-map: 0.7.4 - dev: true - /@types/webpack@4.41.40: - resolution: {integrity: sha512-u6kMFSBM9HcoTpUXnL6mt2HSzftqb3JgYV6oxIgL2dl6sX6aCa5k6SOkzv5DuZjBTPUE/dJltKtwwuqrkZHpfw==} + '@types/webpack@4.41.40': dependencies: - '@types/node': 22.10.5 + '@types/node': 18.19.76 '@types/tapable': 1.0.12 '@types/uglify-js': 3.17.5 '@types/webpack-sources': 3.2.3 anymatch: 3.1.3 source-map: 0.6.1 - dev: true - /@types/ws@7.4.7: - resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + '@types/ws@7.4.7': dependencies: - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 - /@types/ws@8.5.13: - resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} + '@types/ws@8.18.0': dependencies: - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 - /@types/yargs-parser@21.0.3: - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - dev: true + '@types/ws@8.5.14': + dependencies: + '@types/node': 18.19.76 - /@types/yargs@17.0.33: - resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.33': dependencies: '@types/yargs-parser': 21.0.3 - dev: true - /@types/yarnpkg__lockfile@1.1.9: - resolution: {integrity: sha512-GD4Fk15UoP5NLCNor51YdfL9MSdldKCqOC9EssrRw3HVfar9wUZ5y8Lfnp+qVD6hIinLr8ygklDYnmlnlQo12Q==} - dev: true + '@types/yarnpkg__lockfile@1.1.9': {} - /@types/yauzl@2.10.3: - resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.10.5 - dev: true + '@types/node': 18.19.76 optional: true - /@typescript-eslint/eslint-plugin@8.19.1(@typescript-eslint/parser@8.19.1)(eslint@8.57.0)(typescript@5.7.2): - resolution: {integrity: sha512-tJzcVyvvb9h/PB96g30MpxACd9IrunT7GF9wfA9/0TJ1LxGOJx1TdPzSbBBnNED7K9Ka8ybJsnEpiXPktolTLg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 - eslint: ^8.57.0 || ^9.0.0 - typescript: 5.7.2 + '@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@8.57.0)(typescript@5.8.1-rc))(eslint@8.57.0)(typescript@5.8.1-rc)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.19.1(eslint@8.57.0)(typescript@5.7.2) - '@typescript-eslint/scope-manager': 8.19.1 - '@typescript-eslint/type-utils': 8.19.1(eslint@8.57.0)(typescript@5.7.2) - '@typescript-eslint/utils': 8.19.1(eslint@8.57.0)(typescript@5.7.2) - '@typescript-eslint/visitor-keys': 8.19.1 + '@typescript-eslint/parser': 8.24.1(eslint@8.57.0)(typescript@5.8.1-rc) + '@typescript-eslint/scope-manager': 8.24.1 + '@typescript-eslint/type-utils': 8.24.1(eslint@8.57.0)(typescript@5.8.1-rc) + '@typescript-eslint/utils': 8.24.1(eslint@8.57.0)(typescript@5.8.1-rc) + '@typescript-eslint/visitor-keys': 8.24.1 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 2.0.0(typescript@5.7.2) - typescript: 5.7.2 + ts-api-utils: 2.0.1(typescript@5.8.1-rc) + typescript: 5.8.1-rc transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@8.19.1(eslint@8.57.0)(typescript@5.7.2): - resolution: {integrity: sha512-67gbfv8rAwawjYx3fYArwldTQKoYfezNUT4D5ioWetr/xCrxXxvleo3uuiFuKfejipvq+og7mjz3b0G2bVyUCw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: 5.7.2 + '@typescript-eslint/parser@8.24.1(eslint@8.57.0)(typescript@5.8.1-rc)': dependencies: - '@typescript-eslint/scope-manager': 8.19.1 - '@typescript-eslint/types': 8.19.1 - '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.2) - '@typescript-eslint/visitor-keys': 8.19.1 + '@typescript-eslint/scope-manager': 8.24.1 + '@typescript-eslint/types': 8.24.1 + '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.8.1-rc) + '@typescript-eslint/visitor-keys': 8.24.1 debug: 4.4.0(supports-color@10.0.0) eslint: 8.57.0 - typescript: 5.7.2 + typescript: 5.8.1-rc transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/scope-manager@8.19.1: - resolution: {integrity: sha512-60L9KIuN/xgmsINzonOcMDSB8p82h95hoBfSBtXuO4jlR1R9L1xSkmVZKgCPVfavDlXihh4ARNjXhh1gGnLC7Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.24.1': dependencies: - '@typescript-eslint/types': 8.19.1 - '@typescript-eslint/visitor-keys': 8.19.1 - dev: true + '@typescript-eslint/types': 8.24.1 + '@typescript-eslint/visitor-keys': 8.24.1 - /@typescript-eslint/type-utils@8.19.1(eslint@8.57.0)(typescript@5.7.2): - resolution: {integrity: sha512-Rp7k9lhDKBMRJB/nM9Ksp1zs4796wVNyihG9/TU9R6KCJDNkQbc2EOKjrBtLYh3396ZdpXLtr/MkaSEmNMtykw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: 5.7.2 + '@typescript-eslint/scope-manager@8.26.0': + dependencies: + '@typescript-eslint/types': 8.26.0 + '@typescript-eslint/visitor-keys': 8.26.0 + + '@typescript-eslint/type-utils@8.24.1(eslint@8.57.0)(typescript@5.8.1-rc)': dependencies: - '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.2) - '@typescript-eslint/utils': 8.19.1(eslint@8.57.0)(typescript@5.7.2) + '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.8.1-rc) + '@typescript-eslint/utils': 8.24.1(eslint@8.57.0)(typescript@5.8.1-rc) debug: 4.4.0(supports-color@10.0.0) eslint: 8.57.0 - ts-api-utils: 2.0.0(typescript@5.7.2) - typescript: 5.7.2 + ts-api-utils: 2.0.1(typescript@5.8.1-rc) + typescript: 5.8.1-rc transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/types@8.19.1: - resolution: {integrity: sha512-JBVHMLj7B1K1v1051ZaMMgLW4Q/jre5qGK0Ew6UgXz1Rqh+/xPzV1aW581OM00X6iOfyr1be+QyW8LOUf19BbA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - dev: true + '@typescript-eslint/types@8.24.1': {} - /@typescript-eslint/typescript-estree@8.19.1(typescript@5.7.2): - resolution: {integrity: sha512-jk/TZwSMJlxlNnqhy0Eod1PNEvCkpY6MXOXE/WLlblZ6ibb32i2We4uByoKPv1d0OD2xebDv4hbs3fm11SMw8Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: 5.7.2 + '@typescript-eslint/types@8.26.0': {} + + '@typescript-eslint/typescript-estree@8.24.1(typescript@5.8.1-rc)': dependencies: - '@typescript-eslint/types': 8.19.1 - '@typescript-eslint/visitor-keys': 8.19.1 + '@typescript-eslint/types': 8.24.1 + '@typescript-eslint/visitor-keys': 8.24.1 debug: 4.4.0(supports-color@10.0.0) fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.6.3 - ts-api-utils: 2.0.0(typescript@5.7.2) - typescript: 5.7.2 + semver: 7.7.1 + ts-api-utils: 2.0.1(typescript@5.8.1-rc) + typescript: 5.8.1-rc transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/utils@8.19.1(eslint@8.57.0)(typescript@5.7.2): - resolution: {integrity: sha512-IxG5gLO0Ne+KaUc8iW1A+XuKLd63o4wlbI1Zp692n1xojCl/THvgIKXJXBZixTh5dd5+yTJ/VXH7GJaaw21qXA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: 5.7.2 + '@typescript-eslint/typescript-estree@8.26.0(typescript@5.8.1-rc)': + dependencies: + '@typescript-eslint/types': 8.26.0 + '@typescript-eslint/visitor-keys': 8.26.0 + debug: 4.4.0(supports-color@10.0.0) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 + ts-api-utils: 2.0.1(typescript@5.8.1-rc) + typescript: 5.8.1-rc + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.24.1(eslint@8.57.0)(typescript@5.8.1-rc)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.0) - '@typescript-eslint/scope-manager': 8.19.1 - '@typescript-eslint/types': 8.19.1 - '@typescript-eslint/typescript-estree': 8.19.1(typescript@5.7.2) + '@typescript-eslint/scope-manager': 8.24.1 + '@typescript-eslint/types': 8.24.1 + '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.8.1-rc) eslint: 8.57.0 - typescript: 5.7.2 + typescript: 5.8.1-rc transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/visitor-keys@8.19.1: - resolution: {integrity: sha512-fzmjU8CHK853V/avYZAvuVut3ZTfwN5YtMaoi+X9Y9MA9keaWNHC3zEQ9zvyX/7Hj+5JkNyK1l7TOR2hevHB6Q==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/utils@8.26.0(eslint@8.57.0)(typescript@5.8.1-rc)': + dependencies: + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.0) + '@typescript-eslint/scope-manager': 8.26.0 + '@typescript-eslint/types': 8.26.0 + '@typescript-eslint/typescript-estree': 8.26.0(typescript@5.8.1-rc) + eslint: 8.57.0 + typescript: 5.8.1-rc + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.24.1': dependencies: - '@typescript-eslint/types': 8.19.1 + '@typescript-eslint/types': 8.24.1 eslint-visitor-keys: 4.2.0 - dev: true - /@ungap/structured-clone@1.2.1: - resolution: {integrity: sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==} - dev: true + '@typescript-eslint/visitor-keys@8.26.0': + dependencies: + '@typescript-eslint/types': 8.26.0 + eslint-visitor-keys: 4.2.0 - /@verdaccio/auth@8.0.0-next-8.7: - resolution: {integrity: sha512-CSLBAsCJT1oOpJ4OWnVGmN6o/ZilDNa7Aa5+AU1LI2lbRblqgr4BVRn07GFqimJ//6+tPzl8BHgyiCbBhh1ZiA==} - engines: {node: '>=18'} + '@ungap/structured-clone@1.3.0': {} + + '@verdaccio/auth@8.0.0-next-8.7': dependencies: '@verdaccio/config': 8.0.0-next-8.7 '@verdaccio/core': 8.0.0-next-8.7 @@ -5014,19 +11003,13 @@ packages: verdaccio-htpasswd: 13.0.0-next-8.7 transitivePeerDependencies: - supports-color - dev: true - /@verdaccio/commons-api@10.2.0: - resolution: {integrity: sha512-F/YZANu4DmpcEV0jronzI7v2fGVWkQ5Mwi+bVmV+ACJ+EzR0c9Jbhtbe5QyLUuzR97t8R5E/Xe53O0cc2LukdQ==} - engines: {node: '>=8'} + '@verdaccio/commons-api@10.2.0': dependencies: http-errors: 2.0.0 http-status-codes: 2.2.0 - dev: true - /@verdaccio/config@8.0.0-next-8.7: - resolution: {integrity: sha512-pA0WCWvvWY6vPRav+X0EuFmuK6M08zIpRzTKkqSriCWk6JUCZ07TDnN054AS8TSSOy6EaWgHxnUw3nTd34Z4Sg==} - engines: {node: '>=18'} + '@verdaccio/config@8.0.0-next-8.7': dependencies: '@verdaccio/core': 8.0.0-next-8.7 '@verdaccio/utils': 8.1.0-next-8.7 @@ -5036,11 +11019,8 @@ packages: minimatch: 7.4.6 transitivePeerDependencies: - supports-color - dev: true - /@verdaccio/core@8.0.0-next-8.1: - resolution: {integrity: sha512-kQRCB2wgXEh8H88G51eQgAFK9IxmnBtkQ8sY5FbmB6PbBkyHrbGcCp+2mtRqqo36j0W1VAlfM3XzoknMy6qQnw==} - engines: {node: '>=14'} + '@verdaccio/core@8.0.0-next-8.1': dependencies: ajv: 8.17.1 core-js: 3.37.1 @@ -5048,11 +11028,8 @@ packages: http-status-codes: 2.3.0 process-warning: 1.0.0 semver: 7.6.3 - dev: true - /@verdaccio/core@8.0.0-next-8.7: - resolution: {integrity: sha512-pf8M2Z5EI/5Zdhdcm3aadb9Q9jiDsIredPD3+cIoDum8x3di2AIYvQD7i5BEramfzZlLXVICmFAulU7nUY11qg==} - engines: {node: '>=18'} + '@verdaccio/core@8.0.0-next-8.7': dependencies: ajv: 8.17.1 core-js: 3.37.1 @@ -5060,35 +11037,23 @@ packages: http-status-codes: 2.3.0 process-warning: 1.0.0 semver: 7.6.3 - dev: true - /@verdaccio/file-locking@10.3.1: - resolution: {integrity: sha512-oqYLfv3Yg3mAgw9qhASBpjD50osj2AX4IwbkUtyuhhKGyoFU9eZdrbeW6tpnqUnj6yBMtAPm2eGD4BwQuX400g==} - engines: {node: '>=12'} + '@verdaccio/file-locking@10.3.1': dependencies: lockfile: 1.0.4 - dev: true - /@verdaccio/file-locking@13.0.0-next-8.2: - resolution: {integrity: sha512-TcHgN3I/N28WBSvtukpGrJhBljl4jyIXq0vEv94vXAG6nUE3saK+vtgo8PfYA3Ueo88v/1zyAbiZM4uxwojCmQ==} - engines: {node: '>=18'} + '@verdaccio/file-locking@13.0.0-next-8.2': dependencies: lockfile: 1.0.4 - dev: true - /@verdaccio/loaders@8.0.0-next-8.4: - resolution: {integrity: sha512-Powlqb4SuMbe6RVgxyyOXaCjuHCcK7oZA+lygaKZDpV9NSHJtbkkV4L+rXyCfTX3b0tKsBh7FzaIdgWc1rDeGQ==} - engines: {node: '>=18'} + '@verdaccio/loaders@8.0.0-next-8.4': dependencies: debug: 4.3.7 lodash: 4.17.21 transitivePeerDependencies: - supports-color - dev: true - /@verdaccio/local-storage-legacy@11.0.2: - resolution: {integrity: sha512-7AXG7qlcVFmF+Nue2oKaraprGRtaBvrQIOvc/E89+7hAe399V01KnZI6E/ET56u7U9fq0MSlp92HBcdotlpUXg==} - engines: {node: '>=12'} + '@verdaccio/local-storage-legacy@11.0.2': dependencies: '@verdaccio/commons-api': 10.2.0 '@verdaccio/file-locking': 10.3.1 @@ -5100,11 +11065,8 @@ packages: mkdirp: 1.0.4 transitivePeerDependencies: - supports-color - dev: true - - /@verdaccio/logger-commons@8.0.0-next-8.7: - resolution: {integrity: sha512-sXNx57G1LVp81xF4qHer3AOcMEZ90W4FjxtYF0vmULcVg3ybdtStKAT/9ocZtVMvLWTPAauhqylfnXoRZYf32A==} - engines: {node: '>=18'} + + '@verdaccio/logger-commons@8.0.0-next-8.7': dependencies: '@verdaccio/core': 8.0.0-next-8.7 '@verdaccio/logger-prettify': 8.0.0-next-8.1 @@ -5112,32 +11074,23 @@ packages: debug: 4.4.0(supports-color@10.0.0) transitivePeerDependencies: - supports-color - dev: true - /@verdaccio/logger-prettify@8.0.0-next-8.1: - resolution: {integrity: sha512-vLhaGq0q7wtMCcqa0aQY6QOsMNarhTu/l4e6Z8mG/5LUH95GGLsBwpXLnKS94P3deIjsHhc9ycnEmG39txbQ1w==} - engines: {node: '>=18'} + '@verdaccio/logger-prettify@8.0.0-next-8.1': dependencies: colorette: 2.0.20 dayjs: 1.11.13 lodash: 4.17.21 pino-abstract-transport: 1.2.0 sonic-boom: 3.8.1 - dev: true - /@verdaccio/logger@8.0.0-next-8.7: - resolution: {integrity: sha512-5EMPdZhz2V08BP2rjhtN/Fz5KxCfPJBkYDitbk/eo+FCZ9nVdMCQE3WRbHEaXyJQcIso/LJ6RnL/zKN20E/rPg==} - engines: {node: '>=18'} + '@verdaccio/logger@8.0.0-next-8.7': dependencies: '@verdaccio/logger-commons': 8.0.0-next-8.7 pino: 9.5.0 transitivePeerDependencies: - supports-color - dev: true - /@verdaccio/middleware@8.0.0-next-8.7: - resolution: {integrity: sha512-Zad7KcdOsI1DUBt1TjQb08rIi/IFFaJKdPhj7M6oy5BX9l/4OM0TtbBueHFNS1+aU+t5eo8ue7ZHbqmjDY/6VQ==} - engines: {node: '>=18'} + '@verdaccio/middleware@8.0.0-next-8.7': dependencies: '@verdaccio/config': 8.0.0-next-8.7 '@verdaccio/core': 8.0.0-next-8.7 @@ -5151,31 +11104,19 @@ packages: mime: 2.6.0 transitivePeerDependencies: - supports-color - dev: true - /@verdaccio/search-indexer@8.0.0-next-8.2: - resolution: {integrity: sha512-sWliVN5BkAGbZ3e/GD0CsZMfPJdRMRuN0tEKQFsvEJifxToq5UkfCw6vKaVvhezsTWqb+Rp5y+2d4n5BDOA49w==} - engines: {node: '>=18'} - dev: true + '@verdaccio/search-indexer@8.0.0-next-8.2': {} - /@verdaccio/signature@8.0.0-next-8.1: - resolution: {integrity: sha512-lHD/Z2FoPQTtDYz6ZlXhj/lrg0SFirHrwCGt/cibl1GlePpx78WPdo03tgAyl0Qf+I35n484/gR1l9eixBQqYw==} - engines: {node: '>=18'} + '@verdaccio/signature@8.0.0-next-8.1': dependencies: debug: 4.3.7 jsonwebtoken: 9.0.2 transitivePeerDependencies: - supports-color - dev: true - /@verdaccio/streams@10.2.1: - resolution: {integrity: sha512-OojIG/f7UYKxC4dYX8x5ax8QhRx1b8OYUAMz82rUottCuzrssX/4nn5QE7Ank0DUSX3C9l/HPthc4d9uKRJqJQ==} - engines: {node: '>=12', npm: '>=5'} - dev: true + '@verdaccio/streams@10.2.1': {} - /@verdaccio/tarball@13.0.0-next-8.7: - resolution: {integrity: sha512-EWRuEOLgb3UETxUsYg6+Mml6DDRiwQqKIEsE4Ys6y6rcH2vgW6XMnTt+s/v5pFI+zlbi6fxjOgQB1e6IJAwxVA==} - engines: {node: '>=18'} + '@verdaccio/tarball@13.0.0-next-8.7': dependencies: '@verdaccio/core': 8.0.0-next-8.7 '@verdaccio/url': 13.0.0-next-8.7 @@ -5186,15 +11127,10 @@ packages: tar-stream: 3.1.7 transitivePeerDependencies: - supports-color - dev: true - /@verdaccio/ui-theme@8.0.0-next-8.7: - resolution: {integrity: sha512-+7f7XqqIU+TVCHjsP6lWzCdsD4sM7MEhn4cu3mLW1kJZ7eenWKEltoqixQnoXJzaBjCiz+yXW1WkjMyEFLNbpg==} - dev: true + '@verdaccio/ui-theme@8.0.0-next-8.7': {} - /@verdaccio/url@13.0.0-next-8.7: - resolution: {integrity: sha512-biFvwH3zIXYicA+SXNGvjMAe8oIQ5VddsfbO0ZXWlFs0lIz8cgI7QYPeSiCkU2VKpGzZ8pEKgqkxFsfFkU5kGA==} - engines: {node: '>=18'} + '@verdaccio/url@13.0.0-next-8.7': dependencies: '@verdaccio/core': 8.0.0-next-8.7 debug: 4.4.0(supports-color@10.0.0) @@ -5202,61 +11138,36 @@ packages: validator: 13.12.0 transitivePeerDependencies: - supports-color - dev: true - /@verdaccio/utils@7.0.1-next-8.1: - resolution: {integrity: sha512-cyJdRrVa+8CS7UuIQb3K3IJFjMe64v38tYiBnohSmhRbX7dX9IT3jWbjrwkqWh4KeS1CS6BYENrGG1evJ2ggrQ==} - engines: {node: '>=12'} + '@verdaccio/utils@7.0.1-next-8.1': dependencies: '@verdaccio/core': 8.0.0-next-8.1 lodash: 4.17.21 minimatch: 7.4.6 semver: 7.6.3 - dev: true - /@verdaccio/utils@8.1.0-next-8.7: - resolution: {integrity: sha512-4eqPCnPAJsL6gdVs0/oqZNgs2PnQW3HHBMgBHyEbb5A/ESI10TvRp+B7MRl9glUmy/aR5B6YSI68rgXvAFjdxA==} - engines: {node: '>=12'} + '@verdaccio/utils@8.1.0-next-8.7': dependencies: '@verdaccio/core': 8.0.0-next-8.7 lodash: 4.17.21 minimatch: 7.4.6 semver: 7.6.3 - dev: true - /@vitejs/plugin-basic-ssl@1.2.0(vite@6.0.3): - resolution: {integrity: sha512-mkQnxTkcldAzIsomk1UuLfAu9n+kpQ3JbHcpCp7d2Oo6ITtji8pHS3QToOWjhPFvNQSnhlkAjmGbhv2QvwO/7Q==} - engines: {node: '>=14.21.3'} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 + '@vitejs/plugin-basic-ssl@1.2.0(vite@6.2.3(@types/node@18.19.76)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))': dependencies: - vite: 6.0.3(@types/node@18.19.70)(less@4.2.1)(sass@1.83.0)(terser@5.37.0) - dev: true + vite: 6.2.3(@types/node@18.19.76)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) - /@vitejs/plugin-basic-ssl@1.2.0(vite@6.0.7): - resolution: {integrity: sha512-mkQnxTkcldAzIsomk1UuLfAu9n+kpQ3JbHcpCp7d2Oo6ITtji8pHS3QToOWjhPFvNQSnhlkAjmGbhv2QvwO/7Q==} - engines: {node: '>=14.21.3'} - peerDependencies: - vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 + '@vitejs/plugin-basic-ssl@1.2.0(vite@6.2.3(@types/node@22.13.10)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0))': dependencies: - vite: 6.0.7(@types/node@18.19.70)(less@4.2.1)(sass@1.83.1)(terser@5.37.0) - dev: true + vite: 6.2.3(@types/node@22.13.10)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0) - /@web/browser-logs@0.4.1: - resolution: {integrity: sha512-ypmMG+72ERm+LvP+loj9A64MTXvWMXHUOu773cPO4L1SV/VWg6xA9Pv7vkvkXQX+ItJtCJt+KQ+U6ui2HhSFUw==} - engines: {node: '>=18.0.0'} + '@web/browser-logs@0.4.1': dependencies: errorstacks: 2.4.1 - dev: true - /@web/config-loader@0.3.2: - resolution: {integrity: sha512-Vrjv/FexBGmAdnCYpJKLHX1dfT1UaUdvHmX1JRaWos9OvDf/tFznYJ5SpJwww3Rl87/ewvLSYG7kfsMqEAsizQ==} - engines: {node: '>=18.0.0'} - dev: true + '@web/config-loader@0.3.2': {} - /@web/dev-server-core@0.7.5: - resolution: {integrity: sha512-Da65zsiN6iZPMRuj4Oa6YPwvsmZmo5gtPWhW2lx3GTUf5CAEapjVpZVlUXnKPL7M7zRuk72jSsIl8lo+XpTCtw==} - engines: {node: '>=18.0.0'} + '@web/dev-server-core@0.7.5': dependencies: '@types/koa': 2.15.0 '@types/ws': 7.4.7 @@ -5267,7 +11178,7 @@ packages: get-stream: 6.0.1 is-stream: 2.0.1 isbinaryfile: 5.0.4 - koa: 2.15.3 + koa: 2.16.0 koa-etag: 4.0.0 koa-send: 5.0.1 koa-static: 5.0.0 @@ -5280,28 +11191,21 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true - /@web/dev-server-rollup@0.6.4: - resolution: {integrity: sha512-sJZfTGCCrdku5xYnQQG51odGI092hKY9YFM0X3Z0tRY3iXKXcYRaLZrErw5KfCxr6g0JRuhe4BBhqXTA5Q2I3Q==} - engines: {node: '>=18.0.0'} + '@web/dev-server-rollup@0.6.4': dependencies: - '@rollup/plugin-node-resolve': 15.3.1(rollup@4.30.1) + '@rollup/plugin-node-resolve': 15.3.1(rollup@4.34.8) '@web/dev-server-core': 0.7.5 nanocolors: 0.2.13 parse5: 6.0.1 - rollup: 4.30.1 - whatwg-url: 14.1.0 + rollup: 4.34.8 + whatwg-url: 14.1.1 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - dev: true - /@web/dev-server@0.4.6: - resolution: {integrity: sha512-jj/1bcElAy5EZet8m2CcUdzxT+CRvUjIXGh8Lt7vxtthkN9PzY9wlhWx/9WOs5iwlnG1oj0VGo6f/zvbPO0s9w==} - engines: {node: '>=18.0.0'} - hasBin: true + '@web/dev-server@0.4.6': dependencies: '@babel/code-frame': 7.26.2 '@types/command-line-args': 5.2.3 @@ -5316,39 +11220,31 @@ packages: internal-ip: 6.2.0 nanocolors: 0.2.13 open: 8.4.2 - portfinder: 1.0.32 + portfinder: 1.0.33 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - dev: true - /@web/parse5-utils@2.1.0: - resolution: {integrity: sha512-GzfK5disEJ6wEjoPwx8AVNwUe9gYIiwc+x//QYxYDAFKUp4Xb1OJAGLc2l2gVrSQmtPGLKrTRcW90Hv4pEq1qA==} - engines: {node: '>=18.0.0'} + '@web/parse5-utils@2.1.0': dependencies: '@types/parse5': 6.0.3 parse5: 6.0.1 - dev: true - /@web/test-runner-chrome@0.17.0: - resolution: {integrity: sha512-Il5N9z41NKWCrQM1TVgRaDWWYoJtG5Ha4fG+cN1MWL2OlzBS4WoOb4lFV3EylZ7+W3twZOFr1zy2Rx61yDYd/A==} - engines: {node: '>=18.0.0'} + '@web/test-runner-chrome@0.18.0': dependencies: '@web/test-runner-core': 0.13.4 '@web/test-runner-coverage-v8': 0.8.0 async-mutex: 0.4.0 chrome-launcher: 0.15.2 - puppeteer-core: 23.11.1 + puppeteer-core: 24.4.0 transitivePeerDependencies: + - bare-buffer - bufferutil - supports-color - utf-8-validate - dev: true - /@web/test-runner-commands@0.9.0: - resolution: {integrity: sha512-zeLI6QdH0jzzJMDV5O42Pd8WLJtYqovgdt0JdytgHc0d1EpzXDsc7NTCJSImboc2NcayIsWAvvGGeRF69SMMYg==} - engines: {node: '>=18.0.0'} + '@web/test-runner-commands@0.9.0': dependencies: '@web/test-runner-core': 0.13.4 mkdirp: 1.0.4 @@ -5356,11 +11252,8 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true - /@web/test-runner-core@0.13.4: - resolution: {integrity: sha512-84E1025aUSjvZU1j17eCTwV7m5Zg3cZHErV3+CaJM9JPCesZwLraIa0ONIQ9w4KLgcDgJFw9UnJ0LbFf42h6tg==} - engines: {node: '>=18.0.0'} + '@web/test-runner-core@0.13.4': dependencies: '@babel/code-frame': 7.26.2 '@types/babel__code-frame': 7.0.6 @@ -5384,7 +11277,7 @@ packages: istanbul-reports: 3.1.7 log-update: 4.0.0 nanocolors: 0.2.13 - nanoid: 3.3.8 + nanoid: 3.3.9 open: 8.4.2 picomatch: 2.3.1 source-map: 0.7.4 @@ -5392,11 +11285,8 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true - /@web/test-runner-coverage-v8@0.8.0: - resolution: {integrity: sha512-PskiucYpjUtgNfR2zF2AWqWwjXL7H3WW/SnCAYmzUrtob7X9o/+BjdyZ4wKbOxWWSbJO4lEdGIDLu+8X2Xw+lA==} - engines: {node: '>=18.0.0'} + '@web/test-runner-coverage-v8@0.8.0': dependencies: '@web/test-runner-core': 0.13.4 istanbul-lib-coverage: 3.2.2 @@ -5407,28 +11297,21 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true - /@web/test-runner-mocha@0.9.0: - resolution: {integrity: sha512-ZL9F6FXd0DBQvo/h/+mSfzFTSRVxzV9st/AHhpgABtUtV/AIpVE9to6+xdkpu6827kwjezdpuadPfg+PlrBWqQ==} - engines: {node: '>=18.0.0'} + '@web/test-runner-mocha@0.9.0': dependencies: '@web/test-runner-core': 0.13.4 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - dev: true - /@web/test-runner@0.19.0: - resolution: {integrity: sha512-qLUupi88OK1Kl52cWPD/2JewUCRUxYsZ1V1DyLd05P7u09zCdrUYrtkB/cViWyxlBe/TOvqkSNpcTv6zLJ9GoA==} - engines: {node: '>=18.0.0'} - hasBin: true + '@web/test-runner@0.20.0': dependencies: '@web/browser-logs': 0.4.1 '@web/config-loader': 0.3.2 '@web/dev-server': 0.4.6 - '@web/test-runner-chrome': 0.17.0 + '@web/test-runner-chrome': 0.18.0 '@web/test-runner-commands': 0.9.0 '@web/test-runner-core': 0.13.4 '@web/test-runner-mocha': 0.9.0 @@ -5439,72 +11322,51 @@ packages: diff: 5.2.0 globby: 11.1.0 nanocolors: 0.2.13 - portfinder: 1.0.32 + portfinder: 1.0.33 source-map: 0.7.4 transitivePeerDependencies: + - bare-buffer - bufferutil - supports-color - utf-8-validate - dev: true - /@webassemblyjs/ast@1.14.1: - resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - dev: true - /@webassemblyjs/floating-point-hex-parser@1.13.2: - resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} - dev: true + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} - /@webassemblyjs/helper-api-error@1.13.2: - resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} - dev: true + '@webassemblyjs/helper-api-error@1.13.2': {} - /@webassemblyjs/helper-buffer@1.14.1: - resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} - dev: true + '@webassemblyjs/helper-buffer@1.14.1': {} - /@webassemblyjs/helper-numbers@1.13.2: - resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + '@webassemblyjs/helper-numbers@1.13.2': dependencies: '@webassemblyjs/floating-point-hex-parser': 1.13.2 '@webassemblyjs/helper-api-error': 1.13.2 '@xtuc/long': 4.2.2 - dev: true - /@webassemblyjs/helper-wasm-bytecode@1.13.2: - resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} - dev: true + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} - /@webassemblyjs/helper-wasm-section@1.14.1: - resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + '@webassemblyjs/helper-wasm-section@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/helper-buffer': 1.14.1 '@webassemblyjs/helper-wasm-bytecode': 1.13.2 '@webassemblyjs/wasm-gen': 1.14.1 - dev: true - /@webassemblyjs/ieee754@1.13.2: - resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + '@webassemblyjs/ieee754@1.13.2': dependencies: '@xtuc/ieee754': 1.2.0 - dev: true - /@webassemblyjs/leb128@1.13.2: - resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + '@webassemblyjs/leb128@1.13.2': dependencies: '@xtuc/long': 4.2.2 - dev: true - /@webassemblyjs/utf8@1.13.2: - resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} - dev: true + '@webassemblyjs/utf8@1.13.2': {} - /@webassemblyjs/wasm-edit@1.14.1: - resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + '@webassemblyjs/wasm-edit@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/helper-buffer': 1.14.1 @@ -5514,29 +11376,23 @@ packages: '@webassemblyjs/wasm-opt': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 '@webassemblyjs/wast-printer': 1.14.1 - dev: true - /@webassemblyjs/wasm-gen@1.14.1: - resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + '@webassemblyjs/wasm-gen@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/helper-wasm-bytecode': 1.13.2 '@webassemblyjs/ieee754': 1.13.2 '@webassemblyjs/leb128': 1.13.2 '@webassemblyjs/utf8': 1.13.2 - dev: true - /@webassemblyjs/wasm-opt@1.14.1: - resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + '@webassemblyjs/wasm-opt@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/helper-buffer': 1.14.1 '@webassemblyjs/wasm-gen': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - dev: true - /@webassemblyjs/wasm-parser@1.14.1: - resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + '@webassemblyjs/wasm-parser@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/helper-api-error': 1.13.2 @@ -5544,622 +11400,349 @@ packages: '@webassemblyjs/ieee754': 1.13.2 '@webassemblyjs/leb128': 1.13.2 '@webassemblyjs/utf8': 1.13.2 - dev: true - /@webassemblyjs/wast-printer@1.14.1: - resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + '@webassemblyjs/wast-printer@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 - dev: true - /@xmldom/xmldom@0.8.10: - resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} - engines: {node: '>=10.0.0'} - dev: true + '@xmldom/xmldom@0.8.10': {} - /@xtuc/ieee754@1.2.0: - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - dev: true + '@xtuc/ieee754@1.2.0': {} - /@xtuc/long@4.2.2: - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - dev: true + '@xtuc/long@4.2.2': {} - /@yarnpkg/lockfile@1.1.0: - resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==} - dev: true + '@yarnpkg/lockfile@1.1.0': {} - /JSONStream@1.3.5: - resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} - hasBin: true + JSONStream@1.3.5: dependencies: jsonparse: 1.3.1 through: 2.3.8 - dev: true - /abbrev@2.0.0: - resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + abbrev@3.0.0: {} - /abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 - dev: true - /accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} + accepts@1.3.8: dependencies: mime-types: 2.1.35 negotiator: 0.6.3 - dev: true - /acorn-jsx@5.3.2(acorn@8.14.0): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-jsx@5.3.2(acorn@8.14.1): dependencies: - acorn: 8.14.0 - dev: true + acorn: 8.14.1 - /acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} + acorn-walk@8.3.4: dependencies: - acorn: 8.14.0 - dev: true + acorn: 8.14.1 - /acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@8.14.1: {} - /adjust-sourcemap-loader@4.0.0: - resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} - engines: {node: '>=8.9'} + adjust-sourcemap-loader@4.0.0: dependencies: loader-utils: 2.0.4 - regex-parser: 2.3.0 - dev: true + regex-parser: 2.3.1 - /adm-zip@0.5.16: - resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} - engines: {node: '>=12.0'} - dev: true + adm-zip@0.5.16: {} - /agent-base@4.3.0: - resolution: {integrity: sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==} - engines: {node: '>= 4.0.0'} + agent-base@4.3.0: dependencies: es6-promisify: 5.0.0 - dev: true - /agent-base@6.0.2(supports-color@10.0.0): - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} + agent-base@6.0.2(supports-color@10.0.0): dependencies: debug: 4.4.0(supports-color@10.0.0) transitivePeerDependencies: - supports-color - dev: true - /agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} - engines: {node: '>= 14'} - dev: true + agent-base@7.1.3: {} - /ajv-draft-04@1.0.0(ajv@8.13.0): - resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} - peerDependencies: - ajv: ^8.5.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: + ajv-draft-04@1.0.0(ajv@8.13.0): + optionalDependencies: ajv: 8.13.0 - dev: true - /ajv-formats@2.1.1(ajv@8.17.1): - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true + ajv-formats@2.1.1: dependencies: ajv: 8.17.1 - dev: true - /ajv-formats@3.0.1(ajv@8.13.0): - resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: + ajv-formats@3.0.1(ajv@8.13.0): + optionalDependencies: ajv: 8.13.0 - dev: true - /ajv-formats@3.0.1(ajv@8.17.1): - resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - dependencies: + ajv-formats@3.0.1(ajv@8.17.1): + optionalDependencies: ajv: 8.17.1 - dev: true - /ajv-keywords@3.5.2(ajv@6.12.6): - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - dependencies: - ajv: 6.12.6 - dev: true - - /ajv-keywords@5.1.0(ajv@8.17.1): - resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} - peerDependencies: - ajv: ^8.8.2 + ajv-keywords@5.1.0(ajv@8.17.1): dependencies: ajv: 8.17.1 fast-deep-equal: 3.1.3 - dev: true - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 - dev: true - /ajv@8.12.0: - resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + ajv@8.12.0: dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 uri-js: 4.4.1 - dev: true - /ajv@8.13.0: - resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + ajv@8.13.0: dependencies: fast-deep-equal: 3.1.3 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 uri-js: 4.4.1 - dev: true - /ajv@8.17.1: - resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.5 + fast-uri: 3.0.6 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - dev: true - /ansi-colors@4.1.3: - resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} - engines: {node: '>=6'} - dev: true + ansi-colors@4.1.3: {} - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 - dev: true - /ansi-escapes@7.0.0: - resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} - engines: {node: '>=18'} + ansi-escapes@7.0.0: dependencies: environment: 1.1.0 - dev: true - /ansi-html-community@0.0.8: - resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} - engines: {'0': node >= 0.8.0} - hasBin: true - dev: true + ansi-html-community@0.0.8: {} - /ansi-regex@2.1.1: - resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} - engines: {node: '>=0.10.0'} - dev: true + ansi-regex@2.1.1: {} - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true + ansi-regex@5.0.1: {} - /ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} - engines: {node: '>=12'} - dev: true + ansi-regex@6.1.0: {} - /ansi-styles@2.2.1: - resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} - engines: {node: '>=0.10.0'} - dev: true + ansi-styles@2.2.1: {} - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - dev: true - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - dev: true + ansi-styles@6.2.1: {} - /anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - dev: true - /apache-md5@1.1.8: - resolution: {integrity: sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA==} - engines: {node: '>=8'} - dev: true + apache-md5@1.1.8: {} - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true + arg@4.1.3: {} - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 - dev: true - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true + argparse@2.0.1: {} - /array-back@3.1.0: - resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==} - engines: {node: '>=6'} - dev: true + array-back@3.1.0: {} - /array-back@6.2.2: - resolution: {integrity: sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==} - engines: {node: '>=12.17'} - dev: true + array-back@6.2.2: {} - /array-buffer-byte-length@1.0.2: - resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} - engines: {node: '>= 0.4'} + array-buffer-byte-length@1.0.2: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 is-array-buffer: 3.0.5 - dev: true - /array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - dev: true + array-flatten@1.1.1: {} - /array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} + array-includes@3.1.8: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.9 - es-object-atoms: 1.0.0 - get-intrinsic: 1.2.7 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 is-string: 1.1.1 - dev: true - /array-union@1.0.2: - resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} - engines: {node: '>=0.10.0'} + array-union@1.0.2: dependencies: array-uniq: 1.0.3 - dev: true - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true + array-union@2.1.0: {} - /array-uniq@1.0.3: - resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} - engines: {node: '>=0.10.0'} - dev: true + array-uniq@1.0.3: {} - /array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - engines: {node: '>= 0.4'} + array.prototype.findlastindex@1.2.5: dependencies: 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 - es-shim-unscopables: 1.0.2 - dev: true + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 - /array.prototype.flat@1.3.3: - resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} - engines: {node: '>= 0.4'} + array.prototype.flat@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.9 - es-shim-unscopables: 1.0.2 - dev: true + es-shim-unscopables: 1.1.0 - /array.prototype.flatmap@1.3.3: - resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} - engines: {node: '>= 0.4'} + array.prototype.flatmap@1.3.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.9 - es-shim-unscopables: 1.0.2 - dev: true + es-shim-unscopables: 1.1.0 - /arraybuffer.prototype.slice@1.0.4: - resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} - engines: {node: '>= 0.4'} + arraybuffer.prototype.slice@1.0.4: dependencies: array-buffer-byte-length: 1.0.2 call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 - dev: true - /arrify@1.0.1: - resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} - engines: {node: '>=0.10.0'} - dev: true + arrify@1.0.1: {} - /arrify@2.0.1: - resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} - engines: {node: '>=8'} - dev: true + arrify@2.0.1: {} - /asn1@0.2.6: - resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + asn1@0.2.6: dependencies: safer-buffer: 2.1.2 - dev: true - /assert-plus@1.0.0: - resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} - engines: {node: '>=0.8'} - dev: true + assert-plus@1.0.0: {} - /ast-types@0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} + ast-types@0.13.4: dependencies: tslib: 2.8.1 - dev: true - /astral-regex@2.0.0: - resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} - engines: {node: '>=8'} - dev: true + astral-regex@2.0.0: {} - /async-each-series@0.1.1: - resolution: {integrity: sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==} - engines: {node: '>=0.8.0'} - dev: true + async-each-series@0.1.1: {} - /async-mutex@0.4.0: - resolution: {integrity: sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==} + async-function@1.0.0: {} + + async-mutex@0.4.0: dependencies: tslib: 2.8.1 - dev: true - /async@2.6.4: - resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + async@2.6.4: dependencies: lodash: 4.17.21 - dev: true - - /async@3.2.4: - resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} - dev: true - /async@3.2.6: - resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} - dev: true + async@3.2.4: {} - /asynckit@0.4.0: - resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: true + async@3.2.6: {} - /at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - dev: true + asynckit@0.4.0: {} - /atob@2.1.2: - resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} - engines: {node: '>= 4.5.0'} - hasBin: true - dev: true + atob@2.1.2: {} - /atomic-sleep@1.0.0: - resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} - engines: {node: '>=8.0.0'} - dev: true + atomic-sleep@1.0.0: {} - /autoprefixer@10.4.20(postcss@8.4.49): - resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 + autoprefixer@10.4.20(postcss@8.5.2): dependencies: - browserslist: 4.24.3 - caniuse-lite: 1.0.30001690 + browserslist: 4.24.4 + caniuse-lite: 1.0.30001703 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.4.49 + postcss: 8.5.2 postcss-value-parser: 4.2.0 - dev: true - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} + available-typed-arrays@1.0.7: dependencies: - possible-typed-array-names: 1.0.0 - dev: true + possible-typed-array-names: 1.1.0 - /aws-sign2@0.7.0: - resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} - dev: true + aws-sign2@0.7.0: {} - /aws4@1.13.2: - resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} - dev: true + aws4@1.13.2: {} - /b4a@1.6.7: - resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} - dev: true + b4a@1.6.7: {} - /babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.97.1): - resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==} - engines: {node: '>= 14.15.0'} - peerDependencies: - '@babel/core': ^7.12.0 - webpack: '>=5' + babel-loader@9.2.1(@babel/core@7.26.10)(webpack@5.98.0(esbuild@0.25.1)): dependencies: - '@babel/core': 7.26.0 + '@babel/core': 7.26.10 find-cache-dir: 4.0.0 schema-utils: 4.3.0 - webpack: 5.97.1(esbuild@0.24.2) - dev: true + webpack: 5.98.0(esbuild@0.25.1) - /babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.0): - resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.10): dependencies: - '@babel/compat-data': 7.26.3 - '@babel/core': 7.26.0 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + '@babel/compat-data': 7.26.8 + '@babel/core': 7.26.10 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.10) semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.0): - resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.26.10): dependencies: - '@babel/core': 7.26.0 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) - core-js-compat: 3.39.0 + '@babel/core': 7.26.10 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.10) + core-js-compat: 3.41.0 transitivePeerDependencies: - supports-color - dev: true - /babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.0): - resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.10): dependencies: - '@babel/core': 7.26.0 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + '@babel/core': 7.26.10 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.10) transitivePeerDependencies: - supports-color - dev: true - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + balanced-match@1.0.2: {} - /bare-events@2.5.2: - resolution: {integrity: sha512-KSdMqLj1ZERZMP1PTmnLK7SqJu9z9/SbwUUPZly2puMtfVcytC+jl6mb/9XYiqq0PXcx1rNDS+Qvl1g54Lho6A==} - dev: true + bare-events@2.5.4: optional: true - /bare-fs@2.3.5: - resolution: {integrity: sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==} + bare-fs@4.0.1: dependencies: - bare-events: 2.5.2 - bare-path: 2.1.3 - bare-stream: 2.6.1 - dev: true + bare-events: 2.5.4 + bare-path: 3.0.0 + bare-stream: 2.6.5(bare-events@2.5.4) + transitivePeerDependencies: + - bare-buffer optional: true - /bare-os@2.4.4: - resolution: {integrity: sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==} - dev: true + bare-os@3.5.1: optional: true - /bare-path@2.1.3: - resolution: {integrity: sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==} + bare-path@3.0.0: dependencies: - bare-os: 2.4.4 - dev: true + bare-os: 3.5.1 optional: true - /bare-stream@2.6.1: - resolution: {integrity: sha512-eVZbtKM+4uehzrsj49KtCy3Pbg7kO1pJ3SKZ1SFrIH/0pnj9scuGGgUlNDf/7qS8WKtGdiJY5Kyhs/ivYPTB/g==} + bare-stream@2.6.5(bare-events@2.5.4): dependencies: - streamx: 2.21.1 - dev: true + streamx: 2.22.0 + optionalDependencies: + bare-events: 2.5.4 optional: true - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true + base64-js@1.5.1: {} - /base64id@2.0.0: - resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} - engines: {node: ^4.5.0 || >= 5.9} - dev: true + base64id@2.0.0: {} - /basic-ftp@5.0.5: - resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} - engines: {node: '>=10.0.0'} - dev: true + basic-ftp@5.0.5: {} - /batch@0.6.1: - resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} - dev: true + batch@0.6.1: {} - /bcrypt-pbkdf@1.0.2: - resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + bcrypt-pbkdf@1.0.2: dependencies: tweetnacl: 0.14.5 - dev: true - /bcryptjs@2.4.3: - resolution: {integrity: sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==} - dev: true + bcryptjs@2.4.3: {} - /beasties@0.2.0: - resolution: {integrity: sha512-Ljqskqx/tbZagIglYoJIMzH5zgssyp+in9+9sAyh15N22AornBeIDnb8EZ6Rk+6ShfMxd92uO3gfpT0NtZbpow==} - engines: {node: '>=14.0.0'} + beasties@0.2.0: dependencies: css-select: 5.1.0 css-what: 6.1.0 @@ -6167,50 +11750,30 @@ packages: domhandler: 5.0.3 htmlparser2: 9.1.0 picocolors: 1.1.1 - postcss: 8.4.49 + postcss: 8.5.3 postcss-media-query-parser: 0.2.3 - dev: true - /before-after-hook@3.0.2: - resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} - dev: true + before-after-hook@3.0.2: {} - /big.js@5.2.2: - resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} - dev: true + big.js@5.2.2: {} - /big.js@6.2.2: - resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} - dev: true + big.js@6.2.2: {} - /bignumber.js@9.1.2: - resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} - dev: true + bignumber.js@9.1.2: {} - /binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - dev: true + binary-extensions@2.3.0: {} - /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bl@4.1.0: dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 - dev: true - /blocking-proxy@1.0.1: - resolution: {integrity: sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA==} - engines: {node: '>=6.9.x'} - hasBin: true + blocking-proxy@1.0.1: dependencies: minimist: 1.2.8 - dev: true - /body-parser@1.20.3: - resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + body-parser@1.20.3: dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -6226,54 +11789,36 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /bonjour-service@1.3.0: - resolution: {integrity: sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==} + bonjour-service@1.3.0: dependencies: fast-deep-equal: 3.1.3 multicast-dns: 7.2.5 - dev: true - /boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - dev: true + boolbase@1.0.0: {} - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 - dev: true - /braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + braces@3.0.3: dependencies: fill-range: 7.1.1 - dev: true - /browser-or-node@3.0.0: - resolution: {integrity: sha512-iczIdVJzGEYhP5DqQxYM9Hh7Ztpqqi+CXZpSmX8ALFs9ecXkQIeqRyM6TfxEfMVpwhl3dSuDvxdzzo9sUOIVBQ==} - dev: true + browser-or-node@3.0.0: {} - /browser-sync-client@3.0.3: - resolution: {integrity: sha512-TOEXaMgYNjBYIcmX5zDlOdjEqCeCN/d7opf/fuyUD/hhGVCfP54iQIDhENCi012AqzYZm3BvuFl57vbwSTwkSQ==} - engines: {node: '>=8.0.0'} + browser-sync-client@3.0.3: dependencies: etag: 1.8.1 fresh: 0.5.2 mitt: 1.2.0 - dev: true - /browser-sync-ui@3.0.3: - resolution: {integrity: sha512-FcGWo5lP5VodPY6O/f4pXQy5FFh4JK0f2/fTBsp0Lx1NtyBWs/IfPPJbW8m1ujTW/2r07oUXKTF2LYZlCZktjw==} + browser-sync-ui@3.0.3: dependencies: async-each-series: 0.1.1 chalk: 4.1.2 @@ -6286,12 +11831,8 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true - /browser-sync@3.0.3(debug@4.4.0): - resolution: {integrity: sha512-91hoBHKk1C4pGeD+oE9Ld222k2GNQEAsI5AElqR8iLLWNrmZR2LPP8B0h8dpld9u7kro5IEUB3pUb0DJ3n1cRQ==} - engines: {node: '>= 8.0.0'} - hasBin: true + browser-sync@3.0.3(debug@4.4.0): dependencies: browser-sync-client: 3.0.3 browser-sync-ui: 3.0.3 @@ -6326,103 +11867,51 @@ packages: - debug - supports-color - utf-8-validate - dev: true - /browserify-zlib@0.1.4: - resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==} + browserify-zlib@0.1.4: dependencies: pako: 0.2.9 - dev: true - /browserslist@4.24.3: - resolution: {integrity: sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + browserslist@4.24.4: dependencies: - caniuse-lite: 1.0.30001690 - electron-to-chromium: 1.5.77 + caniuse-lite: 1.0.30001703 + electron-to-chromium: 1.5.114 node-releases: 2.0.19 - update-browserslist-db: 1.1.1(browserslist@4.24.3) - dev: true + update-browserslist-db: 1.1.3(browserslist@4.24.4) - /browserstack@1.6.1: - resolution: {integrity: sha512-GxtFjpIaKdbAyzHfFDKixKO8IBT7wR3NjbzrGc78nNs/Ciys9wU3/nBtsqsWv5nDSrdI5tz0peKuzCPuNXNUiw==} + browserstack@1.6.1: dependencies: https-proxy-agent: 2.2.4 transitivePeerDependencies: - supports-color - dev: true - /bs-recipes@1.3.4: - resolution: {integrity: sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==} - dev: true + bs-recipes@1.3.4: {} - /buffer-crc32@0.2.13: - resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} - dev: true + buffer-crc32@0.2.13: {} - /buffer-equal-constant-time@1.0.1: - resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} - dev: true + buffer-equal-constant-time@1.0.1: {} - /buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - dev: true + buffer-from@1.1.2: {} - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@5.7.1: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true - /buffer@6.0.3: - resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + buffer@6.0.3: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true - /builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - dev: true + builtin-modules@3.3.0: {} - /bundle-name@4.1.0: - resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} - engines: {node: '>=18'} + bundle-name@4.1.0: dependencies: run-applescript: 7.0.0 - dev: true - - /bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - dev: true - /c8@7.5.0: - resolution: {integrity: sha512-GSkLsbvDr+FIwjNSJ8OwzWAyuznEYGTAd1pzb/Kr0FMLuV4vqYJTyjboDTwmlUNAG6jAU3PFWzqIdKrOt1D8tw==} - engines: {node: '>=10.12.0'} - hasBin: true - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@istanbuljs/schema': 0.1.3 - find-up: 5.0.0 - foreground-child: 2.0.0 - furi: 2.0.0 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-report: 3.0.1 - istanbul-reports: 3.1.7 - rimraf: 3.0.2 - test-exclude: 6.0.0 - v8-to-istanbul: 7.1.2 - yargs: 16.2.0 - yargs-parser: 20.2.9 - dev: true + bytes@3.1.2: {} - /cacache@19.0.1: - resolution: {integrity: sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==} - engines: {node: ^18.17.0 || >=20.5.0} + cacache@19.0.1: dependencies: '@npmcli/fs': 4.0.0 fs-minipass: 3.0.3 @@ -6436,113 +11925,69 @@ packages: ssri: 12.0.0 tar: 7.4.3 unique-filename: 4.0.0 - dev: true - /cache-content-type@1.0.1: - resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} - engines: {node: '>= 6.0.0'} + cache-content-type@1.0.1: dependencies: mime-types: 2.1.35 ylru: 1.4.0 - dev: true - /call-bind-apply-helpers@1.0.1: - resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==} - engines: {node: '>= 0.4'} + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 - dev: true - /call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} + call-bind@1.0.8: dependencies: - call-bind-apply-helpers: 1.0.1 + call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 set-function-length: 1.2.2 - dev: true - /call-bound@1.0.3: - resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} - engines: {node: '>= 0.4'} + call-bound@1.0.4: dependencies: - call-bind-apply-helpers: 1.0.1 - get-intrinsic: 1.2.7 - dev: true + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true + callsites@3.1.0: {} - /camelcase@5.3.1: - resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} - engines: {node: '>=6'} - dev: true + camelcase@5.3.1: {} - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - dev: true + camelcase@6.3.0: {} - /caniuse-lite@1.0.30001690: - resolution: {integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==} - dev: true + caniuse-lite@1.0.30001703: {} - /caseless@0.12.0: - resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} - dev: true + caseless@0.12.0: {} - /chalk-template@0.4.0: - resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==} - engines: {node: '>=12'} + chalk-template@0.4.0: dependencies: chalk: 4.1.2 - dev: true - /chalk@1.1.3: - resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} - engines: {node: '>=0.10.0'} + chalk@1.1.3: dependencies: ansi-styles: 2.2.1 escape-string-regexp: 1.0.5 has-ansi: 2.0.0 strip-ansi: 3.0.1 supports-color: 2.0.0 - dev: true - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - /chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - dev: true + chalk@5.4.1: {} - /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true + chardet@0.7.0: {} - /checkpoint-stream@0.1.2: - resolution: {integrity: sha512-eYXIcydL3mPjjEVLxHdi1ISgTwmxGJZ8vyJ3lYVvFTDRyTOZMTbKZdRJqiA7Gi1rPcwOyyzcrZmGLL8ff7e69w==} + checkpoint-stream@0.1.2: dependencies: '@types/pumpify': 1.4.4 events-intercept: 2.0.0 pumpify: 1.5.1 split-array-stream: 1.0.3 through2: 2.0.5 - dev: true - /chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} + chokidar@3.6.0: dependencies: anymatch: 3.1.3 braces: 3.0.3 @@ -6553,240 +11998,136 @@ packages: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 - dev: true - /chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} + chokidar@4.0.3: dependencies: - readdirp: 4.0.2 - dev: true + readdirp: 4.1.2 - /chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - dev: true + chownr@1.1.4: {} - /chownr@2.0.0: - resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} - engines: {node: '>=10'} - dev: true + chownr@2.0.0: {} - /chownr@3.0.0: - resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} - engines: {node: '>=18'} - dev: true + chownr@3.0.0: {} - /chrome-launcher@0.15.2: - resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} - engines: {node: '>=12.13.0'} - hasBin: true + chrome-launcher@0.15.2: dependencies: - '@types/node': 22.10.5 + '@types/node': 18.19.76 escape-string-regexp: 4.0.0 is-wsl: 2.2.0 lighthouse-logger: 1.4.2 transitivePeerDependencies: - supports-color - dev: true - /chrome-trace-event@1.0.4: - resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} - engines: {node: '>=6.0'} - dev: true + chrome-trace-event@1.0.4: {} - /chromium-bidi@0.11.0(devtools-protocol@0.0.1367902): - resolution: {integrity: sha512-6CJWHkNRoyZyjV9Rwv2lYONZf1Xm0IuDyNq97nwSsxxP3wf5Bwy15K5rOvVKMtJ127jJBmxFUanSAOjgFRxgrA==} - peerDependencies: - devtools-protocol: '*' + chromium-bidi@2.1.2(devtools-protocol@0.0.1413902): dependencies: - devtools-protocol: 0.0.1367902 + devtools-protocol: 0.0.1413902 mitt: 3.0.1 - zod: 3.23.8 - dev: true - - /ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - dev: true + zod: 3.24.2 - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} + cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 - dev: true - /cli-cursor@5.0.0: - resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} - engines: {node: '>=18'} + cli-cursor@5.0.0: dependencies: restore-cursor: 5.1.0 - dev: true - /cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - dev: true + cli-spinners@2.9.2: {} - /cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} + cli-truncate@4.0.0: dependencies: slice-ansi: 5.0.0 string-width: 7.2.0 - dev: true - /cli-width@4.1.0: - resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} - engines: {node: '>= 12'} - dev: true + cli-width@4.1.0: {} - /clipanion@4.0.0-rc.4(typanion@3.14.0): - resolution: {integrity: sha512-CXkMQxU6s9GklO/1f714dkKBMu1lopS1WFF0B8o4AxPykR1hpozxSiUZ5ZUeBjfPgCWqbcNOtZVFhB8Lkfp1+Q==} - peerDependencies: - typanion: '*' + clipanion@4.0.0-rc.4: dependencies: typanion: 3.14.0 - dev: true - /cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} + cliui@6.0.0: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 - dev: true - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + cliui@7.0.4: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - /cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} + cliui@8.0.1: dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 - dev: true - /clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} + clone-deep@4.0.1: dependencies: is-plain-object: 2.0.4 kind-of: 6.0.3 shallow-clone: 3.0.1 - dev: true - /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - dev: true + clone@1.0.4: {} - /clone@2.1.2: - resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} - engines: {node: '>=0.8'} - dev: true + clone@2.1.2: {} - /co-body@6.2.0: - resolution: {integrity: sha512-Kbpv2Yd1NdL1V/V4cwLVxraHDV6K8ayohr2rmH0J87Er8+zJjcTa6dAn9QMPC9CRgU8+aNajKbSf1TzDB1yKPA==} - engines: {node: '>=8.0.0'} + co-body@6.2.0: dependencies: '@hapi/bourne': 3.0.0 inflation: 2.1.0 - qs: 6.13.1 + qs: 6.14.0 raw-body: 2.5.2 type-is: 1.6.18 - dev: true - /co@4.6.0: - resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} - engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - dev: true + co@4.6.0: {} - /collection-utils@1.0.1: - resolution: {integrity: sha512-LA2YTIlR7biSpXkKYwwuzGjwL5rjWEZVOSnvdUc7gObvWe4WkjxOpfrdhoP7Hs09YWDVfg0Mal9BpAqLfVEzQg==} - dev: true + collection-utils@1.0.1: {} - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - dev: true - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + color-name@1.1.4: {} - /colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - dev: true + colorette@2.0.20: {} - /colors@1.4.0: - resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} - engines: {node: '>=0.1.90'} - dev: true + colors@1.4.0: {} - /combined-stream@1.0.8: - resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} - engines: {node: '>= 0.8'} + combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - dev: true - /command-line-args@5.2.1: - resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==} - engines: {node: '>=4.0.0'} + command-line-args@5.2.1: dependencies: array-back: 3.1.0 find-replace: 3.0.0 lodash.camelcase: 4.3.0 typical: 4.0.0 - dev: true - /command-line-usage@7.0.3: - resolution: {integrity: sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==} - engines: {node: '>=12.20.0'} + command-line-usage@7.0.3: dependencies: array-back: 6.2.2 chalk-template: 0.4.0 table-layout: 4.1.1 typical: 7.3.0 - dev: true - /commander@13.0.0: - resolution: {integrity: sha512-oPYleIY8wmTVzkvQq10AEok6YcTC4sRUBl8F9gVuwchGVUCTbl/vhLTaQqutuuySYOsu8YTgV+OxKc/8Yvx+mQ==} - engines: {node: '>=18'} - dev: true + commander@13.1.0: {} - /commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - dev: true + commander@2.20.3: {} - /common-path-prefix@3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - dev: true + common-path-prefix@3.0.0: {} - /commondir@1.0.1: - resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} - dev: true + commondir@1.0.1: {} - /compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} + compressible@2.0.18: dependencies: mime-db: 1.53.0 - dev: true - /compression@1.7.5: - resolution: {integrity: sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==} - engines: {node: '>= 0.8.0'} + compression@1.7.5: dependencies: bytes: 3.1.2 compressible: 2.0.18 @@ -6797,25 +12138,26 @@ packages: vary: 1.1.2 transitivePeerDependencies: - supports-color - dev: true - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + compression@1.8.0: + dependencies: + bytes: 3.1.2 + compressible: 2.0.18 + debug: 2.6.9 + negotiator: 0.6.4 + on-headers: 1.0.2 + safe-buffer: 5.2.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color - /connect-history-api-fallback@1.6.0: - resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==} - engines: {node: '>=0.8'} - dev: true + concat-map@0.0.1: {} - /connect-history-api-fallback@2.0.0: - resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} - engines: {node: '>=0.8'} - dev: true + connect-history-api-fallback@1.6.0: {} - /connect@3.6.6: - resolution: {integrity: sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==} - engines: {node: '>= 0.10.0'} + connect-history-api-fallback@2.0.0: {} + + connect@3.6.6: dependencies: debug: 2.6.9 finalhandler: 1.1.0 @@ -6823,11 +12165,8 @@ packages: utils-merge: 1.0.1 transitivePeerDependencies: - supports-color - dev: true - /connect@3.7.0: - resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} - engines: {node: '>= 0.10.0'} + connect@3.7.0: dependencies: debug: 2.6.9 finalhandler: 1.1.2 @@ -6835,404 +12174,219 @@ packages: utils-merge: 1.0.1 transitivePeerDependencies: - supports-color - dev: true - /consola@3.3.3: - resolution: {integrity: sha512-Qil5KwghMzlqd51UXM0b6fyaGHtOC22scxrwrz4A2882LyUMwQjnvaedN1HAeXzphspQ6CpHkzMAWxBTUruDLg==} - engines: {node: ^14.18.0 || >=16.10.0} - dev: true + consola@3.4.0: {} - /content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 - dev: true - /content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - dev: true + content-type@1.0.5: {} - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: true + convert-source-map@1.9.0: {} - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true + convert-source-map@2.0.0: {} - /cookie-signature@1.0.6: - resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - dev: true + cookie-signature@1.0.6: {} - /cookie@0.7.1: - resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} - engines: {node: '>= 0.6'} - dev: true + cookie@0.7.1: {} - /cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - dev: true + cookie@0.7.2: {} - /cookies@0.9.1: - resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} - engines: {node: '>= 0.8'} + cookies@0.9.1: dependencies: depd: 2.0.0 keygrip: 1.1.0 - dev: true - /copy-anything@2.0.6: - resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} + copy-anything@2.0.6: dependencies: is-what: 3.14.1 - dev: true - /copy-webpack-plugin@12.0.2(webpack@5.97.1): - resolution: {integrity: sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==} - engines: {node: '>= 18.12.0'} - peerDependencies: - webpack: ^5.1.0 + copy-webpack-plugin@12.0.2(webpack@5.98.0(esbuild@0.25.1)): dependencies: fast-glob: 3.3.3 glob-parent: 6.0.2 - globby: 14.0.2 + globby: 14.1.0 normalize-path: 3.0.0 schema-utils: 4.3.0 serialize-javascript: 6.0.2 - webpack: 5.97.1(esbuild@0.24.2) - dev: true + webpack: 5.98.0(esbuild@0.25.1) - /core-js-compat@3.39.0: - resolution: {integrity: sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==} + core-js-compat@3.41.0: dependencies: - browserslist: 4.24.3 - dev: true + browserslist: 4.24.4 - /core-js@3.37.1: - resolution: {integrity: sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==} - dev: true + core-js@3.37.1: {} - /core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} - dev: true + core-util-is@1.0.2: {} - /core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - dev: true + core-util-is@1.0.3: {} - /cors@2.8.5: - resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} - engines: {node: '>= 0.10'} + cors@2.8.5: dependencies: object-assign: 4.1.1 vary: 1.1.2 - dev: true - /cosmiconfig@9.0.0(typescript@5.7.2): - resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} - engines: {node: '>=14'} - peerDependencies: - typescript: 5.7.2 - peerDependenciesMeta: - typescript: - optional: true + cosmiconfig@9.0.0(typescript@5.8.1-rc): dependencies: env-paths: 2.2.1 - import-fresh: 3.3.0 + import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 - typescript: 5.7.2 - dev: true + optionalDependencies: + typescript: 5.8.1-rc - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true + create-require@1.1.1: {} - /cross-fetch@3.1.5: - resolution: {integrity: sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==} + cross-fetch@3.1.5(encoding@0.1.13): dependencies: - node-fetch: 2.6.7 + node-fetch: 2.6.7(encoding@0.1.13) transitivePeerDependencies: - encoding - dev: true - /cross-fetch@4.1.0: - resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} + cross-fetch@4.1.0(encoding@0.1.13): dependencies: - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) transitivePeerDependencies: - encoding - dev: true - /cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true - /css-loader@7.1.2(webpack@5.97.1): - resolution: {integrity: sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - webpack: ^5.27.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - webpack: - optional: true + css-loader@7.1.2(webpack@5.98.0(esbuild@0.25.1)): dependencies: - icss-utils: 5.1.0(postcss@8.4.49) - postcss: 8.4.49 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.49) - postcss-modules-local-by-default: 4.2.0(postcss@8.4.49) - postcss-modules-scope: 3.2.1(postcss@8.4.49) - postcss-modules-values: 4.0.0(postcss@8.4.49) + icss-utils: 5.1.0(postcss@8.5.2) + postcss: 8.5.2 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.2) + postcss-modules-local-by-default: 4.2.0(postcss@8.5.2) + postcss-modules-scope: 3.2.1(postcss@8.5.2) + postcss-modules-values: 4.0.0(postcss@8.5.2) postcss-value-parser: 4.2.0 - semver: 7.6.3 - webpack: 5.97.1(esbuild@0.24.2) - dev: true + semver: 7.7.1 + optionalDependencies: + webpack: 5.98.0(esbuild@0.25.1) - /css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + css-select@5.1.0: dependencies: boolbase: 1.0.0 css-what: 6.1.0 domhandler: 5.0.3 domutils: 3.2.2 nth-check: 2.1.1 - dev: true - /css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} - engines: {node: '>= 6'} - dev: true + css-what@6.1.0: {} - /cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - dev: true + cssesc@3.0.0: {} - /custom-event@1.0.1: - resolution: {integrity: sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==} - dev: true + custom-event@1.0.1: {} - /dashdash@1.14.1: - resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} - engines: {node: '>=0.10'} + dashdash@1.14.1: dependencies: assert-plus: 1.0.0 - dev: true - /data-uri-to-buffer@4.0.1: - resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} - engines: {node: '>= 12'} - dev: true + data-uri-to-buffer@4.0.1: {} - /data-uri-to-buffer@6.0.2: - resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} - engines: {node: '>= 14'} - dev: true + data-uri-to-buffer@6.0.2: {} - /data-view-buffer@1.0.2: - resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} - engines: {node: '>= 0.4'} + data-view-buffer@1.0.2: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 - dev: true - /data-view-byte-length@1.0.2: - resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} - engines: {node: '>= 0.4'} + data-view-byte-length@1.0.2: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 - dev: true - /data-view-byte-offset@1.0.1: - resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} - engines: {node: '>= 0.4'} + data-view-byte-offset@1.0.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 - dev: true - - /date-format@4.0.14: - resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} - engines: {node: '>=4.0'} - dev: true - - /dayjs@1.11.13: - resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} - dev: true - /debounce@1.2.1: - resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} - dev: true + date-format@4.0.14: {} - /debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.0.0 - dev: true + dayjs@1.11.13: {} - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - dependencies: - ms: 2.1.3 - dev: true + debounce@1.2.1: {} - /debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@3.2.7: + dependencies: + ms: 2.1.3 + + debug@4.3.4: dependencies: ms: 2.1.2 - dev: true - /debug@4.3.7: - resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.3.7: dependencies: ms: 2.1.3 - dev: true - /debug@4.4.0(supports-color@10.0.0): - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@4.4.0(supports-color@10.0.0): dependencies: ms: 2.1.3 + optionalDependencies: supports-color: 10.0.0 - dev: true - /decamelize@1.2.0: - resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} - engines: {node: '>=0.10.0'} - dev: true + decamelize@1.2.0: {} - /decode-uri-component@0.2.2: - resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} - engines: {node: '>=0.10'} - dev: true + decode-uri-component@0.2.2: {} - /deep-equal@1.0.1: - resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} - dev: true + deep-equal@1.0.1: {} - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true + deep-is@0.1.4: {} - /deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - dev: true + deepmerge@4.3.1: {} - /default-browser-id@5.0.0: - resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} - engines: {node: '>=18'} - dev: true + default-browser-id@5.0.0: {} - /default-browser@5.2.1: - resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} - engines: {node: '>=18'} + default-browser@5.2.1: dependencies: bundle-name: 4.1.0 default-browser-id: 5.0.0 - dev: true - /default-gateway@6.0.3: - resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} - engines: {node: '>= 10'} + default-gateway@6.0.3: dependencies: execa: 5.1.1 - dev: true - /defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + defaults@1.0.4: dependencies: clone: 1.0.4 - dev: true - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.1 es-errors: 1.3.0 gopd: 1.2.0 - dev: true - /define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - dev: true + define-lazy-prop@2.0.0: {} - /define-lazy-prop@3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} - engines: {node: '>=12'} - dev: true + define-lazy-prop@3.0.0: {} - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + define-properties@1.2.1: dependencies: define-data-property: 1.1.4 has-property-descriptors: 1.0.2 object-keys: 1.1.1 - dev: true - /defu@6.1.4: - resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} - dev: true + defu@6.1.4: {} - /degenerator@5.0.1: - resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} - engines: {node: '>= 14'} + degenerator@5.0.1: dependencies: ast-types: 0.13.4 escodegen: 2.1.0 esprima: 4.0.1 - dev: true - /del@2.2.2: - resolution: {integrity: sha512-Z4fzpbIRjOu7lO5jCETSWoqUDVe0IPOlfugBsF6suen2LKDlVb4QZpKEM9P+buNJ4KI1eN7I083w/pbKUpsrWQ==} - engines: {node: '>=0.10.0'} + del@2.2.2: dependencies: globby: 5.0.0 is-path-cwd: 1.0.0 @@ -7241,258 +12395,146 @@ packages: pify: 2.3.0 pinkie-promise: 2.0.1 rimraf: 2.7.1 - dev: true - /delayed-stream@1.0.0: - resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} - engines: {node: '>=0.4.0'} - dev: true + delayed-stream@1.0.0: {} - /delegates@1.0.0: - resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} - dev: true + delegates@1.0.0: {} - /depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - dev: true + depd@1.1.2: {} - /depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - dev: true + depd@2.0.0: {} - /dependency-graph@0.11.0: - resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} - engines: {node: '>= 0.6.0'} - dev: true + dependency-graph@0.11.0: {} - /dependency-graph@1.0.0: - resolution: {integrity: sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==} - engines: {node: '>=4'} - dev: true + dependency-graph@1.0.0: {} - /destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - dev: true + destroy@1.2.0: {} - /detect-libc@1.0.3: - resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} - engines: {node: '>=0.10'} - hasBin: true - dev: true + detect-libc@1.0.3: optional: true - /detect-libc@2.0.3: - resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} - engines: {node: '>=8'} - dev: true + detect-libc@2.0.3: {} - /detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - dev: true + detect-node@2.1.0: {} - /dev-ip@1.0.1: - resolution: {integrity: sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==} - engines: {node: '>= 0.8.0'} - hasBin: true - dev: true + dev-ip@1.0.1: {} - /devtools-protocol@0.0.1045489: - resolution: {integrity: sha512-D+PTmWulkuQW4D1NTiCRCFxF7pQPn0hgp4YyX4wAQ6xYXKOadSWPR3ENGDQ47MW/Ewc9v2rpC/UEEGahgBYpSQ==} - dev: true + devtools-protocol@0.0.1045489: {} - /devtools-protocol@0.0.1367902: - resolution: {integrity: sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==} - dev: true + devtools-protocol@0.0.1413902: {} - /di@0.0.1: - resolution: {integrity: sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==} - dev: true + di@0.0.1: {} - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true + diff@4.0.2: {} - /diff@5.2.0: - resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} - engines: {node: '>=0.3.1'} - dev: true + diff@5.2.0: {} - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 - dev: true - /dns-packet@5.6.1: - resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} - engines: {node: '>=6'} + dns-packet@5.6.1: dependencies: '@leichtgewicht/ip-codec': 2.0.5 - dev: true - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + doctrine@2.1.0: dependencies: esutils: 2.0.3 - dev: true - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + doctrine@3.0.0: dependencies: esutils: 2.0.3 - dev: true - /dom-serialize@2.2.1: - resolution: {integrity: sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==} + dom-serialize@2.2.1: dependencies: custom-event: 1.0.1 ent: 2.2.2 extend: 3.0.2 void-elements: 2.0.1 - dev: true - /dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 entities: 4.5.0 - dev: true - /domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - dev: true + domelementtype@2.3.0: {} - /domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} + domhandler@5.0.3: dependencies: domelementtype: 2.3.0 - dev: true - /domutils@3.2.2: - resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + domutils@3.2.2: dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 domhandler: 5.0.3 - dev: true - /dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} + dunder-proto@1.0.1: dependencies: - call-bind-apply-helpers: 1.0.1 + call-bind-apply-helpers: 1.0.2 es-errors: 1.3.0 gopd: 1.2.0 - dev: true - /duplexify@3.7.1: - resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} + duplexify@3.7.1: dependencies: end-of-stream: 1.4.4 inherits: 2.0.4 readable-stream: 2.3.8 stream-shift: 1.0.3 - dev: true - /duplexify@4.1.3: - resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + duplexify@4.1.3: dependencies: end-of-stream: 1.4.4 inherits: 2.0.4 readable-stream: 3.6.2 stream-shift: 1.0.3 - dev: true - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true + eastasianwidth@0.2.0: {} - /easy-extender@2.3.4: - resolution: {integrity: sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==} - engines: {node: '>= 4.0.0'} + easy-extender@2.3.4: dependencies: lodash: 4.17.21 - dev: true - /eazy-logger@4.0.1: - resolution: {integrity: sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw==} - engines: {node: '>= 0.8.0'} + eazy-logger@4.0.1: dependencies: chalk: 4.1.2 - dev: true - /ecc-jsbn@0.1.2: - resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + ecc-jsbn@0.1.2: dependencies: jsbn: 0.1.1 safer-buffer: 2.1.2 - dev: true - /ecdsa-sig-formatter@1.0.11: - resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer: 5.2.1 - dev: true - /ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - dev: true + ee-first@1.1.1: {} - /electron-to-chromium@1.5.77: - resolution: {integrity: sha512-AnJSrt5JpRVgY6dgd5yccguLc5A7oMSF0Kt3fcW+Hp5WTuFbl5upeSFZbMZYy2o7jhmIhU8Ekrd82GhyXUqUUg==} - dev: true + electron-to-chromium@1.5.114: {} - /emoji-regex@10.4.0: - resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} - dev: true + emoji-regex@10.4.0: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true + emoji-regex@8.0.0: {} - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true + emoji-regex@9.2.2: {} - /emojis-list@3.0.0: - resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} - engines: {node: '>= 4'} - dev: true + emojis-list@3.0.0: {} - /encodeurl@1.0.2: - resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} - engines: {node: '>= 0.8'} - dev: true + encodeurl@1.0.2: {} - /encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} - dev: true + encodeurl@2.0.0: {} - /encoding@0.1.13: - resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + encoding@0.1.13: dependencies: iconv-lite: 0.6.3 - dev: true optional: true - /end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + end-of-stream@1.4.4: dependencies: once: 1.4.0 - dev: true - /engine.io-client@6.6.2: - resolution: {integrity: sha512-TAr+NKeoVTjEVW8P3iHguO1LO6RlUz9O5Y8o7EY0fU+gY1NYqas7NN3slpFtbXEsLMHk0h90fJMfKjRkQ0qUIw==} + engine.io-client@6.6.3: dependencies: '@socket.io/component-emitter': 3.1.2 debug: 4.3.7 @@ -7503,20 +12545,13 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true - /engine.io-parser@5.2.3: - resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} - engines: {node: '>=10.0.0'} - dev: true + engine.io-parser@5.2.3: {} - /engine.io@6.6.2: - resolution: {integrity: sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==} - engines: {node: '>=10.2.0'} + engine.io@6.6.4: dependencies: - '@types/cookie': 0.4.1 '@types/cors': 2.8.17 - '@types/node': 22.10.5 + '@types/node': 18.19.76 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -7528,88 +12563,57 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true - /enhanced-resolve@5.18.0: - resolution: {integrity: sha512-0/r0MySGYG8YqlayBZ6MuCfECmHFdJ5qyPh8s8wa5Hnm6SaFLSK1VYCbj+NKp090Nm1caZhD+QTnmxO7esYGyQ==} - engines: {node: '>=10.13.0'} + enhanced-resolve@5.18.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - dev: true - /ent@2.2.2: - resolution: {integrity: sha512-kKvD1tO6BM+oK9HzCPpUdRb4vKFQY/FPTFmurMvh6LlN68VMrdj77w8yp51/kDbpkFOS9J8w5W6zIzgM2H8/hw==} - engines: {node: '>= 0.4'} + ent@2.2.2: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 punycode: 1.4.1 safe-regex-test: 1.1.0 - dev: true - /entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - dev: true + entities@4.5.0: {} - /env-paths@2.2.1: - resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} - engines: {node: '>=6'} - dev: true + env-paths@2.2.1: {} - /envinfo@7.14.0: - resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==} - engines: {node: '>=4'} - hasBin: true - dev: true + envinfo@7.14.0: {} - /environment@1.1.0: - resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} - engines: {node: '>=18'} - dev: true + environment@1.1.0: {} - /err-code@2.0.3: - resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - dev: true + err-code@2.0.3: {} - /errno@0.1.8: - resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} - hasBin: true + errno@0.1.8: dependencies: prr: 1.0.1 - dev: true optional: true - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - dev: true - /errorstacks@2.4.1: - resolution: {integrity: sha512-jE4i0SMYevwu/xxAuzhly/KTwtj0xDhbzB6m1xPImxTkw8wcCbgarOQPfCVMi5JKVyW7in29pNJCCJrry3Ynnw==} - dev: true + errorstacks@2.4.1: {} - /es-abstract@1.23.9: - resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} - engines: {node: '>= 0.4'} + es-abstract@1.23.9: dependencies: array-buffer-byte-length: 1.0.2 arraybuffer.prototype.slice: 1.0.4 available-typed-arrays: 1.0.7 call-bind: 1.0.8 - call-bound: 1.0.3 + 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-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.2.7 + get-intrinsic: 1.3.0 get-proto: 1.0.1 get-symbol-description: 1.1.0 globalthis: 1.0.4 @@ -7626,9 +12630,9 @@ packages: is-shared-array-buffer: 1.0.4 is-string: 1.1.1 is-typed-array: 1.1.15 - is-weakref: 1.1.0 + is-weakref: 1.1.1 math-intrinsics: 1.1.0 - object-inspect: 1.13.3 + object-inspect: 1.13.4 object-keys: 1.1.1 object.assign: 4.1.7 own-keys: 1.0.1 @@ -7645,233 +12649,116 @@ packages: typed-array-byte-offset: 1.0.4 typed-array-length: 1.0.7 unbox-primitive: 1.1.0 - which-typed-array: 1.1.18 - dev: true + which-typed-array: 1.1.19 - /es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - dev: true + es-define-property@1.0.1: {} - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - dev: true + es-errors@1.3.0: {} - /es-module-lexer@1.6.0: - resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} - dev: true + es-module-lexer@1.6.0: {} - /es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} + es-object-atoms@1.1.1: dependencies: es-errors: 1.3.0 - dev: true - /es-set-tostringtag@2.1.0: - resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} - engines: {node: '>= 0.4'} + es-set-tostringtag@2.1.0: dependencies: es-errors: 1.3.0 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 has-tostringtag: 1.0.2 hasown: 2.0.2 - dev: true - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + es-shim-unscopables@1.1.0: dependencies: hasown: 2.0.2 - dev: true - /es-to-primitive@1.3.0: - resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} - engines: {node: '>= 0.4'} + es-to-primitive@1.3.0: dependencies: is-callable: 1.2.7 is-date-object: 1.1.0 is-symbol: 1.1.1 - dev: true - /es6-promise@4.2.8: - resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} - dev: true + es6-promise@4.2.8: {} - /es6-promisify@5.0.0: - resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + es6-promisify@5.0.0: dependencies: es6-promise: 4.2.8 - dev: true - /esbuild-wasm@0.24.2: - resolution: {integrity: sha512-03/7Z1gD+ohDnScFztvI4XddTAbKVmMEzCvvkBpQdWKEXJ+73dTyeNrmdxP1Q0zpDMFjzUJwtK4rLjqwiHbzkw==} - engines: {node: '>=18'} - hasBin: true - dev: true + esbuild-wasm@0.25.1: {} - /esbuild@0.24.0: - resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} - engines: {node: '>=18'} - hasBin: true + esbuild@0.25.1: optionalDependencies: - '@esbuild/aix-ppc64': 0.24.0 - '@esbuild/android-arm': 0.24.0 - '@esbuild/android-arm64': 0.24.0 - '@esbuild/android-x64': 0.24.0 - '@esbuild/darwin-arm64': 0.24.0 - '@esbuild/darwin-x64': 0.24.0 - '@esbuild/freebsd-arm64': 0.24.0 - '@esbuild/freebsd-x64': 0.24.0 - '@esbuild/linux-arm': 0.24.0 - '@esbuild/linux-arm64': 0.24.0 - '@esbuild/linux-ia32': 0.24.0 - '@esbuild/linux-loong64': 0.24.0 - '@esbuild/linux-mips64el': 0.24.0 - '@esbuild/linux-ppc64': 0.24.0 - '@esbuild/linux-riscv64': 0.24.0 - '@esbuild/linux-s390x': 0.24.0 - '@esbuild/linux-x64': 0.24.0 - '@esbuild/netbsd-x64': 0.24.0 - '@esbuild/openbsd-arm64': 0.24.0 - '@esbuild/openbsd-x64': 0.24.0 - '@esbuild/sunos-x64': 0.24.0 - '@esbuild/win32-arm64': 0.24.0 - '@esbuild/win32-ia32': 0.24.0 - '@esbuild/win32-x64': 0.24.0 - dev: true - - /esbuild@0.24.2: - resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} - engines: {node: '>=18'} - hasBin: true - optionalDependencies: - '@esbuild/aix-ppc64': 0.24.2 - '@esbuild/android-arm': 0.24.2 - '@esbuild/android-arm64': 0.24.2 - '@esbuild/android-x64': 0.24.2 - '@esbuild/darwin-arm64': 0.24.2 - '@esbuild/darwin-x64': 0.24.2 - '@esbuild/freebsd-arm64': 0.24.2 - '@esbuild/freebsd-x64': 0.24.2 - '@esbuild/linux-arm': 0.24.2 - '@esbuild/linux-arm64': 0.24.2 - '@esbuild/linux-ia32': 0.24.2 - '@esbuild/linux-loong64': 0.24.2 - '@esbuild/linux-mips64el': 0.24.2 - '@esbuild/linux-ppc64': 0.24.2 - '@esbuild/linux-riscv64': 0.24.2 - '@esbuild/linux-s390x': 0.24.2 - '@esbuild/linux-x64': 0.24.2 - '@esbuild/netbsd-arm64': 0.24.2 - '@esbuild/netbsd-x64': 0.24.2 - '@esbuild/openbsd-arm64': 0.24.2 - '@esbuild/openbsd-x64': 0.24.2 - '@esbuild/sunos-x64': 0.24.2 - '@esbuild/win32-arm64': 0.24.2 - '@esbuild/win32-ia32': 0.24.2 - '@esbuild/win32-x64': 0.24.2 - dev: true - - /escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - dev: true - - /escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: true - - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true - - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true - - /escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true + '@esbuild/aix-ppc64': 0.25.1 + '@esbuild/android-arm': 0.25.1 + '@esbuild/android-arm64': 0.25.1 + '@esbuild/android-x64': 0.25.1 + '@esbuild/darwin-arm64': 0.25.1 + '@esbuild/darwin-x64': 0.25.1 + '@esbuild/freebsd-arm64': 0.25.1 + '@esbuild/freebsd-x64': 0.25.1 + '@esbuild/linux-arm': 0.25.1 + '@esbuild/linux-arm64': 0.25.1 + '@esbuild/linux-ia32': 0.25.1 + '@esbuild/linux-loong64': 0.25.1 + '@esbuild/linux-mips64el': 0.25.1 + '@esbuild/linux-ppc64': 0.25.1 + '@esbuild/linux-riscv64': 0.25.1 + '@esbuild/linux-s390x': 0.25.1 + '@esbuild/linux-x64': 0.25.1 + '@esbuild/netbsd-arm64': 0.25.1 + '@esbuild/netbsd-x64': 0.25.1 + '@esbuild/openbsd-arm64': 0.25.1 + '@esbuild/openbsd-x64': 0.25.1 + '@esbuild/sunos-x64': 0.25.1 + '@esbuild/win32-arm64': 0.25.1 + '@esbuild/win32-ia32': 0.25.1 + '@esbuild/win32-x64': 0.25.1 + + escalade@3.2.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@4.0.0: {} + + escodegen@2.1.0: dependencies: esprima: 4.0.1 estraverse: 5.3.0 esutils: 2.0.3 optionalDependencies: source-map: 0.6.1 - dev: true - /eslint-config-prettier@9.1.0(eslint@8.57.0): - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' + eslint-config-prettier@10.0.1(eslint@8.57.0): dependencies: eslint: 8.57.0 - dev: true - /eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 is-core-module: 2.16.1 resolve: 1.22.10 transitivePeerDependencies: - supports-color - dev: true - /eslint-module-utils@2.12.0(@typescript-eslint/parser@8.19.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): - resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: '*' - eslint-import-resolver-node: '*' - eslint-import-resolver-typescript: '*' - eslint-import-resolver-webpack: '*' - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - eslint: - optional: true - eslint-import-resolver-node: - optional: true - eslint-import-resolver-typescript: - optional: true - eslint-import-resolver-webpack: - optional: true + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.24.1(eslint@8.57.0)(typescript@5.8.1-rc))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): dependencies: - '@typescript-eslint/parser': 8.19.1(eslint@8.57.0)(typescript@5.7.2) debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 8.24.1(eslint@8.57.0)(typescript@5.8.1-rc) eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - dev: true - /eslint-plugin-header@3.1.1(eslint@8.57.0): - resolution: {integrity: sha512-9vlKxuJ4qf793CmeeSrZUvVClw6amtpghq3CuWcB5cUNnWHQhgcqy5eF8oVKFk1G3Y/CbchGfEaw3wiIJaNmVg==} - peerDependencies: - eslint: '>=7.7.0' + eslint-plugin-header@3.1.1(eslint@8.57.0): dependencies: eslint: 8.57.0 - dev: true - /eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.1)(eslint@8.57.0): - resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.1(eslint@8.57.0)(typescript@5.8.1-rc))(eslint@8.57.0): dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 8.19.1(eslint@8.57.0)(typescript@5.7.2) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.3 @@ -7880,7 +12767,7 @@ packages: doctrine: 2.1.0 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.19.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.24.1(eslint@8.57.0)(typescript@5.8.1-rc))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -7891,43 +12778,28 @@ packages: semver: 6.3.1 string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.24.1(eslint@8.57.0)(typescript@5.8.1-rc) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - dev: true - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true - /eslint-visitor-keys@3.4.3: - resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + eslint-visitor-keys@3.4.3: {} - /eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - dev: true + eslint-visitor-keys@4.2.0: {} - /eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. - hasBin: true + eslint@8.57.0: dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.0) '@eslint-community/regexpp': 4.12.1 @@ -7936,7 +12808,7 @@ packages: '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.1 + '@ungap/structured-clone': 1.3.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 @@ -7969,99 +12841,52 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true - /espree@10.3.0: - resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + espree@10.3.0: dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) eslint-visitor-keys: 4.2.0 - dev: true - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@9.6.1: dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) eslint-visitor-keys: 3.4.3 - dev: true - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true + esprima@4.0.1: {} - /esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} + esquery@1.6.0: dependencies: estraverse: 5.3.0 - dev: true - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - dev: true - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true + estraverse@4.3.0: {} - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true + estraverse@5.3.0: {} - /estree-walker@1.0.1: - resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} - dev: true + estree-walker@1.0.1: {} - /estree-walker@2.0.2: - resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} - dev: true + estree-walker@2.0.2: {} - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true + esutils@2.0.3: {} - /etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - dev: true + etag@1.8.1: {} - /event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - dev: true + event-target-shim@5.0.1: {} - /eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - dev: true + eventemitter3@4.0.7: {} - /eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - dev: true + eventemitter3@5.0.1: {} - /events-intercept@2.0.0: - resolution: {integrity: sha512-blk1va0zol9QOrdZt0rFXo5KMkNPVSp92Eju/Qz8THwKWKRKeE0T8Br/1aW6+Edkyq9xHYgYxn2QtOnUKPUp+Q==} - dev: true + events-intercept@2.0.0: {} - /events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - dev: true + events@3.3.0: {} - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + execa@5.1.1: dependencies: cross-spawn: 7.0.6 get-stream: 6.0.1 @@ -8072,24 +12897,14 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true - /exit@0.1.2: - resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} - engines: {node: '>= 0.8.0'} - dev: true + exit@0.1.2: {} - /exponential-backoff@3.1.1: - resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} - dev: true + exponential-backoff@3.1.2: {} - /express-rate-limit@5.5.1: - resolution: {integrity: sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg==} - dev: true + express-rate-limit@5.5.1: {} - /express@4.21.2: - resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} - engines: {node: '>= 0.10.0'} + express@4.21.2: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 @@ -8124,25 +12939,16 @@ packages: vary: 1.1.2 transitivePeerDependencies: - supports-color - dev: true - /extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - dev: true - - /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} + extend@3.0.2: {} + + external-editor@3.1.0: dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 - dev: true - /extract-zip@2.0.1: - resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} - engines: {node: '>= 10.17.0'} - hasBin: true + extract-zip@2.0.1: dependencies: debug: 4.4.0(supports-color@10.0.0) get-stream: 5.2.0 @@ -8151,128 +12957,65 @@ packages: '@types/yauzl': 2.10.3 transitivePeerDependencies: - supports-color - dev: true - /extsprintf@1.3.0: - resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} - engines: {'0': node >=0.6.0} - dev: true - - /extsprintf@1.4.1: - resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} - engines: {'0': node >=0.6.0} - dev: true + extsprintf@1.3.0: {} - /fast-content-type-parse@2.0.1: - resolution: {integrity: sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==} - dev: true + extsprintf@1.4.1: {} - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true + fast-content-type-parse@2.0.1: {} - /fast-fifo@1.3.2: - resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - dev: true + fast-deep-equal@3.1.3: {} - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - dev: true + fast-fifo@1.3.2: {} - /fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 - dev: true - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + fast-json-stable-stringify@2.1.0: {} - /fast-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + fast-levenshtein@2.0.6: {} - /fast-redact@3.5.0: - resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} - engines: {node: '>=6'} - dev: true + fast-redact@3.5.0: {} - /fast-safe-stringify@2.1.1: - resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - dev: true + fast-safe-stringify@2.1.1: {} - /fast-uri@3.0.5: - resolution: {integrity: sha512-5JnBCWpFlMo0a3ciDy/JckMzzv1U9coZrIhedq+HXxxUfDTAiS0LA8OKVao4G9BxmCVck/jtA5r3KAtRWEyD8Q==} - dev: true + fast-uri@3.0.6: {} - /fastq@1.18.0: - resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} + fastq@1.19.1: dependencies: - reusify: 1.0.4 - dev: true + reusify: 1.1.0 - /faye-websocket@0.11.4: - resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} - engines: {node: '>=0.8.0'} + faye-websocket@0.11.4: dependencies: websocket-driver: 0.7.4 - dev: true - /fd-slicer@1.1.0: - resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fd-slicer@1.1.0: dependencies: pend: 1.2.0 - dev: true - /fdir@6.4.2(picomatch@4.0.2): - resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - dependencies: + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: picomatch: 4.0.2 - dev: true - /fetch-blob@3.2.0: - resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} - engines: {node: ^12.20 || >= 14.13} + fetch-blob@3.2.0: dependencies: node-domexception: 1.0.0 web-streams-polyfill: 3.3.3 - dev: true - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 - dev: true - /fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - dev: true - /finalhandler@1.1.0: - resolution: {integrity: sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==} - engines: {node: '>= 0.8'} + finalhandler@1.1.0: dependencies: debug: 2.6.9 encodeurl: 1.0.2 @@ -8283,11 +13026,8 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /finalhandler@1.1.2: - resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} - engines: {node: '>= 0.8'} + finalhandler@1.1.2: dependencies: debug: 2.6.9 encodeurl: 1.0.2 @@ -8298,11 +13038,8 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /finalhandler@1.3.1: - resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} - engines: {node: '>= 0.8'} + finalhandler@1.3.1: dependencies: debug: 2.6.9 encodeurl: 2.0.0 @@ -8313,399 +13050,229 @@ packages: unpipe: 1.0.0 transitivePeerDependencies: - supports-color - dev: true - /find-cache-dir@3.3.2: - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} - engines: {node: '>=8'} + find-cache-dir@3.3.2: dependencies: commondir: 1.0.1 make-dir: 3.1.0 pkg-dir: 4.2.0 - dev: true - /find-cache-dir@4.0.0: - resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} - engines: {node: '>=14.16'} + find-cache-dir@4.0.0: dependencies: common-path-prefix: 3.0.0 pkg-dir: 7.0.0 - dev: true - /find-replace@3.0.0: - resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==} - engines: {node: '>=4.0.0'} + find-replace@3.0.0: dependencies: array-back: 3.1.0 - dev: true - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: true - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /find-up@6.3.0: - resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + find-up@6.3.0: dependencies: locate-path: 7.2.0 path-exists: 5.0.0 - dev: true - /find-yarn-workspace-root@2.0.0: - resolution: {integrity: sha512-1IMnbjt4KzsQfnhnzNd8wUEgXZ44IzZaZmnLYx7D5FZlaHt2gW20Cri8Q+E/t5tIj4+epTBub+2Zxu/vNILzqQ==} - dependencies: - micromatch: 4.0.8 - dev: true - - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@3.2.0: dependencies: - flatted: 3.3.2 + flatted: 3.3.3 keyv: 4.5.4 rimraf: 3.0.2 - dev: true - /flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - dev: true + flat@5.0.2: {} - /flatted@3.3.2: - resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} - dev: true + flatted@3.3.3: {} - /follow-redirects@1.15.9(debug@4.4.0): - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - dependencies: + follow-redirects@1.15.9(debug@4.4.0): + optionalDependencies: debug: 4.4.0(supports-color@10.0.0) - dev: true - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.5: dependencies: is-callable: 1.2.7 - dev: true - - /foreground-child@2.0.0: - resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} - engines: {node: '>=8.0.0'} - dependencies: - cross-spawn: 7.0.6 - signal-exit: 3.0.7 - dev: true - /foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} - engines: {node: '>=14'} + foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 signal-exit: 4.1.0 - dev: true - /forever-agent@0.6.1: - resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} - dev: true + forever-agent@0.6.1: {} - /form-data@2.3.3: - resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} - engines: {node: '>= 0.12'} + form-data@2.3.3: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 - dev: true - /form-data@2.5.2: - resolution: {integrity: sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==} - engines: {node: '>= 0.12'} + form-data@2.5.3: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 mime-types: 2.1.35 safe-buffer: 5.2.1 - dev: true - /form-data@4.0.1: - resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} - engines: {node: '>= 6'} + form-data@4.0.2: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 mime-types: 2.1.35 - dev: true - /formdata-polyfill@4.0.10: - resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} - engines: {node: '>=12.20.0'} + formdata-polyfill@4.0.10: dependencies: fetch-blob: 3.2.0 - dev: true - /forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - dev: true + forwarded@0.2.0: {} - /fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - dev: true + fraction.js@4.3.7: {} - /fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - dev: true + fresh@0.5.2: {} - /fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - dev: true + fs-constants@1.0.0: {} - /fs-extra@3.0.1: - resolution: {integrity: sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==} + fs-extra@11.3.0: dependencies: graceful-fs: 4.2.11 - jsonfile: 3.0.1 - universalify: 0.1.2 - dev: true + jsonfile: 6.1.0 + universalify: 2.0.1 - /fs-extra@7.0.1: - resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} - engines: {node: '>=6 <7 || >=8'} + fs-extra@3.0.1: dependencies: graceful-fs: 4.2.11 - jsonfile: 4.0.0 + jsonfile: 3.0.1 universalify: 0.1.2 - dev: true - /fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} + fs-extra@8.1.0: dependencies: graceful-fs: 4.2.11 jsonfile: 4.0.0 universalify: 0.1.2 - dev: true - - /fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - dependencies: - at-least-node: 1.0.0 - graceful-fs: 4.2.11 - jsonfile: 6.1.0 - universalify: 2.0.1 - dev: true - /fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 8'} + fs-minipass@2.1.0: dependencies: minipass: 3.3.6 - dev: true - /fs-minipass@3.0.3: - resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + fs-minipass@3.0.3: dependencies: minipass: 7.1.2 - dev: true - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true + fs.realpath@1.0.0: {} - /fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - dev: true + fsevents@2.3.3: optional: true - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true + function-bind@1.1.2: {} - /function.prototype.name@1.1.8: - resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} - engines: {node: '>= 0.4'} + function.prototype.name@1.1.8: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 functions-have-names: 1.2.3 hasown: 2.0.2 is-callable: 1.2.7 - dev: true - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true - - /furi@2.0.0: - resolution: {integrity: sha512-uKuNsaU0WVaK/vmvj23wW1bicOFfyqSsAIH71bRZx8kA4Xj+YCHin7CJKJJjkIsmxYaPFLk9ljmjEyB7xF7WvQ==} - dependencies: - '@types/is-windows': 1.0.2 - is-windows: 1.0.2 - dev: true + functions-have-names@1.2.3: {} - /gaxios@6.7.1(supports-color@10.0.0): - resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} - engines: {node: '>=14'} + gaxios@6.7.1(encoding@0.1.13)(supports-color@10.0.0): dependencies: extend: 3.0.2 https-proxy-agent: 7.0.6(supports-color@10.0.0) is-stream: 2.0.1 - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) uuid: 9.0.1 transitivePeerDependencies: - encoding - supports-color - dev: true - /gcp-metadata@6.1.0(supports-color@10.0.0): - resolution: {integrity: sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==} - engines: {node: '>=14'} + gcp-metadata@6.1.1(encoding@0.1.13)(supports-color@10.0.0): dependencies: - gaxios: 6.7.1(supports-color@10.0.0) + gaxios: 6.7.1(encoding@0.1.13)(supports-color@10.0.0) + google-logging-utils: 0.0.2 json-bigint: 1.0.0 transitivePeerDependencies: - encoding - supports-color - dev: true - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true + gensync@1.0.0-beta.2: {} - /get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - dev: true + get-caller-file@2.0.5: {} - /get-east-asian-width@1.3.0: - resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} - engines: {node: '>=18'} - dev: true + get-east-asian-width@1.3.0: {} - /get-intrinsic@1.2.7: - resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} - engines: {node: '>= 0.4'} + get-intrinsic@1.3.0: dependencies: - call-bind-apply-helpers: 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.0.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 - dev: true - /get-npm-tarball-url@2.1.0: - resolution: {integrity: sha512-ro+DiMu5DXgRBabqXupW38h7WPZ9+Ad8UjwhvsmmN8w1sU7ab0nzAXvVZ4kqYg57OrqomRtJvepX5/xvFKNtjA==} - engines: {node: '>=12.17'} - dev: true + get-npm-tarball-url@2.1.0: {} - /get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 - es-object-atoms: 1.0.0 - dev: true + es-object-atoms: 1.1.1 - /get-stream@5.2.0: - resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} - engines: {node: '>=8'} + get-stream@5.2.0: dependencies: pump: 3.0.2 - dev: true - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true + get-stream@6.0.1: {} - /get-symbol-description@1.1.0: - resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} - engines: {node: '>= 0.4'} + get-symbol-description@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 - get-intrinsic: 1.2.7 - dev: true + get-intrinsic: 1.3.0 - /get-uri@6.0.4: - resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} - engines: {node: '>= 14'} + get-uri@6.0.4: dependencies: basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 debug: 4.4.0(supports-color@10.0.0) transitivePeerDependencies: - supports-color - dev: true - /getpass@0.1.7: - resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + getpass@0.1.7: dependencies: assert-plus: 1.0.0 - dev: true - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: true + glob-to-regexp@0.4.1: {} - /glob@10.4.5: - resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} - hasBin: true + glob@10.4.5: dependencies: - foreground-child: 3.3.0 + foreground-child: 3.3.1 jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 package-json-from-dist: 1.0.1 path-scurry: 1.11.1 - dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -8713,31 +13280,19 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true + globals@11.12.0: {} - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@13.24.0: dependencies: type-fest: 0.20.2 - dev: true - /globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 gopd: 1.2.0 - dev: true - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 @@ -8745,23 +13300,17 @@ packages: ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 - dev: true - /globby@14.0.2: - resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} - engines: {node: '>=18'} + globby@14.1.0: dependencies: '@sindresorhus/merge-streams': 2.3.0 fast-glob: 3.3.3 - ignore: 5.3.2 - path-type: 5.0.0 + ignore: 7.0.3 + path-type: 6.0.0 slash: 5.1.0 - unicorn-magic: 0.1.0 - dev: true + unicorn-magic: 0.3.0 - /globby@5.0.0: - resolution: {integrity: sha512-HJRTIH2EeH44ka+LWig+EqT2ONSYpVlNfx6pyd592/VF1TbfljJ7elwie7oSwcViLGqOdWocSdu2txwBF9bjmQ==} - engines: {node: '>=0.10.0'} + globby@5.0.0: dependencies: array-union: 1.0.2 arrify: 1.0.1 @@ -8769,82 +13318,61 @@ packages: object-assign: 4.1.1 pify: 2.3.0 pinkie-promise: 2.0.1 - dev: true - /google-auth-library@9.15.0(supports-color@10.0.0): - resolution: {integrity: sha512-7ccSEJFDFO7exFbO6NRyC+xH8/mZ1GZGG2xxx9iHxZWcjUjJpjWxIMw3cofAKcueZ6DATiukmmprD7yavQHOyQ==} - engines: {node: '>=14'} + google-auth-library@9.15.1(encoding@0.1.13)(supports-color@10.0.0): dependencies: base64-js: 1.5.1 ecdsa-sig-formatter: 1.0.11 - gaxios: 6.7.1(supports-color@10.0.0) - gcp-metadata: 6.1.0(supports-color@10.0.0) - gtoken: 7.1.0(supports-color@10.0.0) + gaxios: 6.7.1(encoding@0.1.13)(supports-color@10.0.0) + gcp-metadata: 6.1.1(encoding@0.1.13)(supports-color@10.0.0) + gtoken: 7.1.0(encoding@0.1.13)(supports-color@10.0.0) jws: 4.0.0 transitivePeerDependencies: - encoding - supports-color - dev: true - /google-gax@4.4.1(supports-color@10.0.0): - resolution: {integrity: sha512-Phyp9fMfA00J3sZbJxbbB4jC55b7DBjE3F6poyL3wKMEBVKA79q6BGuHcTiM28yOzVql0NDbRL8MLLh8Iwk9Dg==} - engines: {node: '>=14'} + google-gax@4.4.1(encoding@0.1.13)(supports-color@10.0.0): dependencies: - '@grpc/grpc-js': 1.12.5 + '@grpc/grpc-js': 1.12.6 '@grpc/proto-loader': 0.7.13 '@types/long': 4.0.2 abort-controller: 3.0.0 duplexify: 4.1.3 - google-auth-library: 9.15.0(supports-color@10.0.0) - node-fetch: 2.7.0 + google-auth-library: 9.15.1(encoding@0.1.13)(supports-color@10.0.0) + node-fetch: 2.7.0(encoding@0.1.13) object-hash: 3.0.0 proto3-json-serializer: 2.0.2 protobufjs: 7.4.0 - retry-request: 7.0.2(supports-color@10.0.0) + retry-request: 7.0.2(encoding@0.1.13)(supports-color@10.0.0) uuid: 9.0.1 transitivePeerDependencies: - encoding - supports-color - dev: true - /google-protobuf@3.21.4: - resolution: {integrity: sha512-MnG7N936zcKTco4Jd2PX2U96Kf9PxygAPKBug+74LHzmHXmceN16MmRcdgZv+DGef/S9YvQAfRsNCn4cjf9yyQ==} - dev: true + google-logging-utils@0.0.2: {} - /gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - dev: true + google-protobuf@3.21.4: {} - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - dev: true + gopd@1.2.0: {} - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true + graceful-fs@4.2.11: {} - /grpc-gcp@1.0.1: - resolution: {integrity: sha512-06r73IoGaAIpzT+DRPnw7V5BXvZ5mjy1OcKqSPX+ZHOgbLxT+lJfz8IN83z/sbA3t55ZX88MfDaaCjDGdveVIA==} - engines: {node: '>=12'} + graphemer@1.4.0: {} + + grpc-gcp@1.0.1(protobufjs@7.4.0): dependencies: - '@grpc/grpc-js': 1.12.5 - dev: true + '@grpc/grpc-js': 1.12.6 + protobufjs: 7.4.0 - /gtoken@7.1.0(supports-color@10.0.0): - resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} - engines: {node: '>=14.0.0'} + gtoken@7.1.0(encoding@0.1.13)(supports-color@10.0.0): dependencies: - gaxios: 6.7.1(supports-color@10.0.0) + gaxios: 6.7.1(encoding@0.1.13)(supports-color@10.0.0) jws: 4.0.0 transitivePeerDependencies: - encoding - supports-color - dev: true - /gunzip-maybe@1.4.2: - resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} - hasBin: true + gunzip-maybe@1.4.2: dependencies: browserify-zlib: 0.1.4 is-deflate: 1.0.0 @@ -8852,16 +13380,10 @@ packages: peek-stream: 1.1.3 pumpify: 1.5.1 through2: 2.0.5 - dev: true - /handle-thing@2.0.1: - resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - dev: true + handle-thing@2.0.1: {} - /handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} - hasBin: true + handlebars@4.7.8: dependencies: minimist: 1.2.8 neo-async: 2.6.2 @@ -8869,201 +13391,126 @@ packages: wordwrap: 1.0.0 optionalDependencies: uglify-js: 3.19.3 - dev: true - /har-schema@2.0.0: - resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} - engines: {node: '>=4'} - dev: true + har-schema@2.0.0: {} - /har-validator@5.1.5: - resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} - engines: {node: '>=6'} - deprecated: this library is no longer supported + har-validator@5.1.5: dependencies: ajv: 6.12.6 har-schema: 2.0.0 - dev: true - /has-ansi@2.0.0: - resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} - engines: {node: '>=0.10.0'} + has-ansi@2.0.0: dependencies: ansi-regex: 2.1.1 - dev: true - /has-bigints@1.1.0: - resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} - engines: {node: '>= 0.4'} - dev: true + has-bigints@1.1.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true + has-flag@4.0.0: {} - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.1 - dev: true - /has-proto@1.2.0: - resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} - engines: {node: '>= 0.4'} + has-proto@1.2.0: dependencies: dunder-proto: 1.0.1 - dev: true - /has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - dev: true + has-symbols@1.1.0: {} - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: dependencies: has-symbols: 1.1.0 - dev: true - /hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} + hasown@2.0.2: dependencies: function-bind: 1.1.2 - dev: true - /hosted-git-info@8.0.2: - resolution: {integrity: sha512-sYKnA7eGln5ov8T8gnYlkSOxFJvywzEx9BueN6xo/GKO8PGiI6uK6xx+DIGe45T3bdVjLAQDQW1aicT8z8JwQg==} - engines: {node: ^18.17.0 || >=20.5.0} + hosted-git-info@8.0.2: dependencies: lru-cache: 10.4.3 - dev: true - /hpack.js@2.1.6: - resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + hpack.js@2.1.6: dependencies: inherits: 2.0.4 obuf: 1.1.2 readable-stream: 2.3.8 wbuf: 1.7.3 - dev: true - /html-entities@2.5.2: - resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} - dev: true + html-entities@2.5.2: {} - /html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true + html-escaper@2.0.2: {} - /htmlparser2@9.1.0: - resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + htmlparser2@9.1.0: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 domutils: 3.2.2 entities: 4.5.0 - dev: true - /http-assert@1.5.0: - resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} - engines: {node: '>= 0.8'} + http-assert@1.5.0: dependencies: deep-equal: 1.0.1 http-errors: 1.8.1 - dev: true - /http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - dev: true + http-cache-semantics@4.1.1: {} - /http-deceiver@1.2.7: - resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} - dev: true + http-deceiver@1.2.7: {} - /http-errors@1.6.3: - resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} - engines: {node: '>= 0.6'} + http-errors@1.6.3: dependencies: depd: 1.1.2 inherits: 2.0.3 setprototypeof: 1.1.0 statuses: 1.5.0 - dev: true - /http-errors@1.8.1: - resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} - engines: {node: '>= 0.6'} + http-errors@1.8.1: dependencies: depd: 1.1.2 inherits: 2.0.4 setprototypeof: 1.2.0 statuses: 1.5.0 toidentifier: 1.0.1 - dev: true - /http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} + http-errors@2.0.0: dependencies: depd: 2.0.0 inherits: 2.0.4 setprototypeof: 1.2.0 statuses: 2.0.1 toidentifier: 1.0.1 - dev: true - /http-parser-js@0.5.8: - resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} - dev: true + http-parser-js@0.5.9: {} - /http-proxy-agent@5.0.0(supports-color@10.0.0): - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} + http-proxy-agent@5.0.0(supports-color@10.0.0): dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2(supports-color@10.0.0) debug: 4.4.0(supports-color@10.0.0) transitivePeerDependencies: - supports-color - dev: true - /http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} + http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 debug: 4.4.0(supports-color@10.0.0) transitivePeerDependencies: - supports-color - dev: true - /http-proxy-middleware@2.0.7(@types/express@4.17.21)(debug@4.4.0): - resolution: {integrity: sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/express': ^4.17.13 - peerDependenciesMeta: - '@types/express': - optional: true + http-proxy-middleware@2.0.7(@types/express@4.17.21)(debug@4.4.0): dependencies: - '@types/express': 4.17.21 - '@types/http-proxy': 1.17.15 + '@types/http-proxy': 1.17.16 http-proxy: 1.18.1(debug@4.4.0) is-glob: 4.0.3 is-plain-obj: 3.0.0 micromatch: 4.0.8 + optionalDependencies: + '@types/express': 4.17.21 transitivePeerDependencies: - debug - dev: true - /http-proxy-middleware@3.0.3: - resolution: {integrity: sha512-usY0HG5nyDUwtqpiZdETNbmKtw3QQ1jwYFZ9wi5iHzX2BcILwQKtYDJPo7XHTsu5Z0B2Hj3W9NNnbd+AjFWjqg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + http-proxy-middleware@3.0.3: dependencies: - '@types/http-proxy': 1.17.15 + '@types/http-proxy': 1.17.16 debug: 4.4.0(supports-color@10.0.0) http-proxy: 1.18.1(debug@4.4.0) is-glob: 4.0.3 @@ -9071,925 +13518,504 @@ packages: micromatch: 4.0.8 transitivePeerDependencies: - supports-color - dev: true - /http-proxy@1.18.1(debug@4.4.0): - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} - engines: {node: '>=8.0.0'} + http-proxy@1.18.1(debug@4.4.0): dependencies: eventemitter3: 4.0.7 follow-redirects: 1.15.9(debug@4.4.0) requires-port: 1.0.0 transitivePeerDependencies: - debug - dev: true - /http-signature@1.2.0: - resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} - engines: {node: '>=0.8', npm: '>=1.3.7'} + http-signature@1.2.0: dependencies: assert-plus: 1.0.0 jsprim: 1.4.2 sshpk: 1.18.0 - dev: true - /http-signature@1.4.0: - resolution: {integrity: sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==} - engines: {node: '>=0.10'} + http-signature@1.4.0: dependencies: assert-plus: 1.0.0 jsprim: 2.0.2 sshpk: 1.18.0 - dev: true - /http-status-codes@2.2.0: - resolution: {integrity: sha512-feERVo9iWxvnejp3SEfm/+oNG517npqL2/PIA8ORjyOZjGC7TwCRQsZylciLS64i6pJ0wRYz3rkXLRwbtFa8Ng==} - dev: true + http-status-codes@2.2.0: {} - /http-status-codes@2.3.0: - resolution: {integrity: sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==} - dev: true + http-status-codes@2.3.0: {} - /https-proxy-agent@2.2.4: - resolution: {integrity: sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==} - engines: {node: '>= 4.5.0'} + https-proxy-agent@2.2.4: dependencies: agent-base: 4.3.0 debug: 3.2.7 transitivePeerDependencies: - supports-color - dev: true - - /https-proxy-agent@5.0.1(supports-color@10.0.0): - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} + + https-proxy-agent@5.0.1(supports-color@10.0.0): dependencies: agent-base: 6.0.2(supports-color@10.0.0) debug: 4.4.0(supports-color@10.0.0) transitivePeerDependencies: - supports-color - dev: true - /https-proxy-agent@7.0.6(supports-color@10.0.0): - resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} - engines: {node: '>= 14'} + https-proxy-agent@7.0.6(supports-color@10.0.0): dependencies: agent-base: 7.1.3 debug: 4.4.0(supports-color@10.0.0) transitivePeerDependencies: - supports-color - dev: true - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true + human-signals@2.1.0: {} - /husky@9.1.7: - resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} - engines: {node: '>=18'} - hasBin: true - dev: true + husky@9.1.7: {} - /hyperdyperid@1.2.0: - resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} - engines: {node: '>=10.18'} - dev: true + hyperdyperid@1.2.0: {} - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - dev: true - /iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 - dev: true - /icss-utils@5.1.0(postcss@8.4.49): - resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + icss-utils@5.1.0(postcss@8.5.2): dependencies: - postcss: 8.4.49 - dev: true + postcss: 8.5.2 - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true + ieee754@1.2.1: {} - /ignore-walk@7.0.0: - resolution: {integrity: sha512-T4gbf83A4NH95zvhVYZc+qWocBBGlpzUXLPGurJggw/WIOwicfXJChLDP/iBZnN5WqROSu5Bm3hhle4z8a8YGQ==} - engines: {node: ^18.17.0 || >=20.5.0} + ignore-walk@7.0.0: dependencies: minimatch: 9.0.5 - dev: true - /ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - dev: true + ignore@5.3.2: {} - /image-size@0.5.5: - resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} - engines: {node: '>=0.10.0'} - hasBin: true - dev: true + ignore@7.0.3: {} + + image-size@0.5.5: optional: true - /immediate@3.0.6: - resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} - dev: true + immediate@3.0.6: {} - /immutable@3.8.2: - resolution: {integrity: sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==} - engines: {node: '>=0.10.0'} - dev: true + immutable@3.8.2: {} - /immutable@5.0.3: - resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} - dev: true + immutable@5.0.3: {} - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + import-fresh@3.3.1: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true - /import-lazy@4.0.0: - resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} - engines: {node: '>=8'} - dev: true + import-lazy@4.0.0: {} - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true + imurmurhash@0.1.4: {} - /inflation@2.1.0: - resolution: {integrity: sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==} - engines: {node: '>= 0.8.0'} - dev: true + inflation@2.1.0: {} - /inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true - /inherits@2.0.3: - resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} - dev: true + inherits@2.0.3: {} - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true + inherits@2.0.4: {} - /ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: true + ini@1.3.8: {} - /ini@5.0.0: - resolution: {integrity: sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==} - engines: {node: ^18.17.0 || >=20.5.0} - dev: true + ini@5.0.0: {} - /injection-js@2.4.0: - resolution: {integrity: sha512-6jiJt0tCAo9zjHbcwLiPL+IuNe9SQ6a9g0PEzafThW3fOQi0mrmiJGBJvDD6tmhPh8cQHIQtCOrJuBfQME4kPA==} + injection-js@2.4.0: dependencies: tslib: 2.8.1 - dev: true - /internal-ip@6.2.0: - resolution: {integrity: sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==} - engines: {node: '>=10'} + internal-ip@6.2.0: dependencies: default-gateway: 6.0.3 ipaddr.js: 1.9.1 is-ip: 3.1.0 p-event: 4.2.0 - dev: true - /internal-slot@1.1.0: - resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} - engines: {node: '>= 0.4'} + internal-slot@1.1.0: dependencies: es-errors: 1.3.0 hasown: 2.0.2 side-channel: 1.1.0 - dev: true - /interpret@1.4.0: - resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} - engines: {node: '>= 0.10'} - dev: true + interpret@1.4.0: {} - /ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} - engines: {node: '>= 12'} + ip-address@9.0.5: dependencies: jsbn: 1.1.0 sprintf-js: 1.1.3 - dev: true - /ip-regex@4.3.0: - resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} - engines: {node: '>=8'} - dev: true + ip-regex@4.3.0: {} - /ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - dev: true + ipaddr.js@1.9.1: {} - /ipaddr.js@2.2.0: - resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} - engines: {node: '>= 10'} - dev: true + ipaddr.js@2.2.0: {} - /is-array-buffer@3.0.5: - resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} - engines: {node: '>= 0.4'} + is-array-buffer@3.0.5: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 - get-intrinsic: 1.2.7 - dev: true + call-bound: 1.0.4 + get-intrinsic: 1.3.0 - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true + is-arrayish@0.2.1: {} - /is-async-function@2.1.0: - resolution: {integrity: sha512-GExz9MtyhlZyXYLxzlJRj5WUCE661zhDa1Yna52CN57AJsymh+DvXXjyveSioqSRdxvUrdKdvqB1b5cVKsNpWQ==} - engines: {node: '>= 0.4'} + is-async-function@2.1.1: dependencies: - call-bound: 1.0.3 + async-function: 1.0.0 + call-bound: 1.0.4 get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 - dev: true - /is-bigint@1.1.0: - resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} - engines: {node: '>= 0.4'} + is-bigint@1.1.0: dependencies: has-bigints: 1.1.0 - dev: true - /is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} + is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 - dev: true - /is-boolean-object@1.2.1: - resolution: {integrity: sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==} - engines: {node: '>= 0.4'} + is-boolean-object@1.2.2: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-tostringtag: 1.0.2 - dev: true - /is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} + is-builtin-module@3.2.1: dependencies: builtin-modules: 3.3.0 - dev: true - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true + is-callable@1.2.7: {} - /is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} + is-core-module@2.16.1: dependencies: hasown: 2.0.2 - dev: true - /is-data-view@1.0.2: - resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} - engines: {node: '>= 0.4'} + is-data-view@1.0.2: dependencies: - call-bound: 1.0.3 - get-intrinsic: 1.2.7 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 is-typed-array: 1.1.15 - dev: true - /is-date-object@1.1.0: - resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} - engines: {node: '>= 0.4'} + is-date-object@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-tostringtag: 1.0.2 - dev: true - /is-deflate@1.0.0: - resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==} - dev: true + is-deflate@1.0.0: {} - /is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - dev: true + is-docker@2.2.1: {} - /is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - hasBin: true - dev: true + is-docker@3.0.0: {} - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-finalizationregistry@1.1.1: - resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} - engines: {node: '>= 0.4'} + is-finalizationregistry@1.1.1: dependencies: - call-bound: 1.0.3 - dev: true + call-bound: 1.0.4 - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true + is-fullwidth-code-point@3.0.0: {} - /is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - dev: true + is-fullwidth-code-point@4.0.0: {} - /is-fullwidth-code-point@5.0.0: - resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} - engines: {node: '>=18'} + is-fullwidth-code-point@5.0.0: dependencies: get-east-asian-width: 1.3.0 - dev: true - /is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} - engines: {node: '>= 0.4'} + is-generator-function@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 - dev: true - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-gzip@1.0.0: - resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==} - engines: {node: '>=0.10.0'} - dev: true + is-gzip@1.0.0: {} - /is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true + is-inside-container@1.0.0: dependencies: is-docker: 3.0.0 - dev: true - /is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - dev: true + is-interactive@1.0.0: {} - /is-ip@3.1.0: - resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} - engines: {node: '>=8'} + is-ip@3.1.0: dependencies: ip-regex: 4.3.0 - dev: true - /is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - dev: true + is-map@2.0.3: {} - /is-module@1.0.0: - resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} - dev: true + is-module@1.0.0: {} - /is-network-error@1.1.0: - resolution: {integrity: sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==} - engines: {node: '>=16'} - dev: true + is-network-error@1.1.0: {} - /is-number-like@1.0.8: - resolution: {integrity: sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==} + is-number-like@1.0.8: dependencies: lodash.isfinite: 3.3.2 - dev: true - /is-number-object@1.1.1: - resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} - engines: {node: '>= 0.4'} + is-number-object@1.1.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-tostringtag: 1.0.2 - dev: true - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true + is-number@7.0.0: {} - /is-path-cwd@1.0.0: - resolution: {integrity: sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==} - engines: {node: '>=0.10.0'} - dev: true + is-path-cwd@1.0.0: {} - /is-path-in-cwd@1.0.1: - resolution: {integrity: sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==} - engines: {node: '>=0.10.0'} + is-path-in-cwd@1.0.1: dependencies: is-path-inside: 1.0.1 - dev: true - /is-path-inside@1.0.1: - resolution: {integrity: sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==} - engines: {node: '>=0.10.0'} + is-path-inside@1.0.1: dependencies: path-is-inside: 1.0.2 - dev: true - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true + is-path-inside@3.0.3: {} - /is-plain-obj@3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} - dev: true + is-plain-obj@3.0.0: {} - /is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} + is-plain-object@2.0.4: dependencies: isobject: 3.0.1 - dev: true - /is-plain-object@5.0.0: - resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} - engines: {node: '>=0.10.0'} - dev: true + is-plain-object@5.0.0: {} - /is-promise@2.2.2: - resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} - dev: true + is-promise@2.2.2: {} - /is-reference@1.2.1: - resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + is-reference@1.2.1: dependencies: '@types/estree': 1.0.6 - dev: true - /is-regex@1.2.1: - resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} - engines: {node: '>= 0.4'} + is-regex@1.2.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 gopd: 1.2.0 has-tostringtag: 1.0.2 hasown: 2.0.2 - dev: true - /is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - dev: true + is-set@2.0.3: {} - /is-shared-array-buffer@1.0.4: - resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} - engines: {node: '>= 0.4'} + is-shared-array-buffer@1.0.4: dependencies: - call-bound: 1.0.3 - dev: true + call-bound: 1.0.4 - /is-stream-ended@0.1.4: - resolution: {integrity: sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==} - dev: true + is-stream-ended@0.1.4: {} - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true + is-stream@2.0.1: {} - /is-string@1.1.1: - resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} - engines: {node: '>= 0.4'} + is-string@1.1.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-tostringtag: 1.0.2 - dev: true - /is-symbol@1.1.1: - resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} - engines: {node: '>= 0.4'} + is-symbol@1.1.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-symbols: 1.1.0 safe-regex-test: 1.1.0 - dev: true - /is-typed-array@1.1.15: - resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} - engines: {node: '>= 0.4'} + is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.18 - dev: true + which-typed-array: 1.1.19 - /is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - dev: true + is-typedarray@1.0.0: {} - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true + is-unicode-supported@0.1.0: {} - /is-url@1.2.4: - resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} - dev: true + is-url@1.2.4: {} - /is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - dev: true + is-weakmap@2.0.2: {} - /is-weakref@1.1.0: - resolution: {integrity: sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==} - engines: {node: '>= 0.4'} + is-weakref@1.1.1: dependencies: - call-bound: 1.0.3 - dev: true + call-bound: 1.0.4 - /is-weakset@2.0.4: - resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} - engines: {node: '>= 0.4'} + is-weakset@2.0.4: dependencies: - call-bound: 1.0.3 - get-intrinsic: 1.2.7 - dev: true - - /is-what@3.14.1: - resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} - dev: true + call-bound: 1.0.4 + get-intrinsic: 1.3.0 - /is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - dev: true + is-what@3.14.1: {} - /is-wsl@1.1.0: - resolution: {integrity: sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==} - engines: {node: '>=4'} - dev: true + is-wsl@1.1.0: {} - /is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 - dev: true - /is-wsl@3.1.0: - resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} - engines: {node: '>=16'} + is-wsl@3.1.0: dependencies: is-inside-container: 1.0.0 - dev: true - /is@3.3.0: - resolution: {integrity: sha512-nW24QBoPcFGGHJGUwnfpI7Yc5CdqWNdsyHQszVE/z2pKHXzh7FZ5GWhJqSyaQ9wMkQnsTx+kAI8bHlCX4tKdbg==} - dev: true + is@3.3.0: {} - /isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - dev: true + isarray@1.0.0: {} - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true + isarray@2.0.5: {} - /isbinaryfile@4.0.10: - resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} - engines: {node: '>= 8.0.0'} - dev: true + isbinaryfile@4.0.10: {} - /isbinaryfile@5.0.4: - resolution: {integrity: sha512-YKBKVkKhty7s8rxddb40oOkuP0NbaeXrQvLin6QMHL7Ypiy2RW9LwOVrVgZRyOrhQlayMd9t+D8yDy8MKFTSDQ==} - engines: {node: '>= 18.0.0'} - dev: true + isbinaryfile@5.0.4: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + isexe@2.0.0: {} - /isexe@3.1.1: - resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} - engines: {node: '>=16'} - dev: true + isexe@3.1.1: {} - /isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - dev: true + isobject@3.0.1: {} - /isstream@0.1.2: - resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} - dev: true + isstream@0.1.2: {} - /istanbul-lib-coverage@3.2.2: - resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} - engines: {node: '>=8'} - dev: true + istanbul-lib-coverage@3.2.2: {} - /istanbul-lib-instrument@5.2.1: - resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} - engines: {node: '>=8'} + istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.26.0 - '@babel/parser': 7.26.3 + '@babel/core': 7.26.10 + '@babel/parser': 7.26.9 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /istanbul-lib-instrument@6.0.3: - resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} - engines: {node: '>=10'} + istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.26.0 - '@babel/parser': 7.26.3 + '@babel/core': 7.26.10 + '@babel/parser': 7.26.9 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.6.3 + semver: 7.7.1 transitivePeerDependencies: - supports-color - dev: true - /istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} + istanbul-lib-report@3.0.1: dependencies: istanbul-lib-coverage: 3.2.2 make-dir: 4.0.0 supports-color: 7.2.0 - dev: true - /istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} + istanbul-lib-source-maps@4.0.1: dependencies: debug: 4.4.0(supports-color@10.0.0) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color - dev: true - /istanbul-reports@3.1.7: - resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} - engines: {node: '>=8'} + istanbul-reports@3.1.7: dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - dev: true - /jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - dev: true - /jasmine-core@2.8.0: - resolution: {integrity: sha512-SNkOkS+/jMZvLhuSx1fjhcNWUC/KG6oVyFUGkSBEr9n1axSNduWU8GlI7suaHXr4yxjet6KjrUZxUTE5WzzWwQ==} - dev: true + jasmine-core@2.8.0: {} - /jasmine-core@4.6.1: - resolution: {integrity: sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==} - dev: true + jasmine-core@4.6.1: {} - /jasmine-core@5.5.0: - resolution: {integrity: sha512-NHOvoPO6o9gVR6pwqEACTEpbgcH+JJ6QDypyymGbSUIFIFsMMbBJ/xsFNud8MSClfnWclXd7RQlAZBz7yVo5TQ==} - dev: true + jasmine-core@5.6.0: {} - /jasmine-reporters@2.5.2: - resolution: {integrity: sha512-qdewRUuFOSiWhiyWZX8Yx3YNQ9JG51ntBEO4ekLQRpktxFTwUHy24a86zD/Oi2BRTKksEdfWQZcQFqzjqIkPig==} + jasmine-reporters@2.5.2: dependencies: '@xmldom/xmldom': 0.8.10 mkdirp: 1.0.4 - dev: true - /jasmine-spec-reporter@7.0.0: - resolution: {integrity: sha512-OtC7JRasiTcjsaCBPtMO0Tl8glCejM4J4/dNuOJdA8lBjz4PmWjYQ6pzb0uzpBNAWJMDudYuj9OdXJWqM2QTJg==} + jasmine-spec-reporter@7.0.0: dependencies: colors: 1.4.0 - dev: true - /jasmine@2.8.0: - resolution: {integrity: sha512-KbdGQTf5jbZgltoHs31XGiChAPumMSY64OZMWLNYnEnMfG5uwGBhffePwuskexjT+/Jea/gU3qAU8344hNohSw==} - hasBin: true + jasmine@2.8.0: dependencies: exit: 0.1.2 glob: 7.2.3 jasmine-core: 2.8.0 - dev: true - /jasmine@5.5.0: - resolution: {integrity: sha512-JKlEVCVD5QBPYLsg/VE+IUtjyseDCrW8rMBu8la+9ysYashDgavMLM9Kotls1FhI6dCJLJ40dBCIfQjGLPZI1Q==} - hasBin: true + jasmine@5.6.0: dependencies: glob: 10.4.5 - jasmine-core: 5.5.0 - dev: true + jasmine-core: 5.6.0 - /jasminewd2@2.2.0: - resolution: {integrity: sha512-Rn0nZe4rfDhzA63Al3ZGh0E+JTmM6ESZYXJGKuqKGZObsAB9fwXPD03GjtIEvJBDOhN94T5MzbwZSqzFHSQPzg==} - engines: {node: '>= 6.9.x'} - dev: true + jasminewd2@2.2.0: {} - /jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} + jest-worker@27.5.1: dependencies: - '@types/node': 22.10.5 + '@types/node': 18.19.76 merge-stream: 2.0.0 supports-color: 8.1.1 - dev: true - /jiti@1.21.7: - resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} - hasBin: true - dev: true + jiti@1.21.7: {} - /jju@1.4.0: - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - dev: true + jju@1.4.0: {} - /js-base64@3.7.7: - resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} - dev: true + js-base64@3.7.7: {} - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - dev: true + js-tokens@4.0.0: {} - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - dev: true - /jsbn@0.1.1: - resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} - dev: true + jsbn@0.1.1: {} - /jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - dev: true + jsbn@1.1.0: {} - /jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - dev: true + jsesc@3.0.2: {} - /jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - dev: true + jsesc@3.1.0: {} - /json-bigint@1.0.0: - resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + json-bigint@1.0.0: dependencies: bignumber.js: 9.1.2 - dev: true - - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true + json-buffer@3.0.1: {} - /json-parse-even-better-errors@4.0.0: - resolution: {integrity: sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==} - engines: {node: ^18.17.0 || >=20.5.0} - dev: true + json-parse-even-better-errors@2.3.1: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + json-parse-even-better-errors@4.0.0: {} - /json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - dev: true + json-schema-traverse@0.4.1: {} - /json-schema@0.4.0: - resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} - dev: true + json-schema-traverse@1.0.0: {} - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true + json-schema@0.4.0: {} - /json-stable-stringify@1.2.1: - resolution: {integrity: sha512-Lp6HbbBgosLmJbjx0pBLbgvx68FaFU1sdkmBuckmhhJ88kL13OA51CDtR2yJB50eCNMH9wRqtQNNiAqQH4YXnA==} - engines: {node: '>= 0.4'} - dependencies: - call-bind: 1.0.8 - call-bound: 1.0.3 - isarray: 2.0.5 - jsonify: 0.0.1 - object-keys: 1.1.1 - dev: true + json-stable-stringify-without-jsonify@1.0.1: {} - /json-stringify-safe@5.0.1: - resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} - dev: true + json-stringify-safe@5.0.1: {} - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true + json5@1.0.2: dependencies: minimist: 1.2.8 - dev: true - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: true + json5@2.2.3: {} - /jsonc-parser@3.3.1: - resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} - dev: true + jsonc-parser@3.3.1: {} - /jsonfile@3.0.1: - resolution: {integrity: sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==} + jsonfile@3.0.1: optionalDependencies: graceful-fs: 4.2.11 - dev: true - /jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 - dev: true - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.1.0: dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - dev: true - /jsonify@0.0.1: - resolution: {integrity: sha512-2/Ki0GcmuqSrgFyelQq9M05y7PS0mEwuIzrf3f1fPqkVDVRvZrPZtVSMHxdgo8Aq0sxAOb/cr2aqqA3LeWHVPg==} - dev: true - - /jsonparse@1.3.1: - resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} - engines: {'0': node >= 0.2.0} - dev: true + jsonparse@1.3.1: {} - /jsonwebtoken@9.0.2: - resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} - engines: {node: '>=12', npm: '>=6'} + jsonwebtoken@9.0.2: dependencies: jws: 3.2.2 lodash.includes: 4.3.0 @@ -10000,77 +14026,56 @@ packages: lodash.isstring: 4.0.1 lodash.once: 4.1.1 ms: 2.1.3 - semver: 7.6.3 - dev: true + semver: 7.7.1 - /jsprim@1.4.2: - resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} - engines: {node: '>=0.6.0'} + jsprim@1.4.2: dependencies: assert-plus: 1.0.0 extsprintf: 1.3.0 json-schema: 0.4.0 verror: 1.10.0 - dev: true - /jsprim@2.0.2: - resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} - engines: {'0': node >=0.6.0} + jsprim@2.0.2: dependencies: assert-plus: 1.0.0 extsprintf: 1.3.0 json-schema: 0.4.0 verror: 1.10.0 - dev: true - /jszip@3.10.1: - resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + jszip@3.10.1: dependencies: lie: 3.3.0 pako: 1.0.11 readable-stream: 2.3.8 setimmediate: 1.0.5 - dev: true - /jwa@1.4.1: - resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + jwa@1.4.1: dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - dev: true - /jwa@2.0.0: - resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} + jwa@2.0.0: dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 safe-buffer: 5.2.1 - dev: true - /jws@3.2.2: - resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + jws@3.2.2: dependencies: jwa: 1.4.1 safe-buffer: 5.2.1 - dev: true - /jws@4.0.0: - resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} + jws@4.0.0: dependencies: jwa: 2.0.0 safe-buffer: 5.2.1 - dev: true - /karma-chrome-launcher@3.2.0: - resolution: {integrity: sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==} + karma-chrome-launcher@3.2.0: dependencies: which: 1.3.1 - dev: true - /karma-coverage@2.2.1: - resolution: {integrity: sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==} - engines: {node: '>=10.0.0'} + karma-coverage@2.2.1: dependencies: istanbul-lib-coverage: 3.2.2 istanbul-lib-instrument: 5.2.1 @@ -10080,74 +14085,23 @@ packages: minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true - /karma-firefox-launcher@2.1.3: - resolution: {integrity: sha512-LMM2bseebLbYjODBOVt7TCPP9OI2vZIXCavIXhkO9m+10Uj5l7u/SKoeRmYx8FYHTVGZSpk6peX+3BMHC1WwNw==} - dependencies: - is-wsl: 2.2.0 - which: 3.0.1 - dev: true - - /karma-jasmine-html-reporter@2.1.0(jasmine-core@5.5.0)(karma-jasmine@5.1.0)(karma@6.4.4): - resolution: {integrity: sha512-sPQE1+nlsn6Hwb5t+HHwyy0A1FNCVKuL1192b+XNauMYWThz2kweiBVW1DqloRpVvZIJkIoHVB7XRpK78n1xbQ==} - peerDependencies: - jasmine-core: ^4.0.0 || ^5.0.0 - karma: ^6.0.0 - karma-jasmine: ^5.0.0 + karma-jasmine-html-reporter@2.1.0(jasmine-core@5.6.0)(karma-jasmine@5.1.0(karma@6.4.4(debug@4.4.0)))(karma@6.4.4(debug@4.4.0)): dependencies: - jasmine-core: 5.5.0 + jasmine-core: 5.6.0 karma: 6.4.4(debug@4.4.0) - karma-jasmine: 5.1.0(karma@6.4.4) - dev: true + karma-jasmine: 5.1.0(karma@6.4.4(debug@4.4.0)) - /karma-jasmine@5.1.0(karma@6.4.4): - resolution: {integrity: sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==} - engines: {node: '>=12'} - peerDependencies: - karma: ^6.0.0 + karma-jasmine@5.1.0(karma@6.4.4(debug@4.4.0)): dependencies: jasmine-core: 4.6.1 karma: 6.4.4(debug@4.4.0) - dev: true - - /karma-junit-reporter@2.0.1(karma@6.4.4): - resolution: {integrity: sha512-VtcGfE0JE4OE1wn0LK8xxDKaTP7slN8DO3I+4xg6gAi1IoAHAXOJ1V9G/y45Xg6sxdxPOR3THCFtDlAfBo9Afw==} - engines: {node: '>= 8'} - peerDependencies: - karma: '>=0.9' - dependencies: - karma: 6.4.4(debug@4.4.0) - path-is-absolute: 1.0.1 - xmlbuilder: 12.0.0 - dev: true - - /karma-requirejs@1.1.0(karma@6.4.4)(requirejs@2.3.7): - resolution: {integrity: sha512-MHTOYKdwwJBkvYid0TaYvBzOnFH3TDtzo6ie5E4o9SaUSXXsfMRLa/whUz6efVIgTxj1xnKYasNn/XwEgJeB/Q==} - peerDependencies: - karma: '>=0.9' - requirejs: ^2.1.0 - dependencies: - karma: 6.4.4(debug@4.4.0) - requirejs: 2.3.7 - dev: true - /karma-source-map-support@1.4.0: - resolution: {integrity: sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==} + karma-source-map-support@1.4.0: dependencies: source-map-support: 0.5.21 - dev: true - - /karma-sourcemap-loader@0.4.0: - resolution: {integrity: sha512-xCRL3/pmhAYF3I6qOrcn0uhbQevitc2DERMPH82FMnG+4WReoGcGFZb1pURf2a5apyrOHRdvD+O6K7NljqKHyA==} - dependencies: - graceful-fs: 4.2.11 - dev: true - /karma@6.4.4(debug@4.4.0): - resolution: {integrity: sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==} - engines: {node: '>= 10'} - hasBin: true + karma@6.4.4(debug@4.4.0): dependencies: '@colors/colors': 1.5.0 body-parser: 1.20.3 @@ -10178,79 +14132,46 @@ packages: - debug - supports-color - utf-8-validate - dev: true - /keygrip@1.1.0: - resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} - engines: {node: '>= 0.6'} + keygrip@1.1.0: dependencies: tsscmp: 1.0.6 - dev: true - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 - dev: true - /kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - dev: true - - /klaw-sync@6.0.0: - resolution: {integrity: sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==} - dependencies: - graceful-fs: 4.2.11 - dev: true + kind-of@6.0.3: {} - /kleur@4.1.5: - resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} - engines: {node: '>=6'} - dev: true + kleur@4.1.5: {} - /koa-compose@4.1.0: - resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} - dev: true + koa-compose@4.1.0: {} - /koa-convert@2.0.0: - resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==} - engines: {node: '>= 10'} + koa-convert@2.0.0: dependencies: co: 4.6.0 koa-compose: 4.1.0 - dev: true - /koa-etag@4.0.0: - resolution: {integrity: sha512-1cSdezCkBWlyuB9l6c/IFoe1ANCDdPBxkDkRiaIup40xpUub6U/wwRXoKBZw/O5BifX9OlqAjYnDyzM6+l+TAg==} + koa-etag@4.0.0: dependencies: etag: 1.8.1 - dev: true - /koa-send@5.0.1: - resolution: {integrity: sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==} - engines: {node: '>= 8'} + koa-send@5.0.1: dependencies: debug: 4.4.0(supports-color@10.0.0) http-errors: 1.8.1 resolve-path: 1.4.0 transitivePeerDependencies: - supports-color - dev: true - /koa-static@5.0.0: - resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==} - engines: {node: '>= 7.6.0'} + koa-static@5.0.0: dependencies: debug: 3.2.7 koa-send: 5.0.1 transitivePeerDependencies: - supports-color - dev: true - /koa@2.15.3: - resolution: {integrity: sha512-j/8tY9j5t+GVMLeioLaxweJiKUayFhlGqNTzf2ZGwL0ZCQijd2RLHK0SLW5Tsko8YyyqCZC2cojIb0/s62qTAg==} - engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} + koa@2.16.0: dependencies: accepts: 1.3.8 cache-content-type: 1.0.1 @@ -10277,36 +14198,19 @@ packages: vary: 1.1.2 transitivePeerDependencies: - supports-color - dev: true - /launch-editor@2.9.1: - resolution: {integrity: sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==} + launch-editor@2.10.0: dependencies: picocolors: 1.1.1 shell-quote: 1.8.2 - dev: true - /less-loader@12.2.0(less@4.2.1)(webpack@5.97.1): - resolution: {integrity: sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - less: ^3.5.0 || ^4.0.0 - webpack: ^5.0.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - webpack: - optional: true + less-loader@12.2.0(less@4.2.2)(webpack@5.98.0(esbuild@0.25.1)): dependencies: - less: 4.2.1 - webpack: 5.97.1(esbuild@0.24.2) - dev: true + less: 4.2.2 + optionalDependencies: + webpack: 5.98.0(esbuild@0.25.1) - /less@4.2.1: - resolution: {integrity: sha512-CasaJidTIhWmjcqv0Uj5vccMI7pJgfD9lMkKtlnTHAdJdYK/7l8pM9tumLyJ0zhbD4KJLo/YvTj+xznQd5NBhg==} - engines: {node: '>=6'} - hasBin: true + less@4.2.2: dependencies: copy-anything: 2.0.6 parse-node-version: 1.0.1 @@ -10319,54 +14223,34 @@ packages: mime: 1.6.0 needle: 3.3.1 source-map: 0.6.1 - dev: true - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /license-webpack-plugin@4.0.2(webpack@5.97.1): - resolution: {integrity: sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==} - peerDependencies: - webpack: '*' - peerDependenciesMeta: - webpack: - optional: true + license-webpack-plugin@4.0.2(webpack@5.98.0(esbuild@0.25.1)): dependencies: - webpack: 5.97.1(esbuild@0.24.2) webpack-sources: 3.2.3 - dev: true + optionalDependencies: + webpack: 5.98.0(esbuild@0.25.1) - /lie@3.3.0: - resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + lie@3.3.0: dependencies: immediate: 3.0.6 - dev: true - /lighthouse-logger@1.4.2: - resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==} + lighthouse-logger@1.4.2: dependencies: debug: 2.6.9 marky: 1.2.5 transitivePeerDependencies: - supports-color - dev: true - /limiter@1.1.5: - resolution: {integrity: sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==} - dev: true + limiter@1.1.5: {} - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true + lines-and-columns@1.2.4: {} - /listr2@8.2.5: - resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} - engines: {node: '>=18.0.0'} + listr2@8.2.5: dependencies: cli-truncate: 4.0.0 colorette: 2.0.20 @@ -10374,11 +14258,8 @@ packages: log-update: 6.1.0 rfdc: 1.4.1 wrap-ansi: 9.0.0 - dev: true - /lmdb@3.2.0: - resolution: {integrity: sha512-cDeZAM4mXOwN1IdH93a91qXppn4jXV4NHphg53bqQDRFjJnpYZTgGcjrqpsmm209DtXTvmKMcYJd+XrHybwFZg==} - hasBin: true + lmdb@3.2.6: dependencies: msgpackr: 1.11.2 node-addon-api: 6.1.0 @@ -10386,267 +14267,148 @@ packages: ordered-binary: 1.5.3 weak-lru-cache: 1.2.2 optionalDependencies: - '@lmdb/lmdb-darwin-arm64': 3.2.0 - '@lmdb/lmdb-darwin-x64': 3.2.0 - '@lmdb/lmdb-linux-arm': 3.2.0 - '@lmdb/lmdb-linux-arm64': 3.2.0 - '@lmdb/lmdb-linux-x64': 3.2.0 - '@lmdb/lmdb-win32-x64': 3.2.0 - dev: true - optional: true + '@lmdb/lmdb-darwin-arm64': 3.2.6 + '@lmdb/lmdb-darwin-x64': 3.2.6 + '@lmdb/lmdb-linux-arm': 3.2.6 + '@lmdb/lmdb-linux-arm64': 3.2.6 + '@lmdb/lmdb-linux-x64': 3.2.6 + '@lmdb/lmdb-win32-x64': 3.2.6 - /lmdb@3.2.2: - resolution: {integrity: sha512-LriG93la4PbmPMwI7Hbv8W+0ncLK7549w4sbZSi4QGDjnnxnmNMgxUkaQTEMzH8TpwsfFvgEjpLX7V8B/I9e3g==} - hasBin: true - dependencies: - msgpackr: 1.11.2 - node-addon-api: 6.1.0 - node-gyp-build-optional-packages: 5.2.2 - ordered-binary: 1.5.3 - weak-lru-cache: 1.2.2 - optionalDependencies: - '@lmdb/lmdb-darwin-arm64': 3.2.2 - '@lmdb/lmdb-darwin-x64': 3.2.2 - '@lmdb/lmdb-linux-arm': 3.2.2 - '@lmdb/lmdb-linux-arm64': 3.2.2 - '@lmdb/lmdb-linux-x64': 3.2.2 - '@lmdb/lmdb-win32-x64': 3.2.2 - dev: true - - /loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} - engines: {node: '>=6.11.5'} - dev: true + loader-runner@4.3.0: {} - /loader-utils@2.0.4: - resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} - engines: {node: '>=8.9.0'} + loader-utils@2.0.4: dependencies: big.js: 5.2.2 emojis-list: 3.0.0 json5: 2.2.3 - dev: true - /loader-utils@3.3.1: - resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} - engines: {node: '>= 12.13.0'} - dev: true + loader-utils@3.3.1: {} - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + locate-path@5.0.0: dependencies: p-locate: 4.1.0 - dev: true - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - /locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + locate-path@7.2.0: dependencies: p-locate: 6.0.0 - dev: true - /lockfile@1.0.4: - resolution: {integrity: sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==} + lockfile@1.0.4: dependencies: signal-exit: 3.0.7 - dev: true - /lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - dev: true + lodash.camelcase@4.3.0: {} - /lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - dev: true + lodash.debounce@4.0.8: {} - /lodash.includes@4.3.0: - resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} - dev: true + lodash.includes@4.3.0: {} - /lodash.isboolean@3.0.3: - resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} - dev: true + lodash.isboolean@3.0.3: {} - /lodash.isfinite@3.3.2: - resolution: {integrity: sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==} - dev: true + lodash.isfinite@3.3.2: {} - /lodash.isinteger@4.0.4: - resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} - dev: true + lodash.isinteger@4.0.4: {} - /lodash.isnumber@3.0.3: - resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} - dev: true + lodash.isnumber@3.0.3: {} - /lodash.isplainobject@4.0.6: - resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} - dev: true + lodash.isplainobject@4.0.6: {} - /lodash.isstring@4.0.1: - resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} - dev: true + lodash.isstring@4.0.1: {} - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true + lodash.merge@4.6.2: {} - /lodash.once@4.1.1: - resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} - dev: true + lodash.once@4.1.1: {} - /lodash.snakecase@4.1.1: - resolution: {integrity: sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==} - dev: true + lodash.snakecase@4.1.1: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true + lodash@4.17.21: {} - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + log-symbols@4.1.0: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - dev: true - /log-update@4.0.0: - resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} - engines: {node: '>=10'} + log-update@4.0.0: dependencies: ansi-escapes: 4.3.2 cli-cursor: 3.1.0 slice-ansi: 4.0.0 wrap-ansi: 6.2.0 - dev: true - /log-update@6.1.0: - resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} - engines: {node: '>=18'} + log-update@6.1.0: dependencies: 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 - dev: true - /log4js@6.9.1: - resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==} - engines: {node: '>=8.0'} + log4js@6.9.1: dependencies: date-format: 4.0.14 debug: 4.4.0(supports-color@10.0.0) - flatted: 3.3.2 + flatted: 3.3.3 rfdc: 1.4.1 streamroller: 3.1.5 transitivePeerDependencies: - supports-color - dev: true - /long@4.0.0: - resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} - dev: true + long@4.0.0: {} - /long@5.2.3: - resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} - dev: true + long@5.3.1: {} - /lowdb@1.0.0: - resolution: {integrity: sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==} - engines: {node: '>=4'} + lowdb@1.0.0: dependencies: graceful-fs: 4.2.11 is-promise: 2.2.2 lodash: 4.17.21 pify: 3.0.0 steno: 0.4.4 - dev: true - /lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - dev: true + lru-cache@10.4.3: {} - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 - dev: true - /lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} + lru-cache@6.0.0: dependencies: yallist: 4.0.0 - dev: true - /lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - dev: true - - /lru-cache@8.0.5: - resolution: {integrity: sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==} - engines: {node: '>=16.14'} - dev: true + lru-cache@7.18.3: {} - /magic-string@0.30.15: - resolution: {integrity: sha512-zXeaYRgZ6ldS1RJJUrMrYgNJ4fdwnyI6tVqoiIhyCyv5IVTK9BU8Ic2l253GGETQHxI4HNUwhJ3fjDhKqEoaAw==} - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - dev: true + lru-cache@8.0.5: {} - /magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.17: dependencies: '@jridgewell/sourcemap-codec': 1.5.0 - dev: true - /make-dir@2.1.0: - resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} - engines: {node: '>=6'} + make-dir@2.1.0: dependencies: pify: 4.0.1 semver: 5.7.2 - dev: true optional: true - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} + make-dir@3.1.0: dependencies: semver: 6.3.1 - dev: true - /make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} + make-dir@4.0.0: dependencies: - semver: 7.6.3 - dev: true + semver: 7.7.1 - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true + make-error@1.3.6: {} - /make-fetch-happen@14.0.3: - resolution: {integrity: sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==} - engines: {node: ^18.17.0 || >=20.5.0} + make-fetch-happen@14.0.3: dependencies: '@npmcli/agent': 3.0.0 cacache: 19.0.1 http-cache-semantics: 4.1.1 minipass: 7.1.2 - minipass-fetch: 4.0.0 + minipass-fetch: 4.0.1 minipass-flush: 1.0.5 minipass-pipeline: 1.2.4 negotiator: 1.0.0 @@ -10655,271 +14417,142 @@ packages: ssri: 12.0.0 transitivePeerDependencies: - supports-color - dev: true - /marky@1.2.5: - resolution: {integrity: sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==} - dev: true + marky@1.2.5: {} - /math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - dev: true + math-intrinsics@1.1.0: {} - /media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - dev: true + media-typer@0.3.0: {} - /memfs@4.15.3: - resolution: {integrity: sha512-vR/g1SgqvKJgAyYla+06G4p/EOcEmwhYuVb1yc1ixcKf8o/sh7Zngv63957ZSNd1xrZJoinmNyDf2LzuP8WJXw==} - engines: {node: '>= 4.0.0'} + memfs@4.17.0: dependencies: - '@jsonjoy.com/json-pack': 1.1.1(tslib@2.8.1) + '@jsonjoy.com/json-pack': 1.2.0(tslib@2.8.1) '@jsonjoy.com/util': 1.5.0(tslib@2.8.1) tree-dump: 1.0.2(tslib@2.8.1) tslib: 2.8.1 - dev: true - /merge-descriptors@1.0.3: - resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} - dev: true + merge-descriptors@1.0.3: {} - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + merge-stream@2.0.0: {} - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + merge2@1.4.1: {} - /methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - dev: true + methods@1.1.2: {} - /micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 - dev: true - /mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - dev: true + mime-db@1.52.0: {} - /mime-db@1.53.0: - resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} - engines: {node: '>= 0.6'} - dev: true + mime-db@1.53.0: {} - /mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} + mime-types@2.1.35: dependencies: mime-db: 1.52.0 - dev: true - /mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - dev: true + mime@1.6.0: {} - /mime@2.6.0: - resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} - engines: {node: '>=4.0.0'} - hasBin: true - dev: true + mime@2.6.0: {} - /mime@3.0.0: - resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} - engines: {node: '>=10.0.0'} - hasBin: true - dev: true + mime@3.0.0: {} - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true + mimic-fn@2.1.0: {} - /mimic-function@5.0.1: - resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} - engines: {node: '>=18'} - dev: true + mimic-function@5.0.1: {} - /mini-css-extract-plugin@2.9.2(webpack@5.97.1): - resolution: {integrity: sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 + mini-css-extract-plugin@2.9.2(webpack@5.98.0(esbuild@0.25.1)): dependencies: schema-utils: 4.3.0 tapable: 2.2.1 - webpack: 5.97.1(esbuild@0.24.2) - dev: true + webpack: 5.98.0(esbuild@0.25.1) - /minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - dev: true + minimalistic-assert@1.0.1: {} - /minimatch@3.0.8: - resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} + minimatch@3.0.8: dependencies: brace-expansion: 1.1.11 - dev: true - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - dev: true - /minimatch@7.4.6: - resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==} - engines: {node: '>=10'} + minimatch@7.4.6: dependencies: brace-expansion: 2.0.1 - dev: true - /minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 - dev: true - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true + minimist@1.2.8: {} - /minipass-collect@2.0.1: - resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} - engines: {node: '>=16 || 14 >=14.17'} + minipass-collect@2.0.1: dependencies: minipass: 7.1.2 - dev: true - /minipass-fetch@4.0.0: - resolution: {integrity: sha512-2v6aXUXwLP1Epd/gc32HAMIWoczx+fZwEPRHm/VwtrJzRGwR1qGZXEYV3Zp8ZjjbwaZhMrM6uHV4KVkk+XCc2w==} - engines: {node: ^18.17.0 || >=20.5.0} + minipass-fetch@4.0.1: dependencies: minipass: 7.1.2 minipass-sized: 1.0.3 minizlib: 3.0.1 optionalDependencies: encoding: 0.1.13 - dev: true - /minipass-flush@1.0.5: - resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} - engines: {node: '>= 8'} + minipass-flush@1.0.5: dependencies: minipass: 3.3.6 - dev: true - /minipass-pipeline@1.2.4: - resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} - engines: {node: '>=8'} + minipass-pipeline@1.2.4: dependencies: minipass: 3.3.6 - dev: true - /minipass-sized@1.0.3: - resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} - engines: {node: '>=8'} + minipass-sized@1.0.3: dependencies: minipass: 3.3.6 - dev: true - /minipass@3.3.6: - resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} - engines: {node: '>=8'} + minipass@3.3.6: dependencies: yallist: 4.0.0 - dev: true - /minipass@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - dev: true + minipass@5.0.0: {} - /minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - dev: true + minipass@7.1.2: {} - /minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} + minizlib@2.1.2: dependencies: minipass: 3.3.6 yallist: 4.0.0 - dev: true - /minizlib@3.0.1: - resolution: {integrity: sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==} - engines: {node: '>= 18'} + minizlib@3.0.1: dependencies: minipass: 7.1.2 rimraf: 5.0.10 - dev: true - /mitt@1.2.0: - resolution: {integrity: sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==} - dev: true + mitt@1.2.0: {} - /mitt@3.0.1: - resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} - dev: true + mitt@3.0.1: {} - /mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - dev: true + mkdirp-classic@0.5.3: {} - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true + mkdirp@0.5.6: dependencies: minimist: 1.2.8 - dev: true - /mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - dev: true + mkdirp@1.0.4: {} - /mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - hasBin: true - dev: true + mkdirp@3.0.1: {} - /mrmime@2.0.0: - resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} - engines: {node: '>=10'} - dev: true + mrmime@2.0.1: {} - /ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - dev: true + ms@2.0.0: {} - /ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - dev: true + ms@2.1.2: {} - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true + ms@2.1.3: {} - /msgpackr-extract@3.0.3: - resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==} - hasBin: true + msgpackr-extract@3.0.3: dependencies: node-gyp-build-optional-packages: 5.2.2 optionalDependencies: @@ -10929,536 +14562,265 @@ packages: '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.3 '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.3 '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3 - dev: true optional: true - /msgpackr@1.11.2: - resolution: {integrity: sha512-F9UngXRlPyWCDEASDpTf6c9uNhGPTqnTeLVt7bN+bU1eajoR/8V9ys2BRaV5C/e5ihE6sJ9uPIKaYt6bFuO32g==} + msgpackr@1.11.2: optionalDependencies: msgpackr-extract: 3.0.3 - dev: true - /multicast-dns@7.2.5: - resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} - hasBin: true + multicast-dns@7.2.5: dependencies: dns-packet: 5.6.1 thunky: 1.1.0 - dev: true - /mute-stream@1.0.0: - resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + mute-stream@1.0.0: {} - /mute-stream@2.0.0: - resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} - engines: {node: ^18.17.0 || >=20.5.0} - dev: true + mute-stream@2.0.0: {} - /nanocolors@0.2.13: - resolution: {integrity: sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==} - dev: true + nanocolors@0.2.13: {} - /nanoid@3.3.8: - resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true + nanoid@3.3.9: {} - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true + natural-compare@1.4.0: {} - /needle@3.3.1: - resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} - engines: {node: '>= 4.4.x'} - hasBin: true + needle@3.3.1: dependencies: iconv-lite: 0.6.3 sax: 1.4.1 - dev: true optional: true - /negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - dev: true - - /negotiator@0.6.4: - resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} - engines: {node: '>= 0.6'} - dev: true + negotiator@0.6.3: {} - /negotiator@1.0.0: - resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} - engines: {node: '>= 0.6'} - dev: true + negotiator@0.6.4: {} - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: true + negotiator@1.0.0: {} - /netmask@2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} - engines: {node: '>= 0.4.0'} - dev: true + neo-async@2.6.2: {} - /ng-packagr@19.1.0-next.3(@angular/compiler-cli@19.1.0-rc.0)(tslib@2.8.1)(typescript@5.7.2): - resolution: {integrity: sha512-D/2axZFTpc0z/tH4Okgbc++0h6DnarNX0+aPWjDKAN3nPURpj6nrj997ee5GmBFeivcGu3gepVHoICAII7YOyg==} - engines: {node: ^18.19.1 || >=20.11.1} - hasBin: true - peerDependencies: - '@angular/compiler-cli': ^19.0.0 || ^19.1.0-next.0 - tailwindcss: ^2.0.0 || ^3.0.0 - tslib: ^2.3.0 - typescript: 5.7.2 - peerDependenciesMeta: - tailwindcss: - optional: true + netmask@2.0.2: {} + + ng-packagr@19.2.0(@angular/compiler-cli@19.2.0-rc.0(@angular/compiler@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.1-rc))(tslib@2.8.1)(typescript@5.8.1-rc): dependencies: - '@angular/compiler-cli': 19.1.0-rc.0(@angular/compiler@19.1.0-rc.0)(typescript@5.7.2) - '@rollup/plugin-json': 6.1.0(rollup@4.30.1) - '@rollup/wasm-node': 4.30.0 + '@angular/compiler-cli': 19.2.0-rc.0(@angular/compiler@19.2.0-rc.0(@angular/core@19.2.0-rc.0(rxjs@7.8.1)(zone.js@0.15.0)))(typescript@5.8.1-rc) + '@rollup/plugin-json': 6.1.0(rollup@4.34.8) + '@rollup/wasm-node': 4.35.0 ajv: 8.17.1 ansi-colors: 4.1.3 - browserslist: 4.24.3 + browserslist: 4.24.4 chokidar: 4.0.3 - commander: 13.0.0 + commander: 13.1.0 convert-source-map: 2.0.0 dependency-graph: 1.0.0 - esbuild: 0.24.2 + esbuild: 0.25.1 fast-glob: 3.3.3 find-cache-dir: 3.3.2 injection-js: 2.4.0 jsonc-parser: 3.3.1 - less: 4.2.1 + less: 4.2.2 ora: 5.4.1 piscina: 4.8.0 - postcss: 8.4.49 + postcss: 8.5.2 rxjs: 7.8.1 - sass: 1.83.1 + sass: 1.85.0 tslib: 2.8.1 - typescript: 5.7.2 + typescript: 5.8.1-rc optionalDependencies: - rollup: 4.30.1 - dev: true + rollup: 4.34.8 - /node-addon-api@6.1.0: - resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} - dev: true + node-addon-api@6.1.0: {} - /node-addon-api@7.1.1: - resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - dev: true + node-addon-api@7.1.1: optional: true - /node-domexception@1.0.0: - resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} - engines: {node: '>=10.5.0'} - dev: true + node-domexception@1.0.0: {} - /node-fetch-native@1.6.4: - resolution: {integrity: sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==} - dev: true + node-fetch-native@1.6.6: {} - /node-fetch@2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.6.7(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 - dev: true + optionalDependencies: + encoding: 0.1.13 - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true + node-fetch@2.7.0(encoding@0.1.13): dependencies: whatwg-url: 5.0.0 - dev: true + optionalDependencies: + encoding: 0.1.13 - /node-fetch@3.3.2: - resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + node-fetch@3.3.2: dependencies: data-uri-to-buffer: 4.0.1 fetch-blob: 3.2.0 formdata-polyfill: 4.0.10 - dev: true - /node-forge@1.3.1: - resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} - engines: {node: '>= 6.13.0'} - dev: true + node-forge@1.3.1: {} - /node-gyp-build-optional-packages@5.2.2: - resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} - hasBin: true + node-gyp-build-optional-packages@5.2.2: dependencies: detect-libc: 2.0.3 - dev: true - /node-gyp@11.0.0: - resolution: {integrity: sha512-zQS+9MTTeCMgY0F3cWPyJyRFAkVltQ1uXm+xXu/ES6KFgC6Czo1Seb9vQW2wNxSX2OrDTiqL0ojtkFxBQ0ypIw==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true + node-gyp@11.1.0: dependencies: env-paths: 2.2.1 - exponential-backoff: 3.1.1 + exponential-backoff: 3.1.2 glob: 10.4.5 graceful-fs: 4.2.11 make-fetch-happen: 14.0.3 - nopt: 8.0.0 + nopt: 8.1.0 proc-log: 5.0.0 - semver: 7.6.3 + semver: 7.7.1 tar: 7.4.3 which: 5.0.0 transitivePeerDependencies: - supports-color - dev: true - - /node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} - dev: true - /nopt@8.0.0: - resolution: {integrity: sha512-1L/fTJ4UmV/lUxT2Uf006pfZKTvAgCF+chz+0OgBHO8u2Z67pE7AaAUUj7CJy0lXqHmymUvGFt6NE9R3HER0yw==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true - dependencies: - abbrev: 2.0.0 - dev: true + node-releases@2.0.19: {} - /normalize-package-data@7.0.0: - resolution: {integrity: sha512-k6U0gKRIuNCTkwHGZqblCfLfBRh+w1vI6tBo+IeJwq2M8FUiOqhX7GH+GArQGScA7azd1WfyRCvxoXDO3hQDIA==} - engines: {node: ^18.17.0 || >=20.5.0} + nopt@8.1.0: dependencies: - hosted-git-info: 8.0.2 - semver: 7.6.3 - validate-npm-package-license: 3.0.4 - dev: true + abbrev: 3.0.0 - /normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-path@3.0.0: {} - /normalize-range@0.1.2: - resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} - engines: {node: '>=0.10.0'} - dev: true + normalize-range@0.1.2: {} - /npm-bundled@4.0.0: - resolution: {integrity: sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==} - engines: {node: ^18.17.0 || >=20.5.0} + npm-bundled@4.0.0: dependencies: npm-normalize-package-bin: 4.0.0 - dev: true - /npm-install-checks@7.1.1: - resolution: {integrity: sha512-u6DCwbow5ynAX5BdiHQ9qvexme4U3qHW3MWe5NqH+NeBm0LbiH6zvGjNNew1fY+AZZUtVHbOPF3j7mJxbUzpXg==} - engines: {node: ^18.17.0 || >=20.5.0} + npm-install-checks@7.1.1: dependencies: - semver: 7.6.3 - dev: true + semver: 7.7.1 - /npm-normalize-package-bin@4.0.0: - resolution: {integrity: sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==} - engines: {node: ^18.17.0 || >=20.5.0} - dev: true + npm-normalize-package-bin@4.0.0: {} - /npm-package-arg@12.0.1: - resolution: {integrity: sha512-aDxjFfPV3Liw0WOBWlyZLMBqtbgbg03rmGvHDJa2Ttv7tIz+1oB5qWec4psCDFZcZi9b5XdGkPdQiJxOPzvQRQ==} - engines: {node: ^18.17.0 || >=20.5.0} + npm-package-arg@12.0.2: dependencies: hosted-git-info: 8.0.2 proc-log: 5.0.0 - semver: 7.6.3 + semver: 7.7.1 validate-npm-package-name: 6.0.0 - dev: true - /npm-packlist@9.0.0: - resolution: {integrity: sha512-8qSayfmHJQTx3nJWYbbUmflpyarbLMBc6LCAjYsiGtXxDB68HaZpb8re6zeaLGxZzDuMdhsg70jryJe+RrItVQ==} - engines: {node: ^18.17.0 || >=20.5.0} + npm-packlist@9.0.0: dependencies: ignore-walk: 7.0.0 - dev: true - /npm-pick-manifest@10.0.0: - resolution: {integrity: sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==} - engines: {node: ^18.17.0 || >=20.5.0} + npm-pick-manifest@10.0.0: dependencies: npm-install-checks: 7.1.1 npm-normalize-package-bin: 4.0.0 - npm-package-arg: 12.0.1 - semver: 7.6.3 - dev: true + npm-package-arg: 12.0.2 + semver: 7.7.1 - /npm-registry-fetch@18.0.2: - resolution: {integrity: sha512-LeVMZBBVy+oQb5R6FDV9OlJCcWDU+al10oKpe+nsvcHnG24Z3uM3SvJYKfGJlfGjVU8v9liejCrUR/M5HO5NEQ==} - engines: {node: ^18.17.0 || >=20.5.0} + npm-registry-fetch@18.0.2: dependencies: - '@npmcli/redact': 3.0.0 + '@npmcli/redact': 3.1.1 jsonparse: 1.3.1 make-fetch-happen: 14.0.3 minipass: 7.1.2 - minipass-fetch: 4.0.0 + minipass-fetch: 4.0.1 minizlib: 3.0.1 - npm-package-arg: 12.0.1 + npm-package-arg: 12.0.2 proc-log: 5.0.0 transitivePeerDependencies: - supports-color - dev: true - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 - dev: true - /npm@11.0.0: - resolution: {integrity: sha512-Ed/ylWXSKXx058WUqXYlgb3pafCqXL5vWzZEvwCKFsBl7OYQlNn/u4ESW+ON+OG6Q+uCRLPTDGHreX6aJEDj7A==} - engines: {node: ^20.17.0 || >=22.9.0} - hasBin: true - dev: true - bundledDependencies: - - '@isaacs/string-locale-compare' - - '@npmcli/arborist' - - '@npmcli/config' - - '@npmcli/fs' - - '@npmcli/map-workspaces' - - '@npmcli/package-json' - - '@npmcli/promise-spawn' - - '@npmcli/redact' - - '@npmcli/run-script' - - '@sigstore/tuf' - - abbrev - - archy - - cacache - - chalk - - ci-info - - cli-columns - - fastest-levenshtein - - fs-minipass - - glob - - graceful-fs - - hosted-git-info - - ini - - init-package-json - - is-cidr - - json-parse-even-better-errors - - libnpmaccess - - libnpmdiff - - libnpmexec - - libnpmfund - - libnpmorg - - libnpmpack - - libnpmpublish - - libnpmsearch - - libnpmteam - - libnpmversion - - make-fetch-happen - - minimatch - - minipass - - minipass-pipeline - - ms - - node-gyp - - nopt - - normalize-package-data - - npm-audit-report - - npm-install-checks - - npm-package-arg - - npm-pick-manifest - - npm-profile - - npm-registry-fetch - - npm-user-validate - - p-map - - pacote - - parse-conflict-json - - proc-log - - qrcode-terminal - - read - - semver - - spdx-expression-parse - - ssri - - supports-color - - tar - - text-table - - tiny-relative-date - - treeverse - - validate-npm-package-name - - which + npm@10.9.2: {} - /nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nth-check@2.1.1: dependencies: boolbase: 1.0.0 - dev: true - /oauth-sign@0.9.0: - resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} - dev: true + oauth-sign@0.9.0: {} - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true + object-assign@4.1.1: {} - /object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - dev: true + object-hash@3.0.0: {} - /object-inspect@1.13.3: - resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==} - engines: {node: '>= 0.4'} - dev: true + object-inspect@1.13.4: {} - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true + object-keys@1.1.1: {} - /object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} + object.assign@4.1.7: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 has-symbols: 1.1.0 object-keys: 1.1.1 - dev: true - /object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} + object.fromentries@2.0.8: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.9 - es-object-atoms: 1.0.0 - dev: true + es-object-atoms: 1.1.1 - /object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} + object.groupby@1.0.3: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 es-abstract: 1.23.9 - dev: true - /object.values@1.2.1: - resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} - engines: {node: '>= 0.4'} + object.values@1.2.1: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 - es-object-atoms: 1.0.0 - dev: true + es-object-atoms: 1.1.1 - /obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - dev: true + obuf@1.1.2: {} - /on-exit-leak-free@2.1.2: - resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} - engines: {node: '>=14.0.0'} - dev: true + on-exit-leak-free@2.1.2: {} - /on-finished@2.3.0: - resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} - engines: {node: '>= 0.8'} + on-finished@2.3.0: dependencies: ee-first: 1.1.1 - dev: true - /on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} + on-finished@2.4.1: dependencies: ee-first: 1.1.1 - dev: true - /on-headers@1.0.2: - resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} - engines: {node: '>= 0.8'} - dev: true + on-headers@1.0.2: {} - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - dev: true - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 - dev: true - /onetime@7.0.0: - resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} - engines: {node: '>=18'} + onetime@7.0.0: dependencies: mimic-function: 5.0.1 - dev: true - /only@0.0.2: - resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} - dev: true + only@0.0.2: {} - /open@10.1.0: - resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} - engines: {node: '>=18'} + open@10.1.0: dependencies: default-browser: 5.2.1 define-lazy-prop: 3.0.0 is-inside-container: 1.0.0 is-wsl: 3.1.0 - dev: true - - /open@7.4.2: - resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} - engines: {node: '>=8'} - dependencies: - is-docker: 2.2.1 - is-wsl: 2.2.0 - dev: true - /open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 - dev: true - /opn@5.3.0: - resolution: {integrity: sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==} - engines: {node: '>=4'} + opn@5.3.0: dependencies: is-wsl: 1.1.0 - dev: true - /optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} + optionator@0.9.4: dependencies: deep-is: 0.1.4 fast-levenshtein: 2.0.6 @@ -11466,11 +14828,8 @@ packages: prelude-ls: 1.2.1 type-check: 0.4.0 word-wrap: 1.2.5 - dev: true - /ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} + ora@5.4.1: dependencies: bl: 4.1.0 chalk: 4.1.2 @@ -11481,117 +14840,67 @@ packages: log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 - dev: true - /ordered-binary@1.5.3: - resolution: {integrity: sha512-oGFr3T+pYdTGJ+YFEILMpS3es+GiIbs9h/XQrclBXUtd44ey7XwfsMzM31f64I1SQOawDoDr/D823kNCADI8TA==} - dev: true + ordered-binary@1.5.3: {} - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: true + os-tmpdir@1.0.2: {} - /own-keys@1.0.1: - resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} - engines: {node: '>= 0.4'} + own-keys@1.0.1: dependencies: - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 object-keys: 1.1.1 safe-push-apply: 1.0.0 - dev: true - /p-event@4.2.0: - resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} - engines: {node: '>=8'} + p-event@4.2.0: dependencies: p-timeout: 3.2.0 - dev: true - /p-finally@1.0.0: - resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} - engines: {node: '>=4'} - dev: true + p-finally@1.0.0: {} - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + p-limit@2.3.0: dependencies: p-try: 2.2.0 - dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - /p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-limit@4.0.0: dependencies: - yocto-queue: 1.1.1 - dev: true + yocto-queue: 1.2.0 - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + p-locate@4.1.0: dependencies: p-limit: 2.3.0 - dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-locate@6.0.0: dependencies: p-limit: 4.0.0 - dev: true - /p-map@7.0.3: - resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} - engines: {node: '>=18'} - dev: true + p-map@7.0.3: {} - /p-queue@6.6.2: - resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} - engines: {node: '>=8'} + p-queue@6.6.2: dependencies: eventemitter3: 4.0.7 p-timeout: 3.2.0 - dev: true - /p-retry@6.2.1: - resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==} - engines: {node: '>=16.17'} + p-retry@6.2.1: dependencies: '@types/retry': 0.12.2 is-network-error: 1.1.0 retry: 0.13.1 - dev: true - /p-timeout@3.2.0: - resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} - engines: {node: '>=8'} + p-timeout@3.2.0: dependencies: p-finally: 1.0.0 - dev: true - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true + p-try@2.2.0: {} - /pac-proxy-agent@7.1.0: - resolution: {integrity: sha512-Z5FnLVVZSnX7WjBg0mhDtydeRZ1xMcATZThjySQUHqr+0ksP8kqaw23fNKkaaN/Z8gwLUs/W7xdl0I75eP2Xyw==} - engines: {node: '>= 14'} + pac-proxy-agent@7.2.0: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.3 @@ -11603,260 +14912,137 @@ packages: socks-proxy-agent: 8.0.5 transitivePeerDependencies: - supports-color - dev: true - /pac-resolver@7.0.1: - resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} - engines: {node: '>= 14'} + pac-resolver@7.0.1: dependencies: degenerator: 5.0.1 netmask: 2.0.2 - dev: true - /package-json-from-dist@1.0.1: - resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} - dev: true + package-json-from-dist@1.0.1: {} - /pacote@20.0.0: - resolution: {integrity: sha512-pRjC5UFwZCgx9kUFDVM9YEahv4guZ1nSLqwmWiLUnDbGsjs+U5w7z6Uc8HNR1a6x8qnu5y9xtGE6D1uAuYz+0A==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true + pacote@20.0.0: dependencies: - '@npmcli/git': 6.0.1 + '@npmcli/git': 6.0.3 '@npmcli/installed-package-contents': 3.0.0 - '@npmcli/package-json': 6.1.0 + '@npmcli/package-json': 6.1.1 '@npmcli/promise-spawn': 8.0.2 - '@npmcli/run-script': 9.0.2 + '@npmcli/run-script': 9.1.0 cacache: 19.0.1 fs-minipass: 3.0.3 minipass: 7.1.2 - npm-package-arg: 12.0.1 + npm-package-arg: 12.0.2 npm-packlist: 9.0.0 npm-pick-manifest: 10.0.0 npm-registry-fetch: 18.0.2 proc-log: 5.0.0 promise-retry: 2.0.1 - sigstore: 3.0.0 + sigstore: 3.1.0 ssri: 12.0.0 tar: 6.2.1 transitivePeerDependencies: - - bluebird - supports-color - dev: true - /pako@0.2.9: - resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} - dev: true + pako@0.2.9: {} - /pako@1.0.11: - resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} - dev: true + pako@1.0.11: {} - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + parent-module@1.0.1: dependencies: callsites: 3.1.0 - dev: true - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.26.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true - /parse-node-version@1.0.1: - resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} - engines: {node: '>= 0.10'} - dev: true + parse-node-version@1.0.1: {} - /parse5-html-rewriting-stream@7.0.0: - resolution: {integrity: sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==} + parse5-html-rewriting-stream@7.0.0: dependencies: entities: 4.5.0 parse5: 7.2.1 parse5-sax-parser: 7.0.0 - dev: true - /parse5-sax-parser@7.0.0: - resolution: {integrity: sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==} + parse5-sax-parser@7.0.0: dependencies: parse5: 7.2.1 - dev: true - /parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - dev: true + parse5@6.0.1: {} - /parse5@7.2.1: - resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + parse5@7.2.1: dependencies: entities: 4.5.0 - dev: true - - /parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - dev: true - - /patch-package@8.0.0: - resolution: {integrity: sha512-da8BVIhzjtgScwDJ2TtKsfT5JFWz1hYoBl9rUQ1f38MC2HwnEIkK8VN3dKMKcP7P7bvvgzNDbfNHtx3MsQb5vA==} - engines: {node: '>=14', npm: '>5'} - hasBin: true - dependencies: - '@yarnpkg/lockfile': 1.1.0 - chalk: 4.1.2 - ci-info: 3.9.0 - cross-spawn: 7.0.6 - find-yarn-workspace-root: 2.0.0 - fs-extra: 9.1.0 - json-stable-stringify: 1.2.1 - klaw-sync: 6.0.0 - minimist: 1.2.8 - open: 7.4.2 - rimraf: 2.7.1 - semver: 7.6.3 - slash: 2.0.0 - tmp: 0.0.33 - yaml: 2.7.0 - dev: true - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + parseurl@1.3.3: {} - /path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + path-exists@4.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + path-exists@5.0.0: {} - /path-is-inside@1.0.2: - resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} - dev: true + path-is-absolute@1.0.1: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true + path-is-inside@1.0.2: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true + path-key@3.1.1: {} - /path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} + path-parse@1.0.7: {} + + path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 minipass: 7.1.2 - dev: true - /path-to-regexp@0.1.12: - resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} - dev: true + path-to-regexp@0.1.12: {} - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true + path-type@4.0.0: {} - /path-type@5.0.0: - resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} - engines: {node: '>=12'} - dev: true + path-type@6.0.0: {} - /pathe@1.1.2: - resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - dev: true + pathe@1.1.2: {} - /peek-stream@1.1.3: - resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} + peek-stream@1.1.3: dependencies: buffer-from: 1.1.2 duplexify: 3.7.1 through2: 2.0.5 - dev: true - /pend@1.2.0: - resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - dev: true + pend@1.2.0: {} - /performance-now@2.1.0: - resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} - dev: true + performance-now@2.1.0: {} - /picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - dev: true + picocolors@1.1.1: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picomatch@2.3.1: {} - /picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} - dev: true + picomatch@4.0.2: {} - /pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - dev: true + pify@2.3.0: {} - /pify@3.0.0: - resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} - engines: {node: '>=4'} - dev: true + pify@3.0.0: {} - /pify@4.0.1: - resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} - engines: {node: '>=6'} - dev: true + pify@4.0.1: optional: true - /pinkie-promise@2.0.1: - resolution: {integrity: sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==} - engines: {node: '>=0.10.0'} + pinkie-promise@2.0.1: dependencies: pinkie: 2.0.4 - dev: true - /pinkie@2.0.4: - resolution: {integrity: sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==} - engines: {node: '>=0.10.0'} - dev: true + pinkie@2.0.4: {} - /pino-abstract-transport@1.2.0: - resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} + pino-abstract-transport@1.2.0: dependencies: - readable-stream: 4.6.0 + readable-stream: 4.7.0 split2: 4.2.0 - dev: true - /pino-abstract-transport@2.0.0: - resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + pino-abstract-transport@2.0.0: dependencies: split2: 4.2.0 - dev: true - /pino-std-serializers@7.0.0: - resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} - dev: true + pino-std-serializers@7.0.0: {} - /pino@9.5.0: - resolution: {integrity: sha512-xSEmD4pLnV54t0NOUN16yCl7RIB1c5UUOse5HSyEXtBp+FgFQyPeDutc+Q2ZO7/22vImV7VfEjH/1zV2QuqvYw==} - hasBin: true + pino@9.5.0: dependencies: atomic-sleep: 1.0.0 fast-redact: 3.5.0 @@ -11869,215 +15055,119 @@ packages: safe-stable-stringify: 2.5.0 sonic-boom: 4.2.0 thread-stream: 3.1.0 - dev: true - /piscina@4.8.0: - resolution: {integrity: sha512-EZJb+ZxDrQf3dihsUL7p42pjNyrNIFJCrRHPMgxu/svsj+P3xS3fuEWp7k2+rfsavfl1N0G29b1HGs7J0m8rZA==} + piscina@4.8.0: optionalDependencies: '@napi-rs/nice': 1.0.1 - dev: true - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} + pkg-dir@4.2.0: dependencies: find-up: 4.1.0 - dev: true - /pkg-dir@7.0.0: - resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} - engines: {node: '>=14.16'} + pkg-dir@7.0.0: dependencies: find-up: 6.3.0 - dev: true - /pkginfo@0.4.1: - resolution: {integrity: sha512-8xCNE/aT/EXKenuMDZ+xTVwkT8gsoHN2z/Q29l80u0ppGEXVvsKRzNMbtKhg8LS8k1tJLAHHylf6p4VFmP6XUQ==} - engines: {node: '>= 0.4.0'} - dev: true + pkginfo@0.4.1: {} - /pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - dev: true + pluralize@8.0.0: {} - /portfinder@1.0.32: - resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} - engines: {node: '>= 0.12.0'} + portfinder@1.0.33: dependencies: async: 2.6.4 debug: 3.2.7 mkdirp: 0.5.6 transitivePeerDependencies: - supports-color - dev: true - /portscanner@2.2.0: - resolution: {integrity: sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==} - engines: {node: '>=0.4', npm: '>=1.0.0'} + portscanner@2.2.0: dependencies: async: 2.6.4 is-number-like: 1.0.8 - dev: true - /possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - dev: true + possible-typed-array-names@1.1.0: {} - /postcss-loader@8.1.1(postcss@8.4.49)(typescript@5.7.2)(webpack@5.97.1): - resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - postcss: ^7.0.0 || ^8.0.1 - webpack: ^5.0.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - webpack: - optional: true + postcss-loader@8.1.1(postcss@8.5.2)(typescript@5.8.1-rc)(webpack@5.98.0(esbuild@0.25.1)): dependencies: - cosmiconfig: 9.0.0(typescript@5.7.2) + cosmiconfig: 9.0.0(typescript@5.8.1-rc) jiti: 1.21.7 - postcss: 8.4.49 - semver: 7.6.3 - webpack: 5.97.1(esbuild@0.24.2) + postcss: 8.5.2 + semver: 7.7.1 + optionalDependencies: + webpack: 5.98.0(esbuild@0.25.1) transitivePeerDependencies: - typescript - dev: true - /postcss-media-query-parser@0.2.3: - resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} - dev: true + postcss-media-query-parser@0.2.3: {} - /postcss-modules-extract-imports@3.1.0(postcss@8.4.49): - resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + postcss-modules-extract-imports@3.1.0(postcss@8.5.2): dependencies: - postcss: 8.4.49 - dev: true + postcss: 8.5.2 - /postcss-modules-local-by-default@4.2.0(postcss@8.4.49): - resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + postcss-modules-local-by-default@4.2.0(postcss@8.5.2): dependencies: - icss-utils: 5.1.0(postcss@8.4.49) - postcss: 8.4.49 - postcss-selector-parser: 7.0.0 + icss-utils: 5.1.0(postcss@8.5.2) + postcss: 8.5.2 + postcss-selector-parser: 7.1.0 postcss-value-parser: 4.2.0 - dev: true - /postcss-modules-scope@3.2.1(postcss@8.4.49): - resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + postcss-modules-scope@3.2.1(postcss@8.5.2): dependencies: - postcss: 8.4.49 - postcss-selector-parser: 7.0.0 - dev: true + postcss: 8.5.2 + postcss-selector-parser: 7.1.0 - /postcss-modules-values@4.0.0(postcss@8.4.49): - resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 + postcss-modules-values@4.0.0(postcss@8.5.2): dependencies: - icss-utils: 5.1.0(postcss@8.4.49) - postcss: 8.4.49 - dev: true + icss-utils: 5.1.0(postcss@8.5.2) + postcss: 8.5.2 - /postcss-selector-parser@7.0.0: - resolution: {integrity: sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==} - engines: {node: '>=4'} + postcss-selector-parser@7.1.0: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - dev: true - /postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - dev: true + postcss-value-parser@4.2.0: {} - /postcss@8.4.49: - resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.5.2: dependencies: - nanoid: 3.3.8 + nanoid: 3.3.9 picocolors: 1.1.1 source-map-js: 1.2.1 - dev: true - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true + postcss@8.5.3: + dependencies: + nanoid: 3.3.9 + picocolors: 1.1.1 + source-map-js: 1.2.1 - /prettier@3.4.2: - resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} - engines: {node: '>=14'} - hasBin: true - dev: true + prelude-ls@1.2.1: {} - /proc-log@5.0.0: - resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==} - engines: {node: ^18.17.0 || >=20.5.0} - dev: true + prettier@3.5.0: {} - /process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - dev: true + prettier@3.5.3: {} - /process-warning@1.0.0: - resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==} - dev: true + proc-log@5.0.0: {} - /process-warning@4.0.1: - resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==} - dev: true + process-nextick-args@2.0.1: {} - /process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - dev: true + process-warning@1.0.0: {} - /progress@2.0.3: - resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} - engines: {node: '>=0.4.0'} - dev: true + process-warning@4.0.1: {} - /promise-inflight@1.0.1: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true - dev: true + process@0.11.10: {} - /promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} + progress@2.0.3: {} + + promise-retry@2.0.1: dependencies: err-code: 2.0.3 retry: 0.12.0 - dev: true - /proto3-json-serializer@2.0.2: - resolution: {integrity: sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ==} - engines: {node: '>=14.0.0'} + proto3-json-serializer@2.0.2: dependencies: protobufjs: 7.4.0 - dev: true - /protobufjs@6.8.8: - resolution: {integrity: sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==} - hasBin: true + protobufjs@6.8.8: dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/base64': 1.1.2 @@ -12092,11 +15182,8 @@ packages: '@types/long': 4.0.2 '@types/node': 10.17.60 long: 4.0.0 - dev: true - /protobufjs@7.4.0: - resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} - engines: {node: '>=12.0.0'} + protobufjs@7.4.0: dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/base64': 1.1.2 @@ -12108,15 +15195,10 @@ packages: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 22.10.5 - long: 5.2.3 - dev: true + '@types/node': 18.19.76 + long: 5.3.1 - /protractor@7.0.0: - resolution: {integrity: sha512-UqkFjivi4GcvUQYzqGYNe0mLzfn5jiLmO8w9nMhQoJRLhy2grJonpga2IWhI6yJO30LibWXJJtA4MOIZD2GgZw==} - engines: {node: '>=10.13.x'} - deprecated: We have news to share - Protractor is deprecated and will reach end-of-life by Summer 2023. To learn more and find out about other options please refer to this post on the Angular blog. Thank you for using and contributing to Protractor. https://goo.gle/state-of-e2e-in-angular - hasBin: true + protractor@7.0.0: dependencies: '@types/q': 0.0.32 '@types/selenium-webdriver': 3.0.26 @@ -12135,83 +15217,57 @@ packages: yargs: 15.4.1 transitivePeerDependencies: - supports-color - dev: true - /proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 - dev: true - /proxy-agent@6.5.0: - resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} - engines: {node: '>= 14'} + proxy-agent@6.5.0: dependencies: agent-base: 7.1.3 debug: 4.4.0(supports-color@10.0.0) http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6(supports-color@10.0.0) lru-cache: 7.18.3 - pac-proxy-agent: 7.1.0 + pac-proxy-agent: 7.2.0 proxy-from-env: 1.1.0 socks-proxy-agent: 8.0.5 transitivePeerDependencies: - supports-color - dev: true - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: true + proxy-from-env@1.1.0: {} - /prr@1.0.1: - resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} - dev: true + prr@1.0.1: optional: true - /psl@1.15.0: - resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + psl@1.15.0: dependencies: punycode: 2.3.1 - dev: true - /pump@2.0.1: - resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} + pump@2.0.1: dependencies: end-of-stream: 1.4.4 once: 1.4.0 - dev: true - /pump@3.0.2: - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + pump@3.0.2: dependencies: end-of-stream: 1.4.4 once: 1.4.0 - dev: true - /pumpify@1.5.1: - resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} + pumpify@1.5.1: dependencies: duplexify: 3.7.1 inherits: 2.0.4 pump: 2.0.1 - dev: true - /punycode@1.4.1: - resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} - dev: true + punycode@1.4.1: {} - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true + punycode@2.3.1: {} - /puppeteer-core@18.2.1: - resolution: {integrity: sha512-MRtTAZfQTluz3U2oU/X2VqVWPcR1+94nbA2V6ZrSZRVEwLqZ8eclZ551qGFQD/vD2PYqHJwWOW/fpC721uznVw==} - engines: {node: '>=14.1.0'} + puppeteer-core@18.2.1(encoding@0.1.13): dependencies: - cross-fetch: 3.1.5 + cross-fetch: 3.1.5(encoding@0.1.13) debug: 4.3.4 devtools-protocol: 0.0.1045489 extract-zip: 2.0.1 @@ -12226,101 +15282,63 @@ packages: - encoding - supports-color - utf-8-validate - dev: true - /puppeteer-core@23.11.1: - resolution: {integrity: sha512-3HZ2/7hdDKZvZQ7dhhITOUg4/wOrDRjyK2ZBllRB0ZCOi9u0cwq1ACHDjBB+nX+7+kltHjQvBRdeY7+W0T+7Gg==} - engines: {node: '>=18'} + puppeteer-core@24.4.0: dependencies: - '@puppeteer/browsers': 2.6.1 - chromium-bidi: 0.11.0(devtools-protocol@0.0.1367902) + '@puppeteer/browsers': 2.8.0 + chromium-bidi: 2.1.2(devtools-protocol@0.0.1413902) debug: 4.4.0(supports-color@10.0.0) - devtools-protocol: 0.0.1367902 + devtools-protocol: 0.0.1413902 typed-query-selector: 2.12.0 - ws: 8.18.0 + ws: 8.18.1 transitivePeerDependencies: + - bare-buffer - bufferutil - supports-color - utf-8-validate - dev: true - /puppeteer@18.2.1: - resolution: {integrity: sha512-7+UhmYa7wxPh2oMRwA++k8UGVDxh3YdWFB52r9C3tM81T6BU7cuusUSxImz0GEYSOYUKk/YzIhkQ6+vc0gHbxQ==} - engines: {node: '>=14.1.0'} - deprecated: < 22.8.2 is no longer supported + puppeteer@18.2.1(encoding@0.1.13): dependencies: https-proxy-agent: 5.0.1(supports-color@10.0.0) progress: 2.0.3 proxy-from-env: 1.1.0 - puppeteer-core: 18.2.1 + puppeteer-core: 18.2.1(encoding@0.1.13) transitivePeerDependencies: - bufferutil - encoding - supports-color - utf-8-validate - dev: true - - /q@1.4.1: - resolution: {integrity: sha512-/CdEdaw49VZVmyIDGUQKDDT53c7qBkO6g5CefWz91Ae+l4+cRtcDYwMTXh6me4O8TMldeGHG3N2Bl84V78Ywbg==} - engines: {node: '>=0.6.0', teleport: '>=0.2.0'} - deprecated: |- - You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. - - (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) - dev: true - /q@1.5.1: - resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} - engines: {node: '>=0.6.0', teleport: '>=0.2.0'} - deprecated: |- - You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. + q@1.4.1: {} - (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) - dev: true + q@1.5.1: {} - /qjobs@1.2.0: - resolution: {integrity: sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==} - engines: {node: '>=0.9'} - dev: true + qjobs@1.2.0: {} - /qs@6.13.0: - resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} - engines: {node: '>=0.6'} + qs@6.13.0: dependencies: side-channel: 1.1.0 - dev: true - /qs@6.13.1: - resolution: {integrity: sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==} - engines: {node: '>=0.6'} + qs@6.13.1: dependencies: side-channel: 1.1.0 - dev: true - /qs@6.5.3: - resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} - engines: {node: '>=0.6'} - dev: true + qs@6.14.0: + dependencies: + side-channel: 1.1.0 - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + qs@6.5.3: {} - /queue-tick@1.0.1: - resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} - dev: true + queue-microtask@1.2.3: {} - /quick-format-unescaped@4.0.4: - resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} - dev: true + quick-format-unescaped@4.0.4: {} - /quicktype-core@23.0.170: - resolution: {integrity: sha512-ZsjveG0yJUIijUx4yQshzyQ5EAXKbFSBTQJHnJ+KoSZVxcS+m3GcmDpzrdUIRYMhgLaF11ZGvLSYi5U0xcwemw==} + quicktype-core@23.0.171(encoding@0.1.13): dependencies: '@glideapps/ts-necessities': 2.2.3 browser-or-node: 3.0.0 collection-utils: 1.0.1 - cross-fetch: 4.1.0 + cross-fetch: 4.1.0(encoding@0.1.13) is-url: 1.2.4 js-base64: 3.7.7 lodash: 4.17.21 @@ -12333,31 +15351,21 @@ packages: yaml: 2.7.0 transitivePeerDependencies: - encoding - dev: true - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 - dev: true - /range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - dev: true + range-parser@1.2.1: {} - /raw-body@2.5.2: - resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} - engines: {node: '>= 0.8'} + raw-body@2.5.2: dependencies: bytes: 3.1.2 http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 - dev: true - /readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -12366,113 +15374,71 @@ packages: safe-buffer: 5.1.2 string_decoder: 1.1.1 util-deprecate: 1.0.2 - dev: true - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: true - /readable-stream@4.5.2: - resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + readable-stream@4.5.2: dependencies: abort-controller: 3.0.0 buffer: 6.0.3 events: 3.3.0 process: 0.11.10 string_decoder: 1.3.0 - dev: true - /readable-stream@4.6.0: - resolution: {integrity: sha512-cbAdYt0VcnpN2Bekq7PU+k363ZRsPwJoEEJOEtSJQlJXzwaxt3FIo/uL+KeDSGIjJqtkwyge4KQgD2S2kd+CQw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + readable-stream@4.7.0: dependencies: abort-controller: 3.0.0 buffer: 6.0.3 events: 3.3.0 process: 0.11.10 string_decoder: 1.3.0 - dev: true - /readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} + readdirp@3.6.0: dependencies: picomatch: 2.3.1 - dev: true - /readdirp@4.0.2: - resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} - engines: {node: '>= 14.16.0'} - dev: true + readdirp@4.1.2: {} - /real-require@0.2.0: - resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} - engines: {node: '>= 12.13.0'} - dev: true + real-require@0.2.0: {} - /rechoir@0.6.2: - resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} - engines: {node: '>= 0.10'} + rechoir@0.6.2: dependencies: resolve: 1.22.10 - dev: true - /reflect-metadata@0.1.14: - resolution: {integrity: sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==} - dev: true + reflect-metadata@0.1.14: {} - /reflect-metadata@0.2.2: - resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} - dev: true + reflect-metadata@0.2.2: {} - /reflect.getprototypeof@1.0.10: - resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} - engines: {node: '>= 0.4'} + reflect.getprototypeof@1.0.10: dependencies: 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 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 get-proto: 1.0.1 which-builtin-type: 1.2.1 - dev: true - /regenerate-unicode-properties@10.2.0: - resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} - engines: {node: '>=4'} + regenerate-unicode-properties@10.2.0: dependencies: regenerate: 1.4.2 - dev: true - /regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - dev: true + regenerate@1.4.2: {} - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: true + regenerator-runtime@0.14.1: {} - /regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.26.0 - dev: true + '@babel/runtime': 7.26.10 - /regex-parser@2.3.0: - resolution: {integrity: sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==} - dev: true + regex-parser@2.3.1: {} - /regexp.prototype.flags@1.5.4: - resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} - engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 @@ -12480,11 +15446,8 @@ packages: get-proto: 1.0.1 gopd: 1.2.0 set-function-name: 2.0.2 - dev: true - /regexpu-core@6.2.0: - resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} - engines: {node: '>=4'} + regexpu-core@6.2.0: dependencies: regenerate: 1.4.2 regenerate-unicode-properties: 10.2.0 @@ -12492,23 +15455,14 @@ packages: regjsparser: 0.12.0 unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.2.0 - dev: true - /regjsgen@0.8.0: - resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} - dev: true + regjsgen@0.8.0: {} - /regjsparser@0.12.0: - resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} - hasBin: true + regjsparser@0.12.0: dependencies: jsesc: 3.0.2 - dev: true - /request@2.88.2: - resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} - engines: {node: '>= 6'} - deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 + request@2.88.2: dependencies: aws-sign2: 0.7.0 aws4: 1.13.2 @@ -12530,443 +15484,229 @@ packages: tough-cookie: 2.5.0 tunnel-agent: 0.6.0 uuid: 3.4.0 - dev: true - - /require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - dev: true - /require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - dev: true + require-directory@2.1.1: {} - /require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - dev: true + require-from-string@2.0.2: {} - /requirejs@2.3.7: - resolution: {integrity: sha512-DouTG8T1WanGok6Qjg2SXuCMzszOo0eHeH9hDZ5Y4x8Je+9JB38HdTLT4/VA8OaUhBa0JPVHJ0pyBkM1z+pDsw==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + require-main-filename@2.0.0: {} - /requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - dev: true + requires-port@1.0.0: {} - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true + resolve-from@4.0.0: {} - /resolve-path@1.4.0: - resolution: {integrity: sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==} - engines: {node: '>= 0.8'} + resolve-path@1.4.0: dependencies: http-errors: 1.6.3 path-is-absolute: 1.0.1 - dev: true - /resolve-url-loader@5.0.0: - resolution: {integrity: sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==} - engines: {node: '>=12'} + resolve-url-loader@5.0.0: dependencies: adjust-sourcemap-loader: 4.0.0 convert-source-map: 1.9.0 loader-utils: 2.0.4 - postcss: 8.4.49 + postcss: 8.5.2 source-map: 0.6.1 - dev: true - /resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} - engines: {node: '>= 0.4'} - hasBin: true + resolve@1.22.10: dependencies: is-core-module: 2.16.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /resp-modifier@6.0.2: - resolution: {integrity: sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==} - engines: {node: '>= 0.8.0'} + resp-modifier@6.0.2: dependencies: debug: 2.6.9 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: true - /restore-cursor@5.1.0: - resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} - engines: {node: '>=18'} + restore-cursor@5.1.0: dependencies: onetime: 7.0.0 signal-exit: 4.1.0 - dev: true - /retry-request@7.0.2(supports-color@10.0.0): - resolution: {integrity: sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==} - engines: {node: '>=14'} + retry-request@7.0.2(encoding@0.1.13)(supports-color@10.0.0): dependencies: '@types/request': 2.48.12 extend: 3.0.2 - teeny-request: 9.0.0(supports-color@10.0.0) + teeny-request: 9.0.0(encoding@0.1.13)(supports-color@10.0.0) transitivePeerDependencies: - encoding - supports-color - dev: true - /retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - dev: true + retry@0.12.0: {} - /retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - dev: true + retry@0.13.1: {} - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + reusify@1.1.0: {} - /rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - dev: true + rfdc@1.4.1: {} - /rimraf@2.7.1: - resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true + rimraf@2.7.1: dependencies: glob: 7.2.3 - dev: true - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true + rimraf@3.0.2: dependencies: glob: 7.2.3 - dev: true - /rimraf@5.0.10: - resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} - hasBin: true + rimraf@5.0.10: dependencies: glob: 10.4.5 - dev: true - /rollup-license-plugin@3.0.1: - resolution: {integrity: sha512-dbwTbIU7bdZfHnaDQvmUPw8elGvsEmEgKOb6QYJtylEAkwBowOO5fETyhpJWhKxoNkJc9LmKF1PNVR//pxRy3w==} - engines: {node: '>=18.0.0'} + rollup-license-plugin@3.0.2: dependencies: get-npm-tarball-url: 2.1.0 node-fetch: 3.3.2 spdx-expression-validate: 2.0.0 - dev: true - /rollup-plugin-sourcemaps@0.6.3(@types/node@18.19.70)(rollup@4.30.1): - resolution: {integrity: sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==} - engines: {node: '>=10.0.0'} - peerDependencies: - '@types/node': '>=10.0.0' - rollup: '>=0.31.2' - peerDependenciesMeta: - '@types/node': - optional: true + rollup-plugin-sourcemaps@0.6.3(@types/node@18.19.76)(rollup@4.34.8): dependencies: - '@rollup/pluginutils': 3.1.0(rollup@4.30.1) - '@types/node': 18.19.70 - rollup: 4.30.1 + '@rollup/pluginutils': 3.1.0(rollup@4.34.8) + rollup: 4.34.8 source-map-resolve: 0.6.0 - dev: true - - /rollup@4.28.1: - resolution: {integrity: sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true - dependencies: - '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.28.1 - '@rollup/rollup-android-arm64': 4.28.1 - '@rollup/rollup-darwin-arm64': 4.28.1 - '@rollup/rollup-darwin-x64': 4.28.1 - '@rollup/rollup-freebsd-arm64': 4.28.1 - '@rollup/rollup-freebsd-x64': 4.28.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.28.1 - '@rollup/rollup-linux-arm-musleabihf': 4.28.1 - '@rollup/rollup-linux-arm64-gnu': 4.28.1 - '@rollup/rollup-linux-arm64-musl': 4.28.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.28.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.28.1 - '@rollup/rollup-linux-riscv64-gnu': 4.28.1 - '@rollup/rollup-linux-s390x-gnu': 4.28.1 - '@rollup/rollup-linux-x64-gnu': 4.28.1 - '@rollup/rollup-linux-x64-musl': 4.28.1 - '@rollup/rollup-win32-arm64-msvc': 4.28.1 - '@rollup/rollup-win32-ia32-msvc': 4.28.1 - '@rollup/rollup-win32-x64-msvc': 4.28.1 - fsevents: 2.3.3 - dev: true + '@types/node': 18.19.76 - /rollup@4.30.1: - resolution: {integrity: sha512-mlJ4glW020fPuLi7DkM/lN97mYEZGWeqBnrljzN0gs7GLctqX3lNWxKQ7Gl712UAX+6fog/L3jh4gb7R6aVi3w==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - hasBin: true + rollup@4.34.8: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.30.1 - '@rollup/rollup-android-arm64': 4.30.1 - '@rollup/rollup-darwin-arm64': 4.30.1 - '@rollup/rollup-darwin-x64': 4.30.1 - '@rollup/rollup-freebsd-arm64': 4.30.1 - '@rollup/rollup-freebsd-x64': 4.30.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.30.1 - '@rollup/rollup-linux-arm-musleabihf': 4.30.1 - '@rollup/rollup-linux-arm64-gnu': 4.30.1 - '@rollup/rollup-linux-arm64-musl': 4.30.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.30.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.30.1 - '@rollup/rollup-linux-riscv64-gnu': 4.30.1 - '@rollup/rollup-linux-s390x-gnu': 4.30.1 - '@rollup/rollup-linux-x64-gnu': 4.30.1 - '@rollup/rollup-linux-x64-musl': 4.30.1 - '@rollup/rollup-win32-arm64-msvc': 4.30.1 - '@rollup/rollup-win32-ia32-msvc': 4.30.1 - '@rollup/rollup-win32-x64-msvc': 4.30.1 + '@rollup/rollup-android-arm-eabi': 4.34.8 + '@rollup/rollup-android-arm64': 4.34.8 + '@rollup/rollup-darwin-arm64': 4.34.8 + '@rollup/rollup-darwin-x64': 4.34.8 + '@rollup/rollup-freebsd-arm64': 4.34.8 + '@rollup/rollup-freebsd-x64': 4.34.8 + '@rollup/rollup-linux-arm-gnueabihf': 4.34.8 + '@rollup/rollup-linux-arm-musleabihf': 4.34.8 + '@rollup/rollup-linux-arm64-gnu': 4.34.8 + '@rollup/rollup-linux-arm64-musl': 4.34.8 + '@rollup/rollup-linux-loongarch64-gnu': 4.34.8 + '@rollup/rollup-linux-powerpc64le-gnu': 4.34.8 + '@rollup/rollup-linux-riscv64-gnu': 4.34.8 + '@rollup/rollup-linux-s390x-gnu': 4.34.8 + '@rollup/rollup-linux-x64-gnu': 4.34.8 + '@rollup/rollup-linux-x64-musl': 4.34.8 + '@rollup/rollup-win32-arm64-msvc': 4.34.8 + '@rollup/rollup-win32-ia32-msvc': 4.34.8 + '@rollup/rollup-win32-x64-msvc': 4.34.8 fsevents: 2.3.3 - dev: true - /run-applescript@7.0.0: - resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} - engines: {node: '>=18'} - dev: true + run-applescript@7.0.0: {} - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - /rx@4.1.0: - resolution: {integrity: sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==} - dev: true + rx@4.1.0: {} - /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.1: dependencies: tslib: 2.8.1 - dev: true - /safe-array-concat@1.1.3: - resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} - engines: {node: '>=0.4'} + safe-array-concat@1.1.3: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 - get-intrinsic: 1.2.7 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 has-symbols: 1.1.0 isarray: 2.0.5 - dev: true - /safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - dev: true + safe-buffer@5.1.2: {} - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true + safe-buffer@5.2.1: {} - /safe-push-apply@1.0.0: - resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} - engines: {node: '>= 0.4'} + safe-push-apply@1.0.0: dependencies: es-errors: 1.3.0 isarray: 2.0.5 - dev: true - /safe-regex-test@1.1.0: - resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} - engines: {node: '>= 0.4'} + safe-regex-test@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 is-regex: 1.2.1 - dev: true - /safe-stable-stringify@2.5.0: - resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} - engines: {node: '>=10'} - dev: true + safe-stable-stringify@2.5.0: {} - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + safer-buffer@2.1.2: {} - /sass-loader@16.0.4(sass@1.83.1)(webpack@5.97.1): - resolution: {integrity: sha512-LavLbgbBGUt3wCiYzhuLLu65+fWXaXLmq7YxivLhEqmiupCFZ5sKUAipK3do6V80YSU0jvSxNhEdT13IXNr3rg==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - sass: ^1.3.0 - sass-embedded: '*' - webpack: ^5.0.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - node-sass: - optional: true - sass: - optional: true - sass-embedded: - optional: true - webpack: - optional: true + sass-loader@16.0.5(sass@1.85.0)(webpack@5.98.0(esbuild@0.25.1)): dependencies: neo-async: 2.6.2 - sass: 1.83.1 - webpack: 5.97.1(esbuild@0.24.2) - dev: true - - /sass@1.83.0: - resolution: {integrity: sha512-qsSxlayzoOjdvXMVLkzF84DJFc2HZEL/rFyGIKbbilYtAvlCxyuzUeff9LawTn4btVnLKg75Z8MMr1lxU1lfGw==} - engines: {node: '>=14.0.0'} - hasBin: true - dependencies: - chokidar: 4.0.3 - immutable: 5.0.3 - source-map-js: 1.2.1 optionalDependencies: - '@parcel/watcher': 2.5.0 - dev: true + sass: 1.85.0 + webpack: 5.98.0(esbuild@0.25.1) - /sass@1.83.1: - resolution: {integrity: sha512-EVJbDaEs4Rr3F0glJzFSOvtg2/oy2V/YrGFPqPY24UqcLDWcI9ZY5sN+qyO3c/QCZwzgfirvhXvINiJCE/OLcA==} - engines: {node: '>=14.0.0'} - hasBin: true + sass@1.85.0: dependencies: chokidar: 4.0.3 immutable: 5.0.3 source-map-js: 1.2.1 optionalDependencies: - '@parcel/watcher': 2.5.0 - dev: true + '@parcel/watcher': 2.5.1 - /saucelabs@1.5.0: - resolution: {integrity: sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==} + saucelabs@1.5.0: dependencies: https-proxy-agent: 2.2.4 transitivePeerDependencies: - supports-color - dev: true - - /sax@1.4.1: - resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} - dev: true - /schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} - dependencies: - '@types/json-schema': 7.0.15 - ajv: 6.12.6 - ajv-keywords: 3.5.2(ajv@6.12.6) - dev: true + sax@1.4.1: {} - /schema-utils@4.3.0: - resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} - engines: {node: '>= 10.13.0'} + schema-utils@4.3.0: dependencies: '@types/json-schema': 7.0.15 ajv: 8.17.1 - ajv-formats: 2.1.1(ajv@8.17.1) + ajv-formats: 2.1.1 ajv-keywords: 5.1.0(ajv@8.17.1) - dev: true - /select-hose@2.0.0: - resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - dev: true + select-hose@2.0.0: {} - /selenium-webdriver@3.6.0: - resolution: {integrity: sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q==} - engines: {node: '>= 6.9.0'} + selenium-webdriver@3.6.0: dependencies: jszip: 3.10.1 rimraf: 2.7.1 tmp: 0.0.30 xml2js: 0.4.23 - dev: true - /selenium-webdriver@4.27.0: - resolution: {integrity: sha512-LkTJrNz5socxpPnWPODQ2bQ65eYx9JK+DQMYNihpTjMCqHwgWGYQnQTCAAche2W3ZP87alA+1zYPvgS8tHNzMQ==} - engines: {node: '>= 14.21.0'} + selenium-webdriver@4.29.0: dependencies: '@bazel/runfiles': 6.3.1 jszip: 3.10.1 tmp: 0.2.3 - ws: 8.18.0 + ws: 8.18.1 transitivePeerDependencies: - bufferutil - utf-8-validate - dev: true - /selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} - engines: {node: '>=10'} + selfsigned@2.4.1: dependencies: '@types/node-forge': 1.3.11 node-forge: 1.3.1 - dev: true - /semver@5.6.0: - resolution: {integrity: sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==} - hasBin: true - dev: true + semver@5.6.0: {} - /semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - dev: true + semver@5.7.2: {} - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true + semver@6.3.1: {} - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true + semver@7.5.4: dependencies: lru-cache: 6.0.0 - dev: true - /semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} - engines: {node: '>=10'} - hasBin: true - dev: true + semver@7.6.3: {} - /send@0.19.0: - resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} - engines: {node: '>= 0.8.0'} + semver@7.7.1: {} + + send@0.19.0: dependencies: debug: 2.6.9 depd: 2.0.0 @@ -12983,11 +15723,8 @@ packages: statuses: 2.0.1 transitivePeerDependencies: - supports-color - dev: true - /send@0.19.1: - resolution: {integrity: sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg==} - engines: {node: '>= 0.8.0'} + send@0.19.1: dependencies: debug: 2.6.9 depd: 2.0.0 @@ -13004,11 +15741,8 @@ packages: statuses: 2.0.1 transitivePeerDependencies: - supports-color - dev: true - /send@1.1.0: - resolution: {integrity: sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==} - engines: {node: '>= 18'} + send@1.1.0: dependencies: debug: 4.4.0(supports-color@10.0.0) destroy: 1.2.0 @@ -13024,17 +15758,12 @@ packages: statuses: 2.0.1 transitivePeerDependencies: - supports-color - dev: true - /serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 - dev: true - /serve-index@1.9.1: - resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} - engines: {node: '>= 0.8.0'} + serve-index@1.9.1: dependencies: accepts: 1.3.8 batch: 0.6.1 @@ -13045,11 +15774,8 @@ packages: parseurl: 1.3.3 transitivePeerDependencies: - supports-color - dev: true - /serve-static@1.16.2: - resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} - engines: {node: '>= 0.8.0'} + serve-static@1.16.2: dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 @@ -13057,203 +15783,123 @@ packages: send: 0.19.0 transitivePeerDependencies: - supports-color - dev: true - /server-destroy@1.0.1: - resolution: {integrity: sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==} - dev: true + server-destroy@1.0.1: {} - /set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: true + set-blocking@2.0.0: {} - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 gopd: 1.2.0 has-property-descriptors: 1.0.2 - dev: true - /set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} + set-function-name@2.0.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 functions-have-names: 1.2.3 has-property-descriptors: 1.0.2 - dev: true - /set-proto@1.0.0: - resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} - engines: {node: '>= 0.4'} + set-proto@1.0.0: dependencies: dunder-proto: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.0.0 - dev: true + es-object-atoms: 1.1.1 - /setimmediate@1.0.5: - resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} - dev: true + setimmediate@1.0.5: {} - /setprototypeof@1.1.0: - resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} - dev: true + setprototypeof@1.1.0: {} - /setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - dev: true + setprototypeof@1.2.0: {} - /shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} + shallow-clone@3.0.1: dependencies: kind-of: 6.0.3 - dev: true - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - dev: true - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true + shebang-regex@3.0.0: {} - /shell-quote@1.8.2: - resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} - engines: {node: '>= 0.4'} - dev: true + shell-quote@1.8.2: {} - /shelljs@0.8.5: - resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} - engines: {node: '>=4'} - hasBin: true + shelljs@0.8.5: dependencies: glob: 7.2.3 interpret: 1.4.0 rechoir: 0.6.2 - dev: true - /side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} + side-channel-list@1.0.0: dependencies: es-errors: 1.3.0 - object-inspect: 1.13.3 - dev: true + object-inspect: 1.13.4 - /side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} + side-channel-map@1.0.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 - get-intrinsic: 1.2.7 - object-inspect: 1.13.3 - dev: true + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 - /side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} + side-channel-weakmap@1.0.2: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 - get-intrinsic: 1.2.7 - object-inspect: 1.13.3 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 side-channel-map: 1.0.1 - dev: true - /side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} + side-channel@1.1.0: dependencies: es-errors: 1.3.0 - object-inspect: 1.13.3 + object-inspect: 1.13.4 side-channel-list: 1.0.0 side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 - dev: true - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + signal-exit@3.0.7: {} - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: true + signal-exit@4.1.0: {} - /sigstore@3.0.0: - resolution: {integrity: sha512-PHMifhh3EN4loMcHCz6l3v/luzgT3za+9f8subGgeMNjbJjzH4Ij/YoX3Gvu+kaouJRIlVdTHHCREADYf+ZteA==} - engines: {node: ^18.17.0 || >=20.5.0} + sigstore@3.1.0: dependencies: - '@sigstore/bundle': 3.0.0 + '@sigstore/bundle': 3.1.0 '@sigstore/core': 2.0.0 - '@sigstore/protobuf-specs': 0.3.2 - '@sigstore/sign': 3.0.0 - '@sigstore/tuf': 3.0.0 - '@sigstore/verify': 2.0.0 + '@sigstore/protobuf-specs': 0.4.0 + '@sigstore/sign': 3.1.0 + '@sigstore/tuf': 3.1.0 + '@sigstore/verify': 2.1.0 transitivePeerDependencies: - supports-color - dev: true - - /slash@2.0.0: - resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} - engines: {node: '>=6'} - dev: true - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true + slash@3.0.0: {} - /slash@5.1.0: - resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} - engines: {node: '>=14.16'} - dev: true + slash@5.1.0: {} - /slice-ansi@4.0.0: - resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} - engines: {node: '>=10'} + slice-ansi@4.0.0: dependencies: ansi-styles: 4.3.0 astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - dev: true - /slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} + slice-ansi@5.0.0: dependencies: ansi-styles: 6.2.1 is-fullwidth-code-point: 4.0.0 - dev: true - /slice-ansi@7.1.0: - resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} - engines: {node: '>=18'} + slice-ansi@7.1.0: dependencies: ansi-styles: 6.2.1 is-fullwidth-code-point: 5.0.0 - dev: true - /smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - dev: true + smart-buffer@4.2.0: {} - /socket.io-adapter@2.5.5: - resolution: {integrity: sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==} + socket.io-adapter@2.5.5: dependencies: debug: 4.3.7 ws: 8.17.1 @@ -13261,177 +15907,118 @@ packages: - bufferutil - supports-color - utf-8-validate - dev: true - /socket.io-client@4.8.1: - resolution: {integrity: sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==} - engines: {node: '>=10.0.0'} + socket.io-client@4.8.1: dependencies: '@socket.io/component-emitter': 3.1.2 debug: 4.3.7 - engine.io-client: 6.6.2 + engine.io-client: 6.6.3 socket.io-parser: 4.2.4 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - dev: true - /socket.io-parser@4.2.4: - resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} - engines: {node: '>=10.0.0'} + socket.io-parser@4.2.4: dependencies: '@socket.io/component-emitter': 3.1.2 debug: 4.3.7 transitivePeerDependencies: - supports-color - dev: true - /socket.io@4.8.1: - resolution: {integrity: sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==} - engines: {node: '>=10.2.0'} + socket.io@4.8.1: dependencies: accepts: 1.3.8 base64id: 2.0.0 cors: 2.8.5 debug: 4.3.7 - engine.io: 6.6.2 + engine.io: 6.6.4 socket.io-adapter: 2.5.5 socket.io-parser: 4.2.4 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - dev: true - /sockjs@0.3.24: - resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + sockjs@0.3.24: dependencies: faye-websocket: 0.11.4 uuid: 8.3.2 websocket-driver: 0.7.4 - dev: true - /socks-proxy-agent@8.0.5: - resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} - engines: {node: '>= 14'} + socks-proxy-agent@8.0.5: dependencies: agent-base: 7.1.3 debug: 4.4.0(supports-color@10.0.0) - socks: 2.8.3 + socks: 2.8.4 transitivePeerDependencies: - supports-color - dev: true - /socks@2.8.3: - resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + socks@2.8.4: dependencies: ip-address: 9.0.5 smart-buffer: 4.2.0 - dev: true - /sonic-boom@3.8.1: - resolution: {integrity: sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg==} + sonic-boom@3.8.1: dependencies: atomic-sleep: 1.0.0 - dev: true - /sonic-boom@4.2.0: - resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} + sonic-boom@4.2.0: dependencies: atomic-sleep: 1.0.0 - dev: true - /source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - dev: true + source-map-js@1.2.1: {} - /source-map-loader@5.0.0(webpack@5.97.1): - resolution: {integrity: sha512-k2Dur7CbSLcAH73sBcIkV5xjPV4SzqO1NJ7+XaQl8if3VODDUj3FNchNGpqgJSKbvUfJuhVdv8K2Eu8/TNl2eA==} - engines: {node: '>= 18.12.0'} - peerDependencies: - webpack: ^5.72.1 + source-map-loader@5.0.0(webpack@5.98.0(esbuild@0.25.1)): dependencies: iconv-lite: 0.6.3 source-map-js: 1.2.1 - webpack: 5.97.1(esbuild@0.24.2) - dev: true + webpack: 5.98.0(esbuild@0.25.1) - /source-map-resolve@0.6.0: - resolution: {integrity: sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==} - deprecated: See https://github.com/lydell/source-map-resolve#deprecated + source-map-resolve@0.6.0: dependencies: atob: 2.1.2 decode-uri-component: 0.2.2 - dev: true - /source-map-support@0.4.18: - resolution: {integrity: sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==} + source-map-support@0.4.18: dependencies: source-map: 0.5.7 - dev: true - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true - /source-map-support@0.5.9: - resolution: {integrity: sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA==} + source-map-support@0.5.9: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: true - /source-map@0.5.7: - resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.5.7: {} - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.6.1: {} - /source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - dev: true + source-map@0.7.4: {} - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.20 - dev: true + spdx-license-ids: 3.0.21 - /spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - dev: true + spdx-exceptions@2.5.0: {} - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.20 - dev: true + spdx-license-ids: 3.0.21 - /spdx-expression-validate@2.0.0: - resolution: {integrity: sha512-b3wydZLM+Tc6CFvaRDBOF9d76oGIHNCLYFeHbftFXUWjnfZWganmDmvtM5sm1cRwJc/VDBMLyGGrsLFd1vOxbg==} + spdx-expression-validate@2.0.0: dependencies: spdx-expression-parse: 3.0.1 - dev: true - /spdx-license-ids@3.0.20: - resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} - dev: true + spdx-license-ids@3.0.21: {} - /spdy-transport@3.0.0: - resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + spdy-transport@3.0.0: dependencies: debug: 4.4.0(supports-color@10.0.0) detect-node: 2.1.0 @@ -13441,11 +16028,8 @@ packages: wbuf: 1.7.3 transitivePeerDependencies: - supports-color - dev: true - /spdy@4.0.2: - resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} - engines: {node: '>=6.0.0'} + spdy@4.0.2: dependencies: debug: 4.4.0(supports-color@10.0.0) handle-thing: 2.0.1 @@ -13454,38 +16038,23 @@ packages: spdy-transport: 3.0.0 transitivePeerDependencies: - supports-color - dev: true - /split-array-stream@1.0.3: - resolution: {integrity: sha512-yGY35QmZFzZkWZ0eHE06RPBi63umym8m+pdtuC/dlO1ADhdKSfCj0uNn87BYCXBBDFxyTq4oTw0BgLYT0K5z/A==} + split-array-stream@1.0.3: dependencies: async: 2.6.4 is-stream-ended: 0.1.4 - dev: true - /split-array-stream@2.0.0: - resolution: {integrity: sha512-hmMswlVY91WvGMxs0k8MRgq8zb2mSen4FmDNc5AFiTWtrBpdZN6nwD6kROVe4vNL+ywrvbCKsWVCnEd4riELIg==} + split-array-stream@2.0.0: dependencies: is-stream-ended: 0.1.4 - dev: true - /split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} - engines: {node: '>= 10.x'} - dev: true + split2@4.2.0: {} - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - dev: true + sprintf-js@1.0.3: {} - /sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - dev: true + sprintf-js@1.1.3: {} - /sshpk@1.18.0: - resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} - engines: {node: '>=0.10.0'} - hasBin: true + sshpk@1.18.0: dependencies: asn1: 0.2.6 assert-plus: 1.0.0 @@ -13496,284 +16065,175 @@ packages: jsbn: 0.1.1 safer-buffer: 2.1.2 tweetnacl: 0.14.5 - dev: true - /ssri@12.0.0: - resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==} - engines: {node: ^18.17.0 || >=20.5.0} + ssri@12.0.0: dependencies: minipass: 7.1.2 - dev: true - /stack-trace@0.0.10: - resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} - dev: true + stack-trace@0.0.10: {} - /statuses@1.3.1: - resolution: {integrity: sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==} - engines: {node: '>= 0.6'} - dev: true + statuses@1.3.1: {} - /statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - dev: true + statuses@1.5.0: {} - /statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - dev: true + statuses@2.0.1: {} - /steno@0.4.4: - resolution: {integrity: sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w==} + steno@0.4.4: dependencies: graceful-fs: 4.2.11 - dev: true - /stream-events@1.0.5: - resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==} + stream-events@1.0.5: dependencies: stubs: 3.0.0 - dev: true - /stream-shift@1.0.3: - resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} - dev: true + stream-shift@1.0.3: {} - /stream-throttle@0.1.3: - resolution: {integrity: sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==} - engines: {node: '>= 0.10.0'} - hasBin: true + stream-throttle@0.1.3: dependencies: commander: 2.20.3 limiter: 1.1.5 - dev: true - /streamroller@3.1.5: - resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==} - engines: {node: '>=8.0'} + streamroller@3.1.5: dependencies: date-format: 4.0.14 debug: 4.4.0(supports-color@10.0.0) fs-extra: 8.1.0 transitivePeerDependencies: - supports-color - dev: true - /streamx@2.21.1: - resolution: {integrity: sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==} + streamx@2.22.0: dependencies: fast-fifo: 1.3.2 - queue-tick: 1.0.1 text-decoder: 1.2.3 optionalDependencies: - bare-events: 2.5.2 - dev: true + bare-events: 2.5.4 - /string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - dev: true + string-argv@0.3.2: {} - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + string-width@5.1.2: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 - dev: true - /string-width@7.2.0: - resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} - engines: {node: '>=18'} + string-width@7.2.0: dependencies: emoji-regex: 10.4.0 get-east-asian-width: 1.3.0 strip-ansi: 7.1.0 - dev: true - /string.prototype.trim@1.2.10: - resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} - engines: {node: '>= 0.4'} + string.prototype.trim@1.2.10: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-data-property: 1.1.4 define-properties: 1.2.1 es-abstract: 1.23.9 - es-object-atoms: 1.0.0 + es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 - dev: true - /string.prototype.trimend@1.0.9: - resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} - engines: {node: '>= 0.4'} + string.prototype.trimend@1.0.9: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 - es-object-atoms: 1.0.0 - dev: true + es-object-atoms: 1.1.1 - /string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} + string.prototype.trimstart@1.0.8: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-object-atoms: 1.0.0 - dev: true + es-object-atoms: 1.1.1 - /string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + string_decoder@1.1.1: dependencies: safe-buffer: 5.1.2 - dev: true - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 - dev: true - /strip-ansi@3.0.1: - resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} - engines: {node: '>=0.10.0'} + strip-ansi@3.0.1: dependencies: ansi-regex: 2.1.1 - dev: true - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - dev: true - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + strip-ansi@7.1.0: dependencies: ansi-regex: 6.1.0 - dev: true - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true + strip-bom@3.0.0: {} - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true + strip-final-newline@2.0.0: {} - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + strip-json-comments@3.1.1: {} - /stubs@3.0.0: - resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==} - dev: true + stubs@3.0.0: {} - /supports-color@10.0.0: - resolution: {integrity: sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==} - engines: {node: '>=18'} - dev: true + supports-color@10.0.0: {} - /supports-color@2.0.0: - resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} - engines: {node: '>=0.8.0'} - dev: true + supports-color@2.0.0: {} - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - dev: true - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} + supports-color@8.1.1: dependencies: has-flag: 4.0.0 - dev: true - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true + supports-preserve-symlinks-flag@1.0.0: {} - /symbol-observable@4.0.0: - resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==} - engines: {node: '>=0.10'} - dev: true + symbol-observable@4.0.0: {} - /table-layout@4.1.1: - resolution: {integrity: sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==} - engines: {node: '>=12.17'} + table-layout@4.1.1: dependencies: array-back: 6.2.2 wordwrapjs: 5.1.0 - dev: true - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: true + tapable@2.2.1: {} - /tar-fs@2.1.1: - resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} + tar-fs@2.1.1: dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 pump: 3.0.2 tar-stream: 2.2.0 - dev: true - /tar-fs@3.0.6: - resolution: {integrity: sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==} + tar-fs@3.0.8: dependencies: pump: 3.0.2 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 2.3.5 - bare-path: 2.1.3 - dev: true + bare-fs: 4.0.1 + bare-path: 3.0.0 + transitivePeerDependencies: + - bare-buffer - /tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} + tar-stream@2.2.0: dependencies: bl: 4.1.0 end-of-stream: 1.4.4 fs-constants: 1.0.0 inherits: 2.0.4 readable-stream: 3.6.2 - dev: true - /tar-stream@3.1.7: - resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + tar-stream@3.1.7: dependencies: b4a: 1.6.7 fast-fifo: 1.3.2 - streamx: 2.21.1 - dev: true + streamx: 2.22.0 - /tar@6.2.1: - resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} - engines: {node: '>=10'} + tar@6.2.1: dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 @@ -13781,11 +16241,8 @@ packages: minizlib: 2.1.2 mkdirp: 1.0.4 yallist: 4.0.0 - dev: true - /tar@7.4.3: - resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} - engines: {node: '>=18'} + tar@7.4.3: dependencies: '@isaacs/fs-minipass': 4.0.1 chownr: 3.0.0 @@ -13793,653 +16250,357 @@ packages: minizlib: 3.0.1 mkdirp: 3.0.1 yallist: 5.0.0 - dev: true - /teeny-request@9.0.0(supports-color@10.0.0): - resolution: {integrity: sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==} - engines: {node: '>=14'} + teeny-request@9.0.0(encoding@0.1.13)(supports-color@10.0.0): dependencies: http-proxy-agent: 5.0.0(supports-color@10.0.0) https-proxy-agent: 5.0.1(supports-color@10.0.0) - node-fetch: 2.7.0 + node-fetch: 2.7.0(encoding@0.1.13) stream-events: 1.0.5 uuid: 9.0.1 transitivePeerDependencies: - encoding - supports-color - dev: true - /terser-webpack-plugin@5.3.11(esbuild@0.24.2)(webpack@5.97.1): - resolution: {integrity: sha512-RVCsMfuD0+cTt3EwX8hSl2Ks56EbFHWmhluwcqoPKtBnfjiT6olaq7PRIRfhyU8nnC2MrnDrBLfrD/RGE+cVXQ==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true + terser-webpack-plugin@5.3.14(esbuild@0.25.1)(webpack@5.98.0(esbuild@0.25.1)): dependencies: '@jridgewell/trace-mapping': 0.3.25 - esbuild: 0.24.2 jest-worker: 27.5.1 schema-utils: 4.3.0 serialize-javascript: 6.0.2 - terser: 5.37.0 - webpack: 5.97.1(esbuild@0.24.2) - dev: true + terser: 5.39.0 + webpack: 5.98.0(esbuild@0.25.1) + optionalDependencies: + esbuild: 0.25.1 - /terser@5.37.0: - resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==} - engines: {node: '>=10'} - hasBin: true + terser@5.39.0: dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.14.0 + acorn: 8.14.1 commander: 2.20.3 source-map-support: 0.5.21 - dev: true - - /test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 - dev: true - /text-decoder@1.2.3: - resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + text-decoder@1.2.3: dependencies: b4a: 1.6.7 - dev: true - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + text-table@0.2.0: {} - /thingies@1.21.0(tslib@2.8.1): - resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==} - engines: {node: '>=10.18'} - peerDependencies: - tslib: ^2 + thingies@1.21.0(tslib@2.8.1): dependencies: tslib: 2.8.1 - dev: true - /thread-stream@3.1.0: - resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + thread-stream@3.1.0: dependencies: real-require: 0.2.0 - dev: true - /through2@2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + through2@2.0.5: dependencies: readable-stream: 2.3.8 xtend: 4.0.2 - dev: true - /through2@4.0.2: - resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + through2@4.0.2: dependencies: readable-stream: 3.6.2 - dev: true - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true + through@2.3.8: {} - /thunky@1.1.0: - resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} - dev: true + thunky@1.1.0: {} - /tiny-inflate@1.0.3: - resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==} - dev: true + tiny-inflate@1.0.3: {} - /tldts-core@6.1.71: - resolution: {integrity: sha512-LRbChn2YRpic1KxY+ldL1pGXN/oVvKfCVufwfVzEQdFYNo39uF7AJa/WXdo+gYO7PTvdfkCPCed6Hkvz/kR7jg==} - dev: true + tldts-core@6.1.83: {} - /tldts@6.1.71: - resolution: {integrity: sha512-LQIHmHnuzfZgZWAf2HzL83TIIrD8NhhI0DVxqo9/FdOd4ilec+NTNZOlDZf7EwrTNoutccbsHjvWHYXLAtvxjw==} - hasBin: true + tldts@6.1.83: dependencies: - tldts-core: 6.1.71 - dev: true + tldts-core: 6.1.83 - /tmp@0.0.30: - resolution: {integrity: sha512-HXdTB7lvMwcb55XFfrTM8CPr/IYREk4hVBFaQ4b/6nInrluSL86hfHm7vu0luYKCfyBZp2trCjpc8caC3vVM3w==} - engines: {node: '>=0.4.0'} + tmp@0.0.30: dependencies: os-tmpdir: 1.0.2 - dev: true - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 - dev: true - /tmp@0.2.3: - resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} - engines: {node: '>=14.14'} - dev: true + tmp@0.2.3: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - dev: true + toidentifier@1.0.1: {} - /tough-cookie@2.5.0: - resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} - engines: {node: '>=0.8'} + tough-cookie@2.5.0: dependencies: psl: 1.15.0 punycode: 2.3.1 - dev: true - /tough-cookie@5.0.0: - resolution: {integrity: sha512-FRKsF7cz96xIIeMZ82ehjC3xW2E+O2+v11udrDYewUbszngYhsGa8z6YUMMzO9QJZzzyd0nGGXnML/TReX6W8Q==} - engines: {node: '>=16'} + tough-cookie@5.1.2: dependencies: - tldts: 6.1.71 - dev: true + tldts: 6.1.83 - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: true + tr46@0.0.3: {} - /tr46@5.0.0: - resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} - engines: {node: '>=18'} + tr46@5.0.0: dependencies: punycode: 2.3.1 - dev: true - /tree-dump@1.0.2(tslib@2.8.1): - resolution: {integrity: sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==} - engines: {node: '>=10.0'} - peerDependencies: - tslib: '2' + tree-dump@1.0.2(tslib@2.8.1): dependencies: tslib: 2.8.1 - dev: true - /tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - hasBin: true - dev: true + tree-kill@1.2.2: {} - /true-case-path@2.2.1: - resolution: {integrity: sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==} - dev: true + true-case-path@2.2.1: {} - /ts-api-utils@2.0.0(typescript@5.7.2): - resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==} - engines: {node: '>=18.12'} - peerDependencies: - typescript: 5.7.2 + ts-api-utils@2.0.1(typescript@5.8.1-rc): dependencies: - typescript: 5.7.2 - dev: true + typescript: 5.8.1-rc - /ts-node@10.9.2(@types/node@18.19.70)(typescript@5.7.2): - resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} - hasBin: true - peerDependencies: - '@swc/core': '>=1.2.50' - '@swc/wasm': '>=1.2.50' - '@types/node': '*' - typescript: 5.7.2 - peerDependenciesMeta: - '@swc/core': - optional: true - '@swc/wasm': - optional: true + ts-node@10.9.2(@types/node@18.19.76)(typescript@5.8.1-rc): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 18.19.70 - acorn: 8.14.0 + '@types/node': 18.19.76 + acorn: 8.14.1 acorn-walk: 8.3.4 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.7.2 + typescript: 5.8.1-rc v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: true - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 - dev: true - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true + tslib@1.14.1: {} - /tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - dev: true + tslib@2.8.1: {} - /tsscmp@1.0.6: - resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} - engines: {node: '>=0.6.x'} - dev: true + tsscmp@1.0.6: {} - /tsutils@3.21.0(typescript@5.7.2): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: 5.7.2 + tsutils@3.21.0(typescript@5.8.1-rc): dependencies: tslib: 1.14.1 - typescript: 5.7.2 - dev: true + typescript: 5.8.1-rc - /tuf-js@3.0.1: - resolution: {integrity: sha512-+68OP1ZzSF84rTckf3FA95vJ1Zlx/uaXyiiKyPd1pA4rZNkpEvDAKmsu1xUSmbF/chCRYgZ6UZkDwC7PmzmAyA==} - engines: {node: ^18.17.0 || >=20.5.0} + tuf-js@3.0.1: dependencies: '@tufjs/models': 3.0.1 debug: 4.4.0(supports-color@10.0.0) make-fetch-happen: 14.0.3 transitivePeerDependencies: - supports-color - dev: true - /tunnel-agent@0.6.0: - resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + tunnel-agent@0.6.0: dependencies: safe-buffer: 5.2.1 - dev: true - /tweetnacl@0.14.5: - resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} - dev: true + tweetnacl@0.14.5: {} - /typanion@3.14.0: - resolution: {integrity: sha512-ZW/lVMRabETuYCd9O9ZvMhAh8GslSqaUjxmK/JLPCh6l73CvLBiuXswj/+7LdnWOgYsQ130FqLzFz5aGT4I3Ug==} - dev: true + typanion@3.14.0: {} - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - dev: true - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true + type-fest@0.20.2: {} - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true + type-fest@0.21.3: {} - /type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} + type-is@1.6.18: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - dev: true - /typed-array-buffer@1.0.3: - resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} - engines: {node: '>= 0.4'} + typed-array-buffer@1.0.3: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 is-typed-array: 1.1.15 - dev: true - /typed-array-byte-length@1.0.3: - resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} - engines: {node: '>= 0.4'} + typed-array-byte-length@1.0.3: dependencies: call-bind: 1.0.8 - for-each: 0.3.3 + for-each: 0.3.5 gopd: 1.2.0 has-proto: 1.2.0 is-typed-array: 1.1.15 - dev: true - /typed-array-byte-offset@1.0.4: - resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} - engines: {node: '>= 0.4'} + typed-array-byte-offset@1.0.4: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 - for-each: 0.3.3 + for-each: 0.3.5 gopd: 1.2.0 has-proto: 1.2.0 is-typed-array: 1.1.15 reflect.getprototypeof: 1.0.10 - dev: true - /typed-array-length@1.0.7: - resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} - engines: {node: '>= 0.4'} + typed-array-length@1.0.7: dependencies: call-bind: 1.0.8 - for-each: 0.3.3 + for-each: 0.3.5 gopd: 1.2.0 is-typed-array: 1.1.15 - possible-typed-array-names: 1.0.0 + possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - dev: true - /typed-assert@1.0.9: - resolution: {integrity: sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==} - dev: true + typed-assert@1.0.9: {} - /typed-graphqlify@3.1.6: - resolution: {integrity: sha512-Snlg1ZrokbkQuemOb4xjWWCJrNcOMeb2Ii0/BwMfwLCcJVNjygyqhrFkrYNvi4gDrwWFrGE0TvxxM+Slym2JMg==} - dev: true + typed-graphqlify@3.1.6: {} - /typed-query-selector@2.12.0: - resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} - dev: true + typed-query-selector@2.12.0: {} - /typescript@5.7.2: - resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + typescript@5.8.1-rc: {} - /typical@4.0.0: - resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==} - engines: {node: '>=8'} - dev: true + typical@4.0.0: {} - /typical@7.3.0: - resolution: {integrity: sha512-ya4mg/30vm+DOWfBg4YK3j2WD6TWtRkCbasOJr40CseYENzCUby/7rIvXA99JGsQHeNxLbnXdyLLxKSv3tauFw==} - engines: {node: '>=12.17'} - dev: true + typical@7.3.0: {} - /ua-parser-js@0.7.40: - resolution: {integrity: sha512-us1E3K+3jJppDBa3Tl0L3MOJiGhe1C6P0+nIvQAFYbxlMAx0h81eOwLmU57xgqToduDDPx3y5QsdjPfDu+FgOQ==} - hasBin: true - dev: true + ua-parser-js@0.7.40: {} - /ua-parser-js@1.0.40: - resolution: {integrity: sha512-z6PJ8Lml+v3ichVojCiB8toQJBuwR42ySM4ezjXIqXK3M0HczmKQ3LF4rhU55PfD99KEEXQG6yb7iOMyvYuHew==} - hasBin: true - dev: true + ua-parser-js@1.0.40: {} - /uglify-js@3.19.3: - resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} - engines: {node: '>=0.8.0'} - hasBin: true - dev: true + uglify-js@3.19.3: optional: true - /unbox-primitive@1.1.0: - resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} - engines: {node: '>= 0.4'} + unbox-primitive@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-bigints: 1.1.0 has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - dev: true - /unbzip2-stream@1.4.3: - resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + unbzip2-stream@1.4.3: dependencies: buffer: 5.7.1 through: 2.3.8 - dev: true - /undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - dev: true + undici-types@5.26.5: {} - /undici-types@6.20.0: - resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} - dev: true + undici-types@6.20.0: {} - /undici@7.2.0: - resolution: {integrity: sha512-klt+0S55GBViA9nsq48/NSCo4YX5mjydjypxD7UmHh/brMu8h/Mhd/F7qAeoH2NOO8SDTk6kjnTFc4WpzmfYpQ==} - engines: {node: '>=20.18.1'} - dev: true + undici@6.21.1: {} - /unenv@1.10.0: - resolution: {integrity: sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ==} + unenv@1.10.0: dependencies: - consola: 3.3.3 + consola: 3.4.0 defu: 6.1.4 mime: 3.0.0 - node-fetch-native: 1.6.4 + node-fetch-native: 1.6.6 pathe: 1.1.2 - dev: true - /unicode-canonical-property-names-ecmascript@2.0.1: - resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} - engines: {node: '>=4'} - dev: true + unicode-canonical-property-names-ecmascript@2.0.1: {} - /unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} + unicode-match-property-ecmascript@2.0.0: dependencies: unicode-canonical-property-names-ecmascript: 2.0.1 unicode-property-aliases-ecmascript: 2.1.0 - dev: true - /unicode-match-property-value-ecmascript@2.2.0: - resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} - engines: {node: '>=4'} - dev: true + unicode-match-property-value-ecmascript@2.2.0: {} - /unicode-properties@1.4.1: - resolution: {integrity: sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg==} + unicode-properties@1.4.1: dependencies: base64-js: 1.5.1 unicode-trie: 2.0.0 - dev: true - /unicode-property-aliases-ecmascript@2.1.0: - resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} - engines: {node: '>=4'} - dev: true + unicode-property-aliases-ecmascript@2.1.0: {} - /unicode-trie@2.0.0: - resolution: {integrity: sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==} + unicode-trie@2.0.0: dependencies: pako: 0.2.9 tiny-inflate: 1.0.3 - dev: true - /unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} - dev: true + unicorn-magic@0.3.0: {} - /unique-filename@4.0.0: - resolution: {integrity: sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==} - engines: {node: ^18.17.0 || >=20.5.0} + unique-filename@4.0.0: dependencies: unique-slug: 5.0.0 - dev: true - /unique-slug@5.0.0: - resolution: {integrity: sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==} - engines: {node: ^18.17.0 || >=20.5.0} + unique-slug@5.0.0: dependencies: imurmurhash: 0.1.4 - dev: true - /universal-user-agent@7.0.2: - resolution: {integrity: sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==} - dev: true + universal-user-agent@7.0.2: {} - /universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - dev: true + universalify@0.1.2: {} - /universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - dev: true + universalify@2.0.1: {} - /unix-crypt-td-js@1.1.4: - resolution: {integrity: sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw==} - dev: true + unix-crypt-td-js@1.1.4: {} - /unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - dev: true + unpipe@1.0.0: {} - /update-browserslist-db@1.1.1(browserslist@4.24.3): - resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + update-browserslist-db@1.1.3(browserslist@4.24.4): dependencies: - browserslist: 4.24.3 + browserslist: 4.24.4 escalade: 3.2.0 picocolors: 1.1.1 - dev: true - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: punycode: 2.3.1 - dev: true - /urijs@1.19.11: - resolution: {integrity: sha512-HXgFDgDommxn5/bIv0cnQZsPhHDA90NPHD6+c/v21U5+Sx5hoP8+dP9IZXBU1gIfvdRfhG8cel9QNPeionfcCQ==} - dev: true - - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true + urijs@1.19.11: {} - /utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - dev: true + util-deprecate@1.0.2: {} - /uuid@11.0.4: - resolution: {integrity: sha512-IzL6VtTTYcAhA/oghbFJ1Dkmqev+FpQWnCBaKq/gUluLxliWvO8DPFWfIviRmYbtaavtSQe4WBL++rFjdcGWEg==} - hasBin: true - dev: true + utils-merge@1.0.1: {} - /uuid@3.4.0: - resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - hasBin: true - dev: true + uuid@11.1.0: {} - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: true + uuid@3.4.0: {} - /uuid@9.0.1: - resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} - hasBin: true - dev: true + uuid@8.3.2: {} - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true + uuid@9.0.1: {} - /v8-to-istanbul@7.1.2: - resolution: {integrity: sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==} - engines: {node: '>=10.10.0'} - dependencies: - '@types/istanbul-lib-coverage': 2.0.6 - convert-source-map: 1.9.0 - source-map: 0.7.4 - dev: true + v8-compile-cache-lib@3.0.1: {} - /v8-to-istanbul@9.3.0: - resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} - engines: {node: '>=10.12.0'} + v8-to-istanbul@9.3.0: dependencies: '@jridgewell/trace-mapping': 0.3.25 '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 - dev: true - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - dev: true - /validate-npm-package-name@6.0.0: - resolution: {integrity: sha512-d7KLgL1LD3U3fgnvWEY1cQXoO/q6EQ1BSz48Sa149V/5zVTAbgmZIpyI8TRi6U9/JNyeYLlTKsEMPtLC27RFUg==} - engines: {node: ^18.17.0 || >=20.5.0} - dev: true + validate-npm-package-name@6.0.0: {} - /validator@13.12.0: - resolution: {integrity: sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==} - engines: {node: '>= 0.10'} - dev: true + validator@13.12.0: {} - /vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - dev: true + vary@1.1.2: {} - /verdaccio-audit@13.0.0-next-8.7: - resolution: {integrity: sha512-kd6YdrDztkP1/GDZT7Ue2u41iGPvM9y+5aaUbIBUPvTY/YVv57K6MaCMfn9C/I+ZL4R7XOTSxTtWvz3JK4QrNg==} - engines: {node: '>=18'} + verdaccio-audit@13.0.0-next-8.7(encoding@0.1.13): dependencies: '@verdaccio/config': 8.0.0-next-8.7 '@verdaccio/core': 8.0.0-next-8.7 express: 4.21.2 https-proxy-agent: 5.0.1(supports-color@10.0.0) - node-fetch: 2.6.7 + node-fetch: 2.6.7(encoding@0.1.13) transitivePeerDependencies: - encoding - supports-color - dev: true - /verdaccio-auth-memory@10.2.2: - resolution: {integrity: sha512-JCAnSqwq2l1UPt0hQcPn1B3X9mYpJ5zMsDvuDdmnlWLkrIDx2Wev5fluW0HC9hcFMITFl/DJj/DyzYOOqwhFSQ==} - engines: {node: '>=8'} + verdaccio-auth-memory@10.2.2: dependencies: '@verdaccio/commons-api': 10.2.0 - dev: true - /verdaccio-htpasswd@13.0.0-next-8.7: - resolution: {integrity: sha512-znyFnwt59mLKTAu6eHJrfWP07iaHUlYiQN7QoBo8KMAOT1AecUYreBqs93oKHdIOzjTI8j6tQLg57DpeVS5vgg==} - engines: {node: '>=18'} + verdaccio-htpasswd@13.0.0-next-8.7: dependencies: '@verdaccio/core': 8.0.0-next-8.7 '@verdaccio/file-locking': 13.0.0-next-8.2 @@ -14451,12 +16612,8 @@ packages: unix-crypt-td-js: 1.1.4 transitivePeerDependencies: - supports-color - dev: true - /verdaccio@6.0.5(typanion@3.14.0): - resolution: {integrity: sha512-hv+v4mtG/rcNidGUHXAtNuVySiPE3/PM+7dYye5jCDrhCUmRJYOtnvDe/Ym1ZE/twti39g6izVRxEkjnSp52gA==} - engines: {node: '>=18'} - hasBin: true + verdaccio@6.0.5(encoding@0.1.13): dependencies: '@cypress/request': 3.0.7 '@verdaccio/auth': 8.0.0-next-8.7 @@ -14474,7 +16631,7 @@ packages: '@verdaccio/utils': 7.0.1-next-8.1 JSONStream: 1.3.5 async: 3.2.6 - clipanion: 4.0.0-rc.4(typanion@3.14.0) + clipanion: 4.0.0-rc.4 compression: 1.7.5 cors: 2.8.5 debug: 4.4.0(supports-color@10.0.0) @@ -14493,171 +16650,71 @@ packages: pkginfo: 0.4.1 semver: 7.6.3 validator: 13.12.0 - verdaccio-audit: 13.0.0-next-8.7 + verdaccio-audit: 13.0.0-next-8.7(encoding@0.1.13) verdaccio-htpasswd: 13.0.0-next-8.7 transitivePeerDependencies: - encoding - supports-color - - typanion - dev: true - /verror@1.10.0: - resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} - engines: {'0': node >=0.6.0} + verror@1.10.0: dependencies: assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.4.1 - dev: true - - /vite@6.0.3(@types/node@18.19.70)(less@4.2.1)(sass@1.83.0)(terser@5.37.0): - resolution: {integrity: sha512-Cmuo5P0ENTN6HxLSo6IHsjCLn/81Vgrp81oaiFFMRa8gGDj5xEjIcEpf2ZymZtZR8oU0P2JX5WuUp/rlXcHkAw==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - 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 - dependencies: - '@types/node': 18.19.70 - esbuild: 0.24.2 - less: 4.2.1 - postcss: 8.4.49 - rollup: 4.30.1 - sass: 1.83.0 - terser: 5.37.0 - optionalDependencies: - fsevents: 2.3.3 - dev: true - - /vite@6.0.7(@types/node@18.19.70)(less@4.2.1)(sass@1.83.1)(terser@5.37.0): - resolution: {integrity: sha512-RDt8r/7qx9940f8FcOIAH9PTViRrghKaK2K1jY3RaAURrEUbm9Du1mJ72G+jlhtG3WwodnfzY8ORQZbBavZEAQ==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - 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 + core-util-is: 1.0.2 + extsprintf: 1.4.1 + + vite@6.2.3(@types/node@18.19.76)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0): dependencies: - '@types/node': 18.19.70 - esbuild: 0.24.2 - less: 4.2.1 - postcss: 8.4.49 - rollup: 4.30.1 - sass: 1.83.1 - terser: 5.37.0 + esbuild: 0.25.1 + postcss: 8.5.3 + rollup: 4.34.8 optionalDependencies: + '@types/node': 18.19.76 fsevents: 2.3.3 - dev: true + jiti: 1.21.7 + less: 4.2.2 + sass: 1.85.0 + terser: 5.39.0 + yaml: 2.7.0 - /void-elements@2.0.1: - resolution: {integrity: sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==} - engines: {node: '>=0.10.0'} - dev: true + vite@6.2.3(@types/node@22.13.10)(jiti@1.21.7)(less@4.2.2)(sass@1.85.0)(terser@5.39.0)(yaml@2.7.0): + dependencies: + esbuild: 0.25.1 + postcss: 8.5.3 + rollup: 4.34.8 + optionalDependencies: + '@types/node': 22.13.10 + fsevents: 2.3.3 + jiti: 1.21.7 + less: 4.2.2 + sass: 1.85.0 + terser: 5.39.0 + yaml: 2.7.0 - /watchpack@2.4.2: - resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} - engines: {node: '>=10.13.0'} + void-elements@2.0.1: {} + + watchpack@2.4.2: dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - dev: true - /wbuf@1.7.3: - resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + wbuf@1.7.3: dependencies: minimalistic-assert: 1.0.1 - dev: true - /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + wcwidth@1.0.1: dependencies: defaults: 1.0.4 - dev: true - /weak-lru-cache@1.2.2: - resolution: {integrity: sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==} - dev: true + weak-lru-cache@1.2.2: {} - /web-streams-polyfill@3.3.3: - resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} - engines: {node: '>= 8'} - dev: true + web-streams-polyfill@3.3.3: {} - /webdriver-js-extender@2.1.0: - resolution: {integrity: sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ==} - engines: {node: '>=6.9.x'} + webdriver-js-extender@2.1.0: dependencies: '@types/selenium-webdriver': 3.0.26 selenium-webdriver: 3.6.0 - dev: true - /webdriver-manager@12.1.9: - resolution: {integrity: sha512-Yl113uKm8z4m/KMUVWHq1Sjtla2uxEBtx2Ue3AmIlnlPAKloDn/Lvmy6pqWCUersVISpdMeVpAaGbNnvMuT2LQ==} - engines: {node: '>=6.9.x'} - hasBin: true + webdriver-manager@12.1.9: dependencies: adm-zip: 0.5.16 chalk: 1.1.3 @@ -14670,47 +16727,23 @@ packages: rimraf: 2.7.1 semver: 5.7.2 xml2js: 0.4.23 - dev: true - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: true + webidl-conversions@3.0.1: {} - /webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} - dev: true + webidl-conversions@7.0.0: {} - /webpack-dev-middleware@7.4.2(webpack@5.97.1): - resolution: {integrity: sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==} - engines: {node: '>= 18.12.0'} - peerDependencies: - webpack: ^5.0.0 - peerDependenciesMeta: - webpack: - optional: true + webpack-dev-middleware@7.4.2(webpack@5.98.0(esbuild@0.25.1)): dependencies: colorette: 2.0.20 - memfs: 4.15.3 + memfs: 4.17.0 mime-types: 2.1.35 on-finished: 2.4.1 range-parser: 1.2.1 schema-utils: 4.3.0 - webpack: 5.97.1(esbuild@0.24.2) - dev: true + optionalDependencies: + webpack: 5.98.0(esbuild@0.25.1) - /webpack-dev-server@5.2.0(debug@4.4.0)(webpack@5.97.1): - resolution: {integrity: sha512-90SqqYXA2SK36KcT6o1bvwvZfJFcmoamqeJY7+boioffX9g9C0wjjJRGUrQIuh43pb0ttX7+ssavmj/WN2RHtA==} - engines: {node: '>= 18.12.0'} - hasBin: true - peerDependencies: - webpack: ^5.0.0 - webpack-cli: '*' - peerDependenciesMeta: - webpack: - optional: true - webpack-cli: - optional: true + webpack-dev-server@5.2.0(debug@4.4.0)(webpack@5.98.0(esbuild@0.25.1)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -14718,18 +16751,18 @@ packages: '@types/serve-index': 1.9.4 '@types/serve-static': 1.15.7 '@types/sockjs': 0.3.36 - '@types/ws': 8.5.13 + '@types/ws': 8.18.0 ansi-html-community: 0.0.8 bonjour-service: 1.3.0 chokidar: 3.6.0 colorette: 2.0.20 - compression: 1.7.5 + compression: 1.8.0 connect-history-api-fallback: 2.0.0 express: 4.21.2 graceful-fs: 4.2.11 http-proxy-middleware: 2.0.7(@types/express@4.17.21)(debug@4.4.0) ipaddr.js: 2.2.0 - launch-editor: 2.9.1 + launch-editor: 2.10.0 open: 10.1.0 p-retry: 6.2.1 schema-utils: 4.3.0 @@ -14737,63 +16770,40 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.97.1(esbuild@0.24.2) - webpack-dev-middleware: 7.4.2(webpack@5.97.1) - ws: 8.18.0 + webpack-dev-middleware: 7.4.2(webpack@5.98.0(esbuild@0.25.1)) + ws: 8.18.1 + optionalDependencies: + webpack: 5.98.0(esbuild@0.25.1) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - dev: true - /webpack-merge@6.0.1: - resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==} - engines: {node: '>=18.0.0'} + webpack-merge@6.0.1: dependencies: clone-deep: 4.0.1 flat: 5.0.2 wildcard: 2.0.1 - dev: true - /webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - dev: true + webpack-sources@3.2.3: {} - /webpack-subresource-integrity@5.1.0(webpack@5.97.1): - resolution: {integrity: sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==} - engines: {node: '>= 12'} - peerDependencies: - html-webpack-plugin: '>= 5.0.0-beta.1 < 6' - webpack: ^5.12.0 - peerDependenciesMeta: - html-webpack-plugin: - optional: true + webpack-subresource-integrity@5.1.0(webpack@5.98.0(esbuild@0.25.1)): dependencies: typed-assert: 1.0.9 - webpack: 5.97.1(esbuild@0.24.2) - dev: true + webpack: 5.98.0(esbuild@0.25.1) - /webpack@5.97.1(esbuild@0.24.2): - resolution: {integrity: sha512-EksG6gFY3L1eFMROS/7Wzgrii5mBAFe4rIr3r2BTfo7bcc+DWwFZ4OJ/miOuHJO/A85HwyI4eQ0F6IKXesO7Fg==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true + webpack@5.98.0(esbuild@0.25.1): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.6 '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/wasm-edit': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - acorn: 8.14.0 - browserslist: 4.24.3 + acorn: 8.14.1 + browserslist: 4.24.4 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.18.0 + enhanced-resolve: 5.18.1 es-module-lexer: 1.6.0 eslint-scope: 5.1.1 events: 3.3.0 @@ -14803,325 +16813,166 @@ packages: loader-runner: 4.3.0 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 3.3.0 + schema-utils: 4.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.11(esbuild@0.24.2)(webpack@5.97.1) + terser-webpack-plugin: 5.3.14(esbuild@0.25.1)(webpack@5.98.0(esbuild@0.25.1)) watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - dev: true - /websocket-driver@0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} - engines: {node: '>=0.8.0'} + websocket-driver@0.7.4: dependencies: - http-parser-js: 0.5.8 + http-parser-js: 0.5.9 safe-buffer: 5.2.1 websocket-extensions: 0.1.4 - dev: true - /websocket-extensions@0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} - engines: {node: '>=0.8.0'} - dev: true + websocket-extensions@0.1.4: {} - /whatwg-url@14.1.0: - resolution: {integrity: sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==} - engines: {node: '>=18'} + whatwg-url@14.1.1: dependencies: tr46: 5.0.0 webidl-conversions: 7.0.0 - dev: true - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 - dev: true - /which-boxed-primitive@1.1.1: - resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} - engines: {node: '>= 0.4'} + which-boxed-primitive@1.1.1: dependencies: is-bigint: 1.1.0 - is-boolean-object: 1.2.1 + is-boolean-object: 1.2.2 is-number-object: 1.1.1 is-string: 1.1.1 is-symbol: 1.1.1 - dev: true - /which-builtin-type@1.2.1: - resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} - engines: {node: '>= 0.4'} + which-builtin-type@1.2.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 function.prototype.name: 1.1.8 has-tostringtag: 1.0.2 - is-async-function: 2.1.0 + is-async-function: 2.1.1 is-date-object: 1.1.0 is-finalizationregistry: 1.1.1 is-generator-function: 1.1.0 is-regex: 1.2.1 - is-weakref: 1.1.0 + is-weakref: 1.1.1 isarray: 2.0.5 which-boxed-primitive: 1.1.1 which-collection: 1.0.2 - which-typed-array: 1.1.18 - dev: true + which-typed-array: 1.1.19 - /which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} + which-collection@1.0.2: dependencies: is-map: 2.0.3 is-set: 2.0.3 is-weakmap: 2.0.2 is-weakset: 2.0.4 - dev: true - /which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - dev: true + which-module@2.0.1: {} - /which-typed-array@1.1.18: - resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.19: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 - call-bound: 1.0.3 - for-each: 0.3.3 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 gopd: 1.2.0 has-tostringtag: 1.0.2 - dev: true - - /which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - dependencies: - isexe: 2.0.0 - dev: true - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@1.3.1: dependencies: isexe: 2.0.0 - dev: true - /which@3.0.1: - resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /which@5.0.0: - resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==} - engines: {node: ^18.17.0 || >=20.5.0} - hasBin: true + which@5.0.0: dependencies: isexe: 3.1.1 - dev: true - /wildcard@2.0.1: - resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} - dev: true + wildcard@2.0.1: {} - /word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - dev: true + word-wrap@1.2.5: {} - /wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - dev: true + wordwrap@1.0.0: {} - /wordwrapjs@5.1.0: - resolution: {integrity: sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==} - engines: {node: '>=12.17'} - dev: true + wordwrapjs@5.1.0: {} - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + wrap-ansi@8.1.0: dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 - dev: true - /wrap-ansi@9.0.0: - resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} - engines: {node: '>=18'} + wrap-ansi@9.0.0: dependencies: ansi-styles: 6.2.1 string-width: 7.2.0 strip-ansi: 7.1.0 - dev: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true + wrappy@1.0.2: {} - /ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true + ws@7.5.10: {} - /ws@8.17.1: - resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true + ws@8.17.1: {} - /ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true + ws@8.18.1: {} - /ws@8.9.0: - resolution: {integrity: sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true + ws@8.9.0: {} - /xhr2@0.2.1: - resolution: {integrity: sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==} - engines: {node: '>= 6'} - dev: true + xhr2@0.2.1: {} - /xml2js@0.4.23: - resolution: {integrity: sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==} - engines: {node: '>=4.0.0'} + xml2js@0.4.23: dependencies: sax: 1.4.1 xmlbuilder: 11.0.1 - dev: true - - /xmlbuilder@11.0.1: - resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} - engines: {node: '>=4.0'} - dev: true - /xmlbuilder@12.0.0: - resolution: {integrity: sha512-lMo8DJ8u6JRWp0/Y4XLa/atVDr75H9litKlb2E5j3V3MesoL50EBgZDWoLT3F/LztVnG67GjPXLZpqcky/UMnQ==} - engines: {node: '>=6.0'} - dev: true + xmlbuilder@11.0.1: {} - /xmlhttprequest-ssl@2.1.2: - resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==} - engines: {node: '>=0.4.0'} - dev: true + xmlhttprequest-ssl@2.1.2: {} - /xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - dev: true + xtend@4.0.2: {} - /y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - dev: true + y18n@4.0.3: {} - /y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - dev: true + y18n@5.0.8: {} - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true + yallist@3.1.1: {} - /yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: true + yallist@4.0.0: {} - /yallist@5.0.0: - resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} - engines: {node: '>=18'} - dev: true + yallist@5.0.0: {} - /yaml@2.7.0: - resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} - engines: {node: '>= 14'} - hasBin: true - dev: true + yaml@2.7.0: {} - /yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} + yargs-parser@18.1.3: dependencies: camelcase: 5.3.1 decamelize: 1.2.0 - dev: true - /yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} - dev: true + yargs-parser@20.2.9: {} - /yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - dev: true + yargs-parser@21.1.1: {} - /yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} + yargs@15.4.1: dependencies: cliui: 6.0.0 decamelize: 1.2.0 @@ -15134,11 +16985,8 @@ packages: which-module: 2.0.1 y18n: 4.0.3 yargs-parser: 18.1.3 - dev: true - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} + yargs@16.2.0: dependencies: cliui: 7.0.4 escalade: 3.2.0 @@ -15147,11 +16995,8 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 20.2.9 - dev: true - /yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} + yargs@17.7.2: dependencies: cliui: 8.0.1 escalade: 3.2.0 @@ -15160,174 +17005,22 @@ packages: string-width: 4.2.3 y18n: 5.0.8 yargs-parser: 21.1.1 - dev: true - /yauzl@2.10.0: - resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + yauzl@2.10.0: dependencies: buffer-crc32: 0.2.13 fd-slicer: 1.1.0 - dev: true - - /ylru@1.4.0: - resolution: {integrity: sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==} - engines: {node: '>= 4.0.0'} - dev: true - - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true - - /yocto-queue@1.1.1: - resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} - engines: {node: '>=12.20'} - dev: true + ylru@1.4.0: {} - /yoctocolors-cjs@2.1.2: - resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} - engines: {node: '>=18'} - dev: true + yn@3.1.1: {} - /zod@3.23.8: - resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} - dev: true + yocto-queue@0.1.0: {} - /zone.js@0.15.0: - resolution: {integrity: sha512-9oxn0IIjbCZkJ67L+LkhYWRyAy7axphb3VgE2MBDlOqnmHMPWGYMxJxBYFueFq/JGY2GMwS0rU+UCLunEmy5UA==} - dev: true + yocto-queue@1.2.0: {} - github.com/angular/bazel-builds/169e71f64fa706648c60d77abb8d4cab1ca22f55(@angular/compiler-cli@19.1.0-rc.0)(@bazel/concatjs@5.8.1)(@bazel/worker@5.8.1)(@rollup/plugin-commonjs@28.0.2)(@rollup/plugin-node-resolve@13.3.0)(@types/node@18.19.70)(rollup-plugin-sourcemaps@0.6.3)(rollup@4.30.1)(terser@5.37.0)(typescript@5.7.2): - resolution: {tarball: https://codeload.github.com/angular/bazel-builds/tar.gz/169e71f64fa706648c60d77abb8d4cab1ca22f55} - id: github.com/angular/bazel-builds/169e71f64fa706648c60d77abb8d4cab1ca22f55 - name: '@angular/bazel' - version: 19.2.0-next.0 - engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} - hasBin: true - peerDependencies: - '@angular/compiler-cli': 19.2.0-next.0+sha-e689aae - '@bazel/concatjs': ^5.3.0 - '@bazel/worker': ^5.3.0 - '@rollup/plugin-commonjs': ^28.0.0 - '@rollup/plugin-node-resolve': ^13.0.4 - rollup: ^2.56.3 - rollup-plugin-sourcemaps: ^0.6.3 - terser: ^5.9.0 - typescript: 5.7.2 - peerDependenciesMeta: - terser: - optional: true - dependencies: - '@angular/compiler-cli': 19.1.0-rc.0(@angular/compiler@19.1.0-rc.0)(typescript@5.7.2) - '@bazel/concatjs': 5.8.1(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-junit-reporter@2.0.1)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(typescript@5.7.2) - '@bazel/worker': 5.8.1 - '@microsoft/api-extractor': 7.49.0(@types/node@18.19.70) - '@rollup/plugin-commonjs': 28.0.2(rollup@4.30.1) - '@rollup/plugin-node-resolve': 13.3.0(rollup@4.30.1) - magic-string: 0.30.17 - rollup: 4.30.1 - rollup-plugin-sourcemaps: 0.6.3(@types/node@18.19.70)(rollup@4.30.1) - terser: 5.37.0 - tslib: 2.8.1 - typescript: 5.7.2 - transitivePeerDependencies: - - '@types/node' - dev: true + yoctocolors-cjs@2.1.2: {} - github.com/angular/dev-infra-private-build-tooling-builds/67627d22c2fef6e3cb128f65723e19eb35e02eaa(@angular/compiler-cli@19.1.0-rc.0)(@angular/compiler@19.1.0-rc.0)(@angular/localize@19.1.0-rc.0)(@angular/platform-server@19.1.0-rc.0)(@angular/service-worker@19.1.0-rc.0)(chokidar@4.0.3)(debug@4.4.0)(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-junit-reporter@2.0.1)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(less@4.2.1)(postcss@8.4.49)(rxjs@7.8.1)(terser@5.37.0)(zone.js@0.15.0): - resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-build-tooling-builds/tar.gz/67627d22c2fef6e3cb128f65723e19eb35e02eaa} - id: github.com/angular/dev-infra-private-build-tooling-builds/67627d22c2fef6e3cb128f65723e19eb35e02eaa - name: '@angular/build-tooling' - version: 0.0.0-33ed0671560a851374f6f61ba4f7f5dcc1b284f8 - dependencies: - '@angular/benchpress': 0.3.0(rxjs@7.8.1)(zone.js@0.15.0) - '@angular/build': 19.1.0-next.2(@angular/compiler-cli@19.1.0-rc.0)(@angular/compiler@19.1.0-rc.0)(@angular/localize@19.1.0-rc.0)(@angular/platform-server@19.1.0-rc.0)(@angular/service-worker@19.1.0-rc.0)(@types/node@18.19.70)(chokidar@4.0.3)(less@4.2.1)(postcss@8.4.49)(terser@5.37.0)(typescript@5.7.2) - '@babel/core': 7.26.0 - '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.26.0) - '@bazel/buildifier': 6.3.3 - '@bazel/concatjs': 5.8.1(karma-chrome-launcher@3.2.0)(karma-firefox-launcher@2.1.3)(karma-jasmine@5.1.0)(karma-junit-reporter@2.0.1)(karma-requirejs@1.1.0)(karma-sourcemap-loader@0.4.0)(karma@6.4.4)(typescript@5.7.2) - '@bazel/esbuild': 5.8.1 - '@bazel/protractor': 5.8.1(protractor@7.0.0) - '@bazel/runfiles': 5.8.1 - '@bazel/terser': 5.8.1(terser@5.37.0) - '@bazel/typescript': 5.8.1(typescript@5.7.2) - '@microsoft/api-extractor': 7.49.0(@types/node@18.19.70) - '@types/browser-sync': 2.29.0 - '@types/minimatch': 5.1.2 - '@types/node': 18.19.70 - '@types/selenium-webdriver': 4.1.27 - '@types/send': 0.17.4 - '@types/tmp': 0.2.6 - '@types/ws': 8.5.13 - '@types/yargs': 17.0.33 - browser-sync: 3.0.3(debug@4.4.0) - prettier: 3.4.2 - protractor: 7.0.0 - selenium-webdriver: 4.27.0 - send: 1.1.0 - source-map: 0.7.4 - tmp: 0.2.3 - true-case-path: 2.2.1 - tslib: 2.8.1 - typescript: 5.7.2 - uuid: 11.0.4 - yargs: 17.7.2 - transitivePeerDependencies: - - '@angular/compiler' - - '@angular/compiler-cli' - - '@angular/localize' - - '@angular/platform-server' - - '@angular/service-worker' - - '@angular/ssr' - - bufferutil - - chokidar - - debug - - jiti - - karma - - karma-chrome-launcher - - karma-firefox-launcher - - karma-jasmine - - karma-junit-reporter - - karma-requirejs - - karma-sourcemap-loader - - less - - lightningcss - - postcss - - rxjs - - sass-embedded - - stylus - - sugarss - - supports-color - - tailwindcss - - terser - - tsx - - utf-8-validate - - yaml - - zone.js - dev: true + zod@3.24.2: {} - github.com/angular/dev-infra-private-ng-dev-builds/ff93dd98d8d10bfab0f94495fe631485a6a772e1: - resolution: {tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/ff93dd98d8d10bfab0f94495fe631485a6a772e1} - name: '@angular/ng-dev' - version: 0.0.0-33ed0671560a851374f6f61ba4f7f5dcc1b284f8 - hasBin: true - dependencies: - '@google-cloud/spanner': 7.17.1(supports-color@10.0.0) - '@octokit/rest': 21.0.2 - '@types/semver': 7.5.8 - '@types/supports-color': 8.1.3 - '@yarnpkg/lockfile': 1.1.0 - chalk: 5.4.1 - semver: 7.6.3 - supports-color: 10.0.0 - typed-graphqlify: 3.1.6 - typescript: 5.7.2 - yaml: 2.7.0 - transitivePeerDependencies: - - encoding - dev: true + zone.js@0.15.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index d05a7e7dc84a..d2077a149cc7 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,2 +1,16 @@ packages: - . + - packages/angular_devkit/architect + - packages/angular_devkit/architect_cli + - packages/angular_devkit/core + - packages/angular_devkit/build_webpack + - packages/angular_devkit/build_angular + - packages/angular_devkit/schematics + - packages/angular_devkit/schematics_cli + - packages/angular/cli + - packages/angular/pwa + - packages/angular/ssr + - packages/angular/build + - packages/schematics/angular + - packages/ngtools/webpack + - modules/testing/builder diff --git a/renovate.json b/renovate.json index c1436d6c68a8..6fdce571f7d4 100644 --- a/renovate.json +++ b/renovate.json @@ -8,22 +8,20 @@ "prHourlyLimit": 2, "labels": ["target: minor", "action: merge"], "timezone": "America/Tijuana", - "postUpgradeTasks": { - "commands": [ - "git restore .yarn/releases/yarn-4.5.0.cjs pnpm-lock.yaml", - "yarn install --immutable", - "yarn bazel run @npm2//:sync || true" - ], - "fileFilters": [".aspect/rules/external_repository_action_cache/**/*", "pnpm-lock.yaml"], - "executionMode": "branch" - }, "lockFileMaintenance": { "enabled": true }, "dependencyDashboard": true, "schedule": ["after 10:00pm every weekday", "before 4:00am every weekday", "every weekend"], "baseBranches": ["main"], - "ignoreDeps": ["@types/node", "@types/express", "build_bazel_rules_nodejs", "rules_pkg", "yarn"], + "ignoreDeps": [ + "@angular/build-tooling", + "@types/node", + "@types/express", + "build_bazel_rules_nodejs", + "rules_pkg", + "yarn" + ], "includePaths": [ "WORKSPACE", "package.json", @@ -37,11 +35,7 @@ "schedule": ["before 4:00am on the first day of the month"] }, { - "matchCurrentVersion": "0.0.0-PLACEHOLDER", - "enabled": false - }, - { - "matchCurrentVersion": "0.0.0-EXPERIMENTAL-PLACEHOLDER", + "matchCurrentVersion": "/0\\.0\\.0-/", "enabled": false }, { diff --git a/scripts/build-packages-dist.mts b/scripts/build-packages-dist.mts index 8bb720a97f27..5bdd7b907048 100644 --- a/scripts/build-packages-dist.mts +++ b/scripts/build-packages-dist.mts @@ -26,12 +26,12 @@ const releaseTargetTag = 'release-package'; const projectDir = join(dirname(fileURLToPath(import.meta.url)), '../'); /** Command that runs Bazel. */ -const bazelCmd = process.env.BAZEL || `yarn bazel`; +const bazelCmd = process.env.BAZEL || `pnpm -s bazel`; /** Command that queries Bazel for all release package targets. */ const queryPackagesCmd = `${bazelCmd} query --output=label "attr('tags', '\\[.*${releaseTargetTag}.*\\]', //packages/...) ` + - `intersect kind('ng_package|pkg_npm', //packages/...)"`; + `intersect kind('ng_package|pkg_npm|^_npm_package rule$', //packages/...)"`; /** Path for the default distribution output directory. */ const defaultDistPath = join(projectDir, 'dist/releases'); diff --git a/scripts/build-schema.mts b/scripts/build-schema.mts index 08ea76496735..2f7553e24f51 100644 --- a/scripts/build-schema.mts +++ b/scripts/build-schema.mts @@ -13,7 +13,7 @@ import { fileURLToPath } from 'node:url'; const __dirname = dirname(fileURLToPath(import.meta.url)); const baseDir = resolve(`${__dirname}/..`); -const bazelCmd = process.env.BAZEL ?? `yarn bazel`; +const bazelCmd = process.env.BAZEL ?? `pnpm -s bazel`; const distRoot = join(baseDir, '/dist-schema/'); function _clean() { @@ -38,7 +38,7 @@ function _exec(cmd: string, captureStdout: boolean): Promise<string> { proc.stdout.on('data', (data) => { console.info(data.toString().trim()); if (captureStdout) { - output += data.toString().trim(); + output += data.toString(); } }); proc.stderr.on('data', (data) => console.info(data.toString().trim())); diff --git a/scripts/build.mts b/scripts/build.mts index 6c5312759df6..1b15c026d480 100644 --- a/scripts/build.mts +++ b/scripts/build.mts @@ -14,7 +14,7 @@ import { fileURLToPath } from 'node:url'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const baseDir = resolve(`${__dirname}/..`); -const bazelCmd = process.env.BAZEL ?? `yarn --cwd "${baseDir}" bazel`; +const bazelCmd = process.env.BAZEL ?? `pnpm -s bazel`; const distRoot = join(baseDir, '/dist'); type BuildMode = 'local' | 'snapshot' | 'release'; @@ -66,6 +66,7 @@ function _exec(cmd: string, captureStdout: boolean, logger: Console): Promise<st const proc = spawn(cmd, { stdio: 'pipe', shell: true, + cwd: baseDir, }); let output = ''; diff --git a/scripts/circular-deps-test.conf.mjs b/scripts/circular-deps-test.conf.mjs index a2f489825a36..790be477858d 100644 --- a/scripts/circular-deps-test.conf.mjs +++ b/scripts/circular-deps-test.conf.mjs @@ -15,7 +15,7 @@ export const baseDir = '../'; export const goldenFile = '../goldens/circular-deps/packages.json'; export const glob = '../packages/**/*.ts'; // Command that will be displayed if the golden needs to be updated. -export const approveCommand = 'yarn ts-circular-deps approve'; +export const approveCommand = 'pnpm ts-circular-deps approve'; /** * Custom module resolver that maps specifiers for local packages folder. diff --git a/scripts/diff-release-package.mts b/scripts/diff-release-package.mts new file mode 100644 index 000000000000..0cc4524ad03d --- /dev/null +++ b/scripts/diff-release-package.mts @@ -0,0 +1,139 @@ +/** + * @license + * Copyright Google LLC All Rights Reserved. + * + * Use of this source code is governed by an MIT-style license that can be + * found in the LICENSE file at https://angular.dev/license + */ + +/** + * Script that can be used to compare the local `npm_package` snapshot artifact + * with the snapshot artifact from GitHub at upstream `HEAD`. + * + * This is useful during the `rules_js` migration to verify the npm artifact + * doesn't differ unexpectedly. + * + * Example command: pnpm diff-release-package @angular/cli + */ + +import { GitClient } from '@angular/ng-dev'; +import childProcess from 'node:child_process'; +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import sh from 'shelljs'; + +// Do not remove `.git` as we use Git for comparisons later. +// Also preserve `uniqueId` as it's irrelevant for the diff and not included via Bazel. +// The `README.md` is also put together outside of Bazel, so ignore it too. +const SKIP_FILES = ['README.md', 'uniqueId', '.git']; + +const packageName = process.argv[2]; +if (!packageName) { + console.error('Expected package name to be specified.'); + process.exit(1); +} + +try { + await main(packageName); +} catch (e) { + console.error(e); + process.exitCode = 1; +} + +async function main(packageName: string) { + const bazel = process.env.BAZEL ?? 'bazel'; + const git = await GitClient.get(); + const monorepoData = JSON.parse(fs.readFileSync('./.monorepo.json', 'utf-8')); + const targetDir = packageName.replace(/^@/g, '').replace(/-/g, '_'); + + // `help/` is only generated in snapshots outside of Bazel. Ignore it when + // diffing the Angular CLI package + // https://github.com/angular/angular-cli/blob/main/scripts/json-help.mts#L16-L17. + if (packageName === '@angular/cli') { + SKIP_FILES.push('help'); + } + + const snapshotRepoName = monorepoData.packages[packageName]?.snapshotRepo; + const tmpDir = await fs.promises.mkdtemp( + path.join(os.tmpdir(), `diff-release-package-${snapshotRepoName.replace(/\//g, '_')}`), + ); + + console.log(`Cloning snapshot repo (${snapshotRepoName}) into ${tmpDir}..`); + git.run(['clone', `https://github.com/${snapshotRepoName}.git`, tmpDir]); + console.log(`--> Cloned snapshot repo.`); + + const bazelBinDir = childProcess + .spawnSync(bazel, ['info', 'bazel-bin'], { + shell: true, + encoding: 'utf8', + stdio: ['pipe', 'pipe', 'inherit'], + }) + .stdout.trim(); + if (bazelBinDir === '') { + throw new Error('Could not determine bazel-bin directory.'); + } + + const outputPath = path.join(bazelBinDir, 'packages/', targetDir, 'npm_package'); + + // Delete old directory to avoid surprises, or stamping being outdated. + await deleteDir(outputPath); + + childProcess.spawnSync( + bazel, + ['build', `//packages/${targetDir}:npm_package`, '--config=snapshot'], + { + shell: true, + stdio: 'inherit', + encoding: 'utf8', + }, + ); + + console.log('--> Built npm package with --config=snapshot'); + console.error(`--> Output: ${outputPath}`); + + const removeTasks: Promise<void>[] = []; + for (const subentry of await fs.promises.readdir(tmpDir)) { + if (SKIP_FILES.includes(subentry)) { + continue; + } + + removeTasks.push( + fs.promises.rm(path.join(tmpDir, subentry), { recursive: true, maxRetries: 3 }), + ); + } + await Promise.all(removeTasks); + + const copyTasks: Promise<void>[] = []; + for (const subentry of await fs.promises.readdir(outputPath)) { + if (SKIP_FILES.includes(subentry)) { + continue; + } + + copyTasks.push( + fs.promises.cp(path.join(outputPath, subentry), path.join(tmpDir, subentry), { + recursive: true, + }), + ); + } + await Promise.all(copyTasks); + + git.run(['config', 'core.filemode', 'false'], { cwd: tmpDir }); + + const diff = git.run(['diff', '--color'], { cwd: tmpDir }).stdout; + + console.log('\n\n----- Diff ------'); + console.log(diff); + + await deleteDir(tmpDir); +} + +async function deleteDir(dirPath: string) { + if (!fs.existsSync(dirPath)) { + return; + } + + // Needed as Bazel artifacts are readonly and cannot be deleted otherwise. + sh.chmod('-R', 'u+w', dirPath); + await fs.promises.rm(dirPath, { recursive: true, force: true, maxRetries: 3 }); +} diff --git a/scripts/json-help.mts b/scripts/json-help.mts index b847f8591abe..c0b62162d875 100644 --- a/scripts/json-help.mts +++ b/scripts/json-help.mts @@ -6,11 +6,11 @@ * found in the LICENSE file at https://angular.dev/license */ -import { spawnSync } from 'child_process'; -import { promises as fs } from 'fs'; +import { spawnSync } from 'node:child_process'; +import { promises as fs } from 'node:fs'; +import * as os from 'node:os'; +import * as path from 'node:path'; import { fileURLToPath } from 'node:url'; -import * as os from 'os'; -import * as path from 'path'; import create from './create.mjs'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); diff --git a/scripts/release-checks/dependency-ranges/index.mts b/scripts/release-checks/dependency-ranges/index.mts index f504b219c6a9..9f507a8b4425 100644 --- a/scripts/release-checks/dependency-ranges/index.mts +++ b/scripts/release-checks/dependency-ranges/index.mts @@ -32,8 +32,8 @@ export async function assertValidDependencyRanges( } const failures: string[] = [ - ...(await checkPeerDependencies(newVersion, allPackages)), - ...(await checkSchematicsAngularLatestVersion(newVersion)), + ...checkPeerDependencies(newVersion, allPackages), + ...checkSchematicsAngularLatestVersion(newVersion), ]; if (failures.length !== 0) { diff --git a/scripts/release-checks/dependency-ranges/latest-versions-check.mts b/scripts/release-checks/dependency-ranges/latest-versions-check.mts index afeff6712cea..9b8e054f71fb 100644 --- a/scripts/release-checks/dependency-ranges/latest-versions-check.mts +++ b/scripts/release-checks/dependency-ranges/latest-versions-check.mts @@ -6,30 +6,33 @@ * found in the LICENSE file at https://angular.dev/license */ -import { readFile } from 'node:fs/promises'; +import { createRequire } from 'node:module'; +import { fileURLToPath } from 'node:url'; import semver from 'semver'; -export async function checkSchematicsAngularLatestVersion( - newVersion: semver.SemVer, -): Promise<string[]> { - const { dependencies } = JSON.parse( - await readFile('./packages/schematics/angular/utility/latest-versions/package.json', 'utf-8'), +export function checkSchematicsAngularLatestVersion(newVersion: semver.SemVer): string[] { + // Root of the Angular CLI project. + const root = fileURLToPath(new URL('../../../', import.meta.url)); + const rootRequire = createRequire(root); + const { latestVersions } = rootRequire( + './dist/releases/schematics/angular/utility/latest-versions.js', ); - const keysToCheck = ['ng-packagr', '@angular/core']; - const { major, minor } = newVersion; - const isPrerelease = !!newVersion.prerelease[0]; + const keysToCheck = ['Angular', 'NgPackagr']; + const { major, minor, prerelease } = newVersion; + const isPrerelease = !!prerelease[0]; const failures: string[] = []; - let expectedFwDep = `^${major}.${minor}.0`; + let expectedVersionDep = `^${major}.${minor}.0`; if (isPrerelease) { - expectedFwDep = `^${major}.${minor}.0-next.0`; + expectedVersionDep += '-next.0'; } for (const key of keysToCheck) { - if (dependencies[key] !== expectedFwDep) { + const latestVersion = latestVersions[key]; + if (latestVersion !== expectedVersionDep) { failures.push( - `latest-versions: Invalid dependency range for "${key}". Expected: ${expectedFwDep}`, + `latest-versions: Invalid dependency range for "${key}". Expected: ${expectedVersionDep} but got: ${latestVersion}`, ); } } diff --git a/scripts/release-checks/dependency-ranges/peer-deps-check.mts b/scripts/release-checks/dependency-ranges/peer-deps-check.mts index e212d800aac0..0c8bf6fc8c3a 100644 --- a/scripts/release-checks/dependency-ranges/peer-deps-check.mts +++ b/scripts/release-checks/dependency-ranges/peer-deps-check.mts @@ -16,12 +16,12 @@ export interface PackageJson { peerDependencies?: Record<string, string>; } -export async function checkPeerDependencies( +export function checkPeerDependencies( newVersion: semver.SemVer, allPackages: PackageJson[], -): Promise<string[]> { - const { major, minor } = newVersion; - const isPrerelease = !!newVersion.prerelease[0]; +): string[] { + const { major, minor, prerelease } = newVersion; + const isPrerelease = !!prerelease[0]; const isMajor = minor === 0; let expectedFwPeerDep = `^${major}.0.0`; @@ -58,7 +58,7 @@ function checkPackage(pkgJson: PackageJson, expectedFwPeerDep: string): string[] if (range !== expectedFwPeerDep) { failures.push( - `${pkgJson.name}: Unexpected peer dependency range for "${depName}". Expected: ${expectedFwPeerDep}`, + `${pkgJson.name}: Unexpected peer dependency range for "${depName}". Expected: ${expectedFwPeerDep} but got: ${range}`, ); } } diff --git a/scripts/templates/contributing.ejs b/scripts/templates/contributing.ejs index b1c09f55dc05..b5bb997911ce 100644 --- a/scripts/templates/contributing.ejs +++ b/scripts/templates/contributing.ejs @@ -296,10 +296,10 @@ Our Public API surface is tracked using golden files. You check all golden files by running: ```bash -yarn public-api:check +pnpm public-api:check ``` If you modified the public API, the test will fail. To update the golden files you need to run: ```bash -yarn public-api:update +pnpm public-api:update ``` diff --git a/scripts/validate-user-analytics.mts b/scripts/validate-user-analytics.mts index afbf89de8e83..b91556c752b0 100644 --- a/scripts/validate-user-analytics.mts +++ b/scripts/validate-user-analytics.mts @@ -6,12 +6,12 @@ * found in the LICENSE file at https://angular.dev/license */ -import assert from 'assert'; import glob from 'fast-glob'; -import * as fs from 'fs'; import lodash from 'lodash'; -import * as path from 'path'; -import { fileURLToPath } from 'url'; +import assert from 'node:assert'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; +import { fileURLToPath } from 'node:url'; import { EventCustomDimension, EventCustomMetric, diff --git a/scripts/validate.mts b/scripts/validate.mts index b9c7b09ca7f6..2eebce377b44 100644 --- a/scripts/validate.mts +++ b/scripts/validate.mts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import { execSync } from 'child_process'; +import { execSync } from 'node:child_process'; import templates from './templates.mjs'; import validateUserAnalytics from './validate-user-analytics.mjs'; diff --git a/scripts/windows-testing/convert-symlinks.mjs b/scripts/windows-testing/convert-symlinks.mjs new file mode 100644 index 000000000000..16116b24f68c --- /dev/null +++ b/scripts/windows-testing/convert-symlinks.mjs @@ -0,0 +1,170 @@ +/** + * @fileoverview Script that takes a directory and converts all its Unix symlinks + * to relative Windows-compatible symlinks. This is necessary because when building + * tests via Bazel inside WSL; the output cannot simply be used outside WSL to perform + * native Windows testing. This is a known limitation/bug of the WSL <> Windows interop. + * + * Symlinks are commonly used by Bazel inside the `.runfiles` directory, which is relevant + * for executing tests outside Bazel on the host machine. In addition, `rules_js` heavily + * relies on symlinks for node modules. + * + * Some more details in: + * - https://blog.trailofbits.com/2024/02/12/why-windows-cant-follow-wsl-symlinks/. + * - https://pnpm.io/symlinked-node-modules-structure. + */ + +import path from 'node:path'; +import fs from 'node:fs/promises'; +import childProcess from 'node:child_process'; + +const [rootDir, cmdPath] = process.argv.slice(2); + +// GitHub actions can set this environment variable when pressing the "re-run" button. +const debug = process.env.ACTIONS_STEP_DEBUG === 'true'; +const skipDirectories = [ + // Modules that we don't need and would unnecessarily slow-down this. + '_windows_amd64/bin/nodejs/node_modules', +]; + +const workspaceRootPaths = [/.*\.runfiles\/angular_cli\//, /^.*-fastbuild\/bin\//]; + +// Copying can be parallelized and doesn't cause any WSL flakiness (no exe is invoked). +const parallelCopyTasks = []; + +async function transformDir(p) { + // We perform all command executions in parallel here to speed up. + // Note that we can't parallelize for the full recursive directory, + // as WSL and its interop would otherwise end up with some flaky errors. + // See: https://github.com/microsoft/WSL/issues/8677. + const tasks = []; + // We explore directories after all files were checked at this level. + const directoriesToVisit = []; + + for (const file of await fs.readdir(p, { withFileTypes: true })) { + const subPath = path.join(p, file.name); + + if (skipDirectories.some((d) => subPath.endsWith(d))) { + continue; + } + + if (file.isSymbolicLink()) { + // Allow for parallel processing of directory entries. + tasks.push( + (async () => { + let target = ''; + try { + target = await fs.realpath(subPath); + } catch (e) { + if (debug) { + console.error('Skipping', subPath); + } + return; + } + + await fs.rm(subPath); + + const subPathId = relativizeForSimilarWorkspacePaths(subPath); + const targetPathId = relativizeForSimilarWorkspacePaths(target); + const isSelfLink = subPathId === targetPathId; + + // This is an actual file that needs to be copied. Copy contents. + // - the target path is equivalent to the link. This is a self-link from `.runfiles` to `bin/`. + // - the target path is outside any of our workspace roots. + if (isSelfLink || targetPathId.startsWith('..')) { + parallelCopyTasks.push(exec(`cp -Rf ${target} ${subPath}`)); + return; + } + + const relativeSubPath = relativizeToRoot(subPath); + const targetAtDestination = path.relative(path.dirname(subPathId), targetPathId); + const targetAtDestinationWindowsPath = targetAtDestination.replace(/\//g, '\\'); + + const wslSubPath = relativeSubPath.replace(/\//g, '\\'); + + if (debug) { + console.log({ + targetAtDestination, + subPath, + relativeSubPath, + target, + targetPathId, + subPathId, + }); + } + + if ((await fs.stat(target)).isDirectory()) { + // This is a symlink to a directory, create a dir junction. + // Re-create this symlink on the Windows FS using the Windows mklink command. + await exec( + `${cmdPath} /c mklink /d "${wslSubPath}" "${targetAtDestinationWindowsPath}"`, + ); + } else { + // This is a symlink to a file, create a file junction. + // Re-create this symlink on the Windows FS using the Windows mklink command. + await exec(`${cmdPath} /c mklink "${wslSubPath}" "${targetAtDestinationWindowsPath}"`); + } + })(), + ); + } else if (file.isDirectory()) { + directoriesToVisit.push(subPath); + } + } + + // Wait for all commands/tasks to complete, executed in parallel. + await Promise.all(tasks); + + // Descend into other directories, sequentially to avoid WSL interop errors. + for (const d of directoriesToVisit) { + await transformDir(d); + } +} + +function exec(cmd, maxRetries = 2) { + return new Promise((resolve, reject) => { + childProcess.exec(cmd, { cwd: rootDir }, (error) => { + if (error !== null) { + // Windows command spawned within WSL (which is untypical) seem to be flaky rarely. + // This logic tries to make it fully stable by re-trying if this surfaces: + // See: https://github.com/microsoft/WSL/issues/8677. + if ( + maxRetries > 0 && + error.stderr !== undefined && + error.stderr.includes(`accept4 failed 110`) + ) { + resolve(exec(cmd, maxRetries - 1)); + return; + } + + reject(error); + } else { + resolve(); + } + }); + }); +} + +function relativizeForSimilarWorkspacePaths(p) { + const workspaceRootMatch = workspaceRootPaths.find((r) => r.test(p)); + if (workspaceRootMatch !== undefined) { + return p.replace(workspaceRootMatch, ''); + } + + return path.relative(rootDir, p); +} + +function relativizeToRoot(p) { + const res = path.relative(rootDir, p); + if (!res.startsWith('..')) { + return res; + } + + throw new Error('Could not relativize to root: ' + p); +} + +try { + await transformDir(rootDir); + await Promise.all(parallelCopyTasks); +} catch (err) { + console.error('Could not convert symlinks:', err); + process.exitCode = 1; +} diff --git a/scripts/windows-testing/parallel-executor.mjs b/scripts/windows-testing/parallel-executor.mjs new file mode 100644 index 000000000000..0020354692a7 --- /dev/null +++ b/scripts/windows-testing/parallel-executor.mjs @@ -0,0 +1,178 @@ +import * as child_process from 'node:child_process'; +import path from 'node:path'; +import { stripVTControlCharacters } from 'node:util'; + +const initialStatusRegex = /Running (\d+) tests/; + +async function main() { + const [runfilesDir, targetName, testArgs] = process.argv.slice(2); + const maxShards = 4; + + const testEntrypoint = path.resolve(runfilesDir, '../', targetName); + const testWorkingDir = path.resolve(runfilesDir, 'angular_cli'); + const tasks = []; + const progress = {}; + + for (let i = 0; i < maxShards; i++) { + tasks.push( + spawnTest( + 'bash', + [testEntrypoint, ...testArgs.split(' ').filter((arg) => arg !== '')], + { + cwd: testWorkingDir, + env: { + // Try to construct a pretty hermetic environment, as within Bazel. + PATH: process.env.PATH, + TEST_TOTAL_SHARDS: maxShards, + TEST_SHARD_INDEX: i, + E2E_SHARD_TOTAL: process.env.E2E_SHARD_TOTAL, + E2E_SHARD_INDEX: process.env.E2E_SHARD_INDEX, + FORCE_COLOR: '3', + // Needed by `rules_js` + BAZEL_BINDIR: '.', + }, + }, + (s) => (progress[i] = s), + ), + ); + } + + const printUpdate = () => { + console.error(`----`); + for (const [taskId, status] of Object.entries(progress)) { + const durationInMin = (Date.now() - status.startTime) / 1000 / 60; + console.error( + `Shard #${taskId}: stage ${status.state} | ` + + `${status.current}/${status.max} tests completed (${durationInMin.toFixed(2)}min)`, + ); + } + }; + + const progressInterval = setInterval(printUpdate, 4000); + + try { + const outputs = await Promise.all(tasks); + printUpdate(); + + for (const [idx, text] of outputs.entries()) { + console.log(`---------- ${idx} -----------`); + console.log(text); + } + + console.error(''); + console.error('Done! Passing'); + } catch (e) { + if (e instanceof TestSpawnError) { + console.error(e.output); + console.error(e.message); + } else if (e instanceof Error) { + console.error(e.message, e.stack); + } else { + console.error(e); + } + + console.error('Tests failed!'); + process.exitCode = 1; + } finally { + clearInterval(progressInterval); + } +} + +function spawnTest(cmd, args, options, reportStatus, startTime = Date.now(), testAttempts = 2) { + testAttempts -= 1; + + const testProgressRegex = /Running test[^\(]+\((\d+) of/g; + + return new Promise((resolve, reject) => { + let output = ''; + let state = 'setup'; + let current = 0; + let max = 0; + + const proc = child_process.spawn(cmd, args, { ...options, stdio: 'pipe' }); + const syncStatus = () => reportStatus({ current, max, state, startTime }); + const restartTest = () => { + console.error(output); + console.error(`Test restarted due to failure.`); + resolve(spawnTest(cmd, args, options, reportStatus, startTime, testAttempts)); + }; + const onOutputChange = () => { + // Extract initial status (i.e. how many tests there are in this shard) + if (initialStatusRegex.test(output) && state === 'setup') { + max = Number(output.match(initialStatusRegex)[1]); + } + if (/Running initializer/.test(output) && state === 'setup') { + state = 'initializing'; + } + if (/Running test/.test(output) && state === 'initializing') { + state = 'testing'; + } + if (state === 'testing') { + const oldLastIndex = testProgressRegex.lastIndex; + const newMatch = testProgressRegex.exec(stripVTControlCharacters(output))?.[1]; + // Do not advance the Regex, or more precisely, reset to index `0`. + if (newMatch === undefined) { + testProgressRegex.lastIndex = oldLastIndex; + } else { + current = Number(newMatch); + } + } + syncStatus(); + }; + proc.stdout.on('data', (data) => { + output += data; + onOutputChange(); + }); + proc.stderr.on('data', (data) => { + output += data; + onOutputChange(); + }); + proc.on('error', (err) => { + syncStatus(); + + // If this test failed and there are test attempts remaining, re-run. + if (testAttempts > 0) { + restartTest(); + return; + } + + reject(new TestSpawnError(err.message, output)); + }); + proc.on('close', (code, signal) => { + syncStatus(); + + if (code === 0 && signal === null) { + resolve(output); + } else { + if (testAttempts > 0) { + restartTest(); + return; + } + + reject( + new TestSpawnError(`Command failed with code: ${code} and signal ${signal}`, output), + ); + } + }); + + // Report initial status, without knowing anything. + syncStatus(); + }); +} + +class TestSpawnError extends Error { + /** @type {string} */ + output; + + constructor(message, output) { + super(message); + this.output = output; + } +} + +try { + main(); +} catch (e) { + console.error(e); + process.exitCode = 1; +} diff --git a/tests/angular_devkit/architect/node/jobs/BUILD.bazel b/tests/angular_devkit/architect/node/jobs/BUILD.bazel deleted file mode 100644 index 912028a0b1cb..000000000000 --- a/tests/angular_devkit/architect/node/jobs/BUILD.bazel +++ /dev/null @@ -1,22 +0,0 @@ -load("//tools:interop.bzl", "ts_project") - -# Copyright Google Inc. All Rights Reserved. -# -# Use of this source code is governed by an MIT-style license that can be -# found in the LICENSE file at https://angular.dev/license -package(default_visibility = ["//visibility:public"]) - -licenses(["notice"]) - -ts_project( - name = "jobs_test_lib", - srcs = glob( - include = [ - "**/*.ts", - ], - ), - deps = [ - "//:root_modules/@types/node", - "//packages/angular_devkit/architect:architect_rjs", - ], -) diff --git a/tests/angular_devkit/schematics/tools/file-system-engine-host/BUILD.bazel b/tests/angular_devkit/schematics/tools/file-system-engine-host/BUILD.bazel index b7736f06a4a8..82fb74ec6ef8 100644 --- a/tests/angular_devkit/schematics/tools/file-system-engine-host/BUILD.bazel +++ b/tests/angular_devkit/schematics/tools/file-system-engine-host/BUILD.bazel @@ -21,11 +21,11 @@ ts_project( "**/*.js", ], ), - interop_deps = [ - "//packages/angular_devkit/schematics", - ], + # TODO: Fix strict_deps failure + ignore_strict_deps = True, deps = [ - "//:root_modules/@types/jasmine", - "//:root_modules/@types/node", + "//:node_modules/@types/jasmine", + "//:node_modules/@types/node", + "//packages/angular_devkit/schematics:schematics", ], ) diff --git a/tests/legacy-cli/BUILD.bazel b/tests/legacy-cli/BUILD.bazel index e5e19bdc87a4..d732d49f26b0 100644 --- a/tests/legacy-cli/BUILD.bazel +++ b/tests/legacy-cli/BUILD.bazel @@ -1,36 +1,74 @@ +load("@aspect_bazel_lib//lib:directory_path.bzl", "directory_path") +load("@npm2//:rollup/package_json.bzl", rollup = "bin") load("//tools:interop.bzl", "ts_project") load(":e2e.bzl", "e2e_suites") +package(default_visibility = ["//visibility:public"]) + ts_project( name = "runner", testonly = True, srcs = [ "e2e_runner.ts", ], - data = [ - "verdaccio.yaml", - "verdaccio_auth.yaml", - ], deps = [ - "//:root_modules/ansi-colors", - "//:root_modules/fast-glob", - "//packages/angular_devkit/core:core_rjs", - "//packages/angular_devkit/core/node:node_rjs", - "//tests/legacy-cli/e2e/utils:utils_rjs", + "//:node_modules/@types/node", + "//:node_modules/ansi-colors", + "//:node_modules/fast-glob", + "//packages/angular_devkit/core", + "//packages/angular_devkit/core/node", + "//tests/legacy-cli/e2e/utils", ], ) +rollup.rollup( + name = "runner_bundled", + testonly = True, + srcs = [ + "rollup.config.mjs", + ":runner", + "//:node_modules/@rollup/plugin-alias", + "//:node_modules/@rollup/plugin-commonjs", + "//:node_modules/@rollup/plugin-json", + "//:node_modules/@rollup/plugin-node-resolve", + "//:node_modules/fast-glob", + "//tests/legacy-cli/e2e/initialize", + "//tests/legacy-cli/e2e/ng-snapshot", + "//tests/legacy-cli/e2e/setup", + "//tests/legacy-cli/e2e/tests", + ], + args = [ + "--format=cjs", + "--config=./rollup.config.mjs", + ], + chdir = package_name(), + out_dirs = ["runner_bundled_out"], + progress_message = "Bundling e2e test runner", +) + +directory_path( + name = "runner_entrypoint", + testonly = True, + directory = ":runner_bundled", + path = "./e2e_runner.js", +) + e2e_suites( name = "e2e", data = [ - ":runner", + ":runner_bundled", + "verdaccio.yaml", + "verdaccio_auth.yaml", - # Tests + setup - # Loaded dynamically at runtime, not compiletime deps + # Dynamically loaded. "//tests/legacy-cli/e2e/assets", - "//tests/legacy-cli/e2e/setup", - "//tests/legacy-cli/e2e/initialize", - "//tests/legacy-cli/e2e/tests", + "//:node_modules/verdaccio", + "//:node_modules/verdaccio-auth-memory", + + # Extra runtime deps due to bundling issues. + # TODO: Clean this up. + "//:node_modules/@verdaccio/config", + "//:node_modules/express", ], - runner = ":e2e_runner.ts", + runner = ":runner_entrypoint", ) diff --git a/tests/legacy-cli/e2e.bzl b/tests/legacy-cli/e2e.bzl index 74402064f961..1bed11a77596 100644 --- a/tests/legacy-cli/e2e.bzl +++ b/tests/legacy-cli/e2e.bzl @@ -1,4 +1,4 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_test") +load("@aspect_rules_js//js:defs.bzl", "js_test") load("//tools:toolchain_info.bzl", "TOOLCHAINS_NAMES", "TOOLCHAINS_VERSIONS") # bazel query --output=label "kind('pkg_tar', //packages/...)" @@ -87,7 +87,7 @@ def e2e_suites(name, runner, data): # Saucelabs tests are only run on the default toolchain _e2e_suite(name, runner, "saucelabs", data) -def _e2e_tests(name, runner, **kwargs): +def _e2e_tests(name, runner, toolchain, **kwargs): # Always specify all the npm packages args = kwargs.pop("templated_args", []) + [ "--package $(rootpath %s)" % p @@ -100,15 +100,12 @@ def _e2e_tests(name, runner, **kwargs): # Tags that must always be applied tags = kwargs.pop("tags", []) + TEST_TAGS - # Passthru E2E variables in case it is customized by CI etc - configuration_env_vars = kwargs.pop("configuration_env_vars", []) + ["E2E_TEMP", "E2E_SHARD_INDEX", "E2E_SHARD_TOTAL"] - env = kwargs.pop("env", {}) toolchains = kwargs.pop("toolchains", []) # The git toolchain + env env.update({"GIT_BIN": "$(GIT_BIN_PATH)"}) - toolchains = toolchains + ["@npm//@angular/build-tooling/bazel/git-toolchain:current_git_toolchain"] + toolchains = toolchains + ["@devinfra//bazel/git-toolchain:current_git_toolchain"] # Chromium browser toolchain env.update({ @@ -116,18 +113,24 @@ def _e2e_tests(name, runner, **kwargs): "CHROME_PATH": "$(CHROMIUM)", "CHROMEDRIVER_BIN": "$(CHROMEDRIVER)", }) - toolchains = toolchains + ["@npm//@angular/build-tooling/bazel/browsers/chromium:toolchain_alias"] - data = data + ["@npm//@angular/build-tooling/bazel/browsers/chromium"] + toolchains = toolchains + ["@devinfra//bazel/browsers/chromium:toolchain_alias"] + data = data + ["@devinfra//bazel/browsers/chromium"] - nodejs_test( + js_test( name = name, - templated_args = args, + fixed_args = args, data = data, entry_point = runner, env = env, - configuration_env_vars = configuration_env_vars, tags = tags, toolchains = toolchains, + node_toolchain = toolchain, + include_npm = select({ + # For Windows testing mode, we use the real global NPM as otherwise this + # will be a lot of files that need to be brought from WSL to the host FS. + "@platforms//os:windows": False, + "//conditions:default": True, + }), **kwargs ) diff --git a/tests/legacy-cli/e2e/assets/15.0-project/package.json b/tests/legacy-cli/e2e/assets/15.0-project/package.json deleted file mode 100644 index 090495cc053e..000000000000 --- a/tests/legacy-cli/e2e/assets/15.0-project/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "fifteen-project", - "version": "0.0.0", - "scripts": { - "ng": "ng", - "start": "ng serve", - "build": "ng build", - "watch": "ng build --watch --configuration development", - "test": "ng test" - }, - "private": true, - "dependencies": { - "@angular/animations": "^15.2.0", - "@angular/common": "^15.2.0", - "@angular/compiler": "^15.2.0", - "@angular/core": "^15.2.0", - "@angular/forms": "^15.2.0", - "@angular/platform-browser": "^15.2.0", - "@angular/platform-browser-dynamic": "^15.2.0", - "@angular/router": "^15.2.0", - "rxjs": "~7.8.0", - "tslib": "^2.3.0", - "zone.js": "~0.12.0" - }, - "devDependencies": { - "@angular-devkit/build-angular": "^15.2.8", - "@angular/cli": "~15.2.8", - "@angular/compiler-cli": "^15.2.0", - "@types/jasmine": "~4.3.0", - "jasmine-core": "~4.5.0", - "karma": "~6.4.0", - "karma-chrome-launcher": "~3.1.0", - "karma-coverage": "~2.2.0", - "karma-jasmine": "~5.1.0", - "karma-jasmine-html-reporter": "~2.0.0", - "typescript": "~4.9.4" - } -} diff --git a/tests/legacy-cli/e2e/assets/15.0-project/src/app/app-routing.module.ts b/tests/legacy-cli/e2e/assets/15.0-project/src/app/app-routing.module.ts deleted file mode 100644 index 02972627f8df..000000000000 --- a/tests/legacy-cli/e2e/assets/15.0-project/src/app/app-routing.module.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { NgModule } from '@angular/core'; -import { RouterModule, Routes } from '@angular/router'; - -const routes: Routes = []; - -@NgModule({ - imports: [RouterModule.forRoot(routes)], - exports: [RouterModule] -}) -export class AppRoutingModule { } diff --git a/tests/legacy-cli/e2e/assets/15.0-project/src/app/app.component.html b/tests/legacy-cli/e2e/assets/15.0-project/src/app/app.component.html deleted file mode 100644 index 3575ca31c81c..000000000000 --- a/tests/legacy-cli/e2e/assets/15.0-project/src/app/app.component.html +++ /dev/null @@ -1,484 +0,0 @@ -<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * --> -<!-- * * * * * * * * * * * The content below * * * * * * * * * * * --> -<!-- * * * * * * * * * * is only a placeholder * * * * * * * * * * --> -<!-- * * * * * * * * * * and can be replaced. * * * * * * * * * * * --> -<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * --> -<!-- * * * * * * * * * Delete the template below * * * * * * * * * * --> -<!-- * * * * * * * to get started with your project! * * * * * * * * --> -<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * --> - -<style> - :host { - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - font-size: 14px; - color: #333; - box-sizing: border-box; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - } - - h1, - h2, - h3, - h4, - h5, - h6 { - margin: 8px 0; - } - - p { - margin: 0; - } - - .spacer { - flex: 1; - } - - .toolbar { - position: absolute; - top: 0; - left: 0; - right: 0; - height: 60px; - display: flex; - align-items: center; - background-color: #1976d2; - color: white; - font-weight: 600; - } - - .toolbar img { - margin: 0 16px; - } - - .toolbar #twitter-logo { - height: 40px; - margin: 0 8px; - } - - .toolbar #youtube-logo { - height: 40px; - margin: 0 16px; - } - - .toolbar #twitter-logo:hover, - .toolbar #youtube-logo:hover { - opacity: 0.8; - } - - .content { - display: flex; - margin: 82px auto 32px; - padding: 0 16px; - max-width: 960px; - flex-direction: column; - align-items: center; - } - - svg.material-icons { - height: 24px; - width: auto; - } - - svg.material-icons:not(:last-child) { - margin-right: 8px; - } - - .card svg.material-icons path { - fill: #888; - } - - .card-container { - display: flex; - flex-wrap: wrap; - justify-content: center; - margin-top: 16px; - } - - .card { - all: unset; - border-radius: 4px; - border: 1px solid #eee; - background-color: #fafafa; - height: 40px; - width: 200px; - margin: 0 8px 16px; - padding: 16px; - display: flex; - flex-direction: row; - justify-content: center; - align-items: center; - transition: all 0.2s ease-in-out; - line-height: 24px; - } - - .card-container .card:not(:last-child) { - margin-right: 0; - } - - .card.card-small { - height: 16px; - width: 168px; - } - - .card-container .card:not(.highlight-card) { - cursor: pointer; - } - - .card-container .card:not(.highlight-card):hover { - transform: translateY(-3px); - box-shadow: 0 4px 17px rgba(0, 0, 0, 0.35); - } - - .card-container .card:not(.highlight-card):hover .material-icons path { - fill: rgb(105, 103, 103); - } - - .card.highlight-card { - background-color: #1976d2; - color: white; - font-weight: 600; - border: none; - width: auto; - min-width: 30%; - position: relative; - } - - .card.card.highlight-card span { - margin-left: 60px; - } - - svg#rocket { - width: 80px; - position: absolute; - left: -10px; - top: -24px; - } - - svg#rocket-smoke { - height: calc(100vh - 95px); - position: absolute; - top: 10px; - right: 180px; - z-index: -10; - } - - a, - a:visited, - a:hover { - color: #1976d2; - text-decoration: none; - } - - a:hover { - color: #125699; - } - - .terminal { - position: relative; - width: 80%; - max-width: 600px; - border-radius: 6px; - padding-top: 45px; - margin-top: 8px; - overflow: hidden; - background-color: rgb(15, 15, 16); - } - - .terminal::before { - content: "\2022 \2022 \2022"; - position: absolute; - top: 0; - left: 0; - height: 4px; - background: rgb(58, 58, 58); - color: #c2c3c4; - width: 100%; - font-size: 2rem; - line-height: 0; - padding: 14px 0; - text-indent: 4px; - } - - .terminal pre { - font-family: SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace; - color: white; - padding: 0 1rem 1rem; - margin: 0; - } - - .circle-link { - height: 40px; - width: 40px; - border-radius: 40px; - margin: 8px; - background-color: white; - border: 1px solid #eeeeee; - display: flex; - justify-content: center; - align-items: center; - cursor: pointer; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.24); - transition: 1s ease-out; - } - - .circle-link:hover { - transform: translateY(-0.25rem); - box-shadow: 0px 3px 15px rgba(0, 0, 0, 0.2); - } - - footer { - margin-top: 8px; - display: flex; - align-items: center; - line-height: 20px; - } - - footer a { - display: flex; - align-items: center; - } - - .github-star-badge { - color: #24292e; - display: flex; - align-items: center; - font-size: 12px; - padding: 3px 10px; - border: 1px solid rgba(27,31,35,.2); - border-radius: 3px; - background-image: linear-gradient(-180deg,#fafbfc,#eff3f6 90%); - margin-left: 4px; - font-weight: 600; - } - - .github-star-badge:hover { - background-image: linear-gradient(-180deg,#f0f3f6,#e6ebf1 90%); - border-color: rgba(27,31,35,.35); - background-position: -.5em; - } - - .github-star-badge .material-icons { - height: 16px; - width: 16px; - margin-right: 4px; - } - - svg#clouds { - position: fixed; - bottom: -160px; - left: -230px; - z-index: -10; - width: 1920px; - } - - /* Responsive Styles */ - @media screen and (max-width: 767px) { - .card-container > *:not(.circle-link) , - .terminal { - width: 100%; - } - - .card:not(.highlight-card) { - height: 16px; - margin: 8px 0; - } - - .card.highlight-card span { - margin-left: 72px; - } - - svg#rocket-smoke { - right: 120px; - transform: rotate(-5deg); - } - } - - @media screen and (max-width: 575px) { - svg#rocket-smoke { - display: none; - visibility: hidden; - } - } -</style> - -<!-- Toolbar --> -<div class="toolbar" role="banner"> - <img - width="40" - alt="Angular Logo" - src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNTAgMjUwIj4KICAgIDxwYXRoIGZpbGw9IiNERDAwMzEiIGQ9Ik0xMjUgMzBMMzEuOSA2My4ybDE0LjIgMTIzLjFMMTI1IDIzMGw3OC45LTQzLjcgMTQuMi0xMjMuMXoiIC8+CiAgICA8cGF0aCBmaWxsPSIjQzMwMDJGIiBkPSJNMTI1IDMwdjIyLjItLjFWMjMwbDc4LjktNDMuNyAxNC4yLTEyMy4xTDEyNSAzMHoiIC8+CiAgICA8cGF0aCAgZmlsbD0iI0ZGRkZGRiIgZD0iTTEyNSA1Mi4xTDY2LjggMTgyLjZoMjEuN2wxMS43LTI5LjJoNDkuNGwxMS43IDI5LjJIMTgzTDEyNSA1Mi4xem0xNyA4My4zaC0zNGwxNy00MC45IDE3IDQwLjl6IiAvPgogIDwvc3ZnPg==" - /> - <span>Welcome</span> - <div class="spacer"></div> - <a aria-label="Angular on twitter" target="_blank" rel="noopener" href="https://twitter.com/angular" title="Twitter"> - <svg id="twitter-logo" height="24" data-name="Logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 400"> - <rect width="400" height="400" fill="none"/> - <path d="M153.62,301.59c94.34,0,145.94-78.16,145.94-145.94,0-2.22,0-4.43-.15-6.63A104.36,104.36,0,0,0,325,122.47a102.38,102.38,0,0,1-29.46,8.07,51.47,51.47,0,0,0,22.55-28.37,102.79,102.79,0,0,1-32.57,12.45,51.34,51.34,0,0,0-87.41,46.78A145.62,145.62,0,0,1,92.4,107.81a51.33,51.33,0,0,0,15.88,68.47A50.91,50.91,0,0,1,85,169.86c0,.21,0,.43,0,.65a51.31,51.31,0,0,0,41.15,50.28,51.21,51.21,0,0,1-23.16.88,51.35,51.35,0,0,0,47.92,35.62,102.92,102.92,0,0,1-63.7,22A104.41,104.41,0,0,1,75,278.55a145.21,145.21,0,0,0,78.62,23" fill="#fff"/> - </svg> - </a> - <a aria-label="Angular on YouTube" target="_blank" rel="noopener" href="https://youtube.com/angular" title="YouTube"> - <svg id="youtube-logo" height="24" width="24" data-name="Logo" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="#fff"> - <path d="M0 0h24v24H0V0z" fill="none"/> - <path d="M21.58 7.19c-.23-.86-.91-1.54-1.77-1.77C18.25 5 12 5 12 5s-6.25 0-7.81.42c-.86.23-1.54.91-1.77 1.77C2 8.75 2 12 2 12s0 3.25.42 4.81c.23.86.91 1.54 1.77 1.77C5.75 19 12 19 12 19s6.25 0 7.81-.42c.86-.23 1.54-.91 1.77-1.77C22 15.25 22 12 22 12s0-3.25-.42-4.81zM10 15V9l5.2 3-5.2 3z"/> - </svg> - </a> -</div> - -<div class="content" role="main"> - - <!-- Highlight Card --> - <div class="card highlight-card card-small"> - - <svg id="rocket" xmlns="http://www.w3.org/2000/svg" width="101.678" height="101.678" viewBox="0 0 101.678 101.678"> - <title>Rocket Ship - - - - - - - - - -

Hello, {{ title }}

- - - Rocket Ship Smoke - - - -
- - -

Resources

-

Here are some links to help you get started:

- - - - -

Next Steps

-

What do you want to do next with your app?

- - - -
- - - - - - - - - - - -
- - -
-
ng generate component xyz
-
ng add @angular/material
-
ng add @angular/pwa
-
ng add _____
-
ng test
-
ng build
-
- - - - - - - - - Gray Clouds Background - - - - - - - - - - - - - - diff --git a/tests/legacy-cli/e2e/assets/15.0-project/src/app/app.component.ts b/tests/legacy-cli/e2e/assets/15.0-project/src/app/app.component.ts deleted file mode 100644 index f1dee0670e04..000000000000 --- a/tests/legacy-cli/e2e/assets/15.0-project/src/app/app.component.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Component } from '@angular/core'; - -@Component({ - selector: 'app-root', - templateUrl: './app.component.html', - styleUrls: ['./app.component.css'] -}) -export class AppComponent { - title = 'fifteen-project'; -} diff --git a/tests/legacy-cli/e2e/assets/15.0-project/src/app/app.module.ts b/tests/legacy-cli/e2e/assets/15.0-project/src/app/app.module.ts deleted file mode 100644 index b1c6c96a9de8..000000000000 --- a/tests/legacy-cli/e2e/assets/15.0-project/src/app/app.module.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; - -import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './app.component'; - -@NgModule({ - declarations: [ - AppComponent - ], - imports: [ - BrowserModule, - AppRoutingModule - ], - providers: [], - bootstrap: [AppComponent] -}) -export class AppModule { } diff --git a/tests/legacy-cli/e2e/assets/15.0-project/src/favicon.ico b/tests/legacy-cli/e2e/assets/15.0-project/src/favicon.ico deleted file mode 100644 index 997406ad22c2..000000000000 Binary files a/tests/legacy-cli/e2e/assets/15.0-project/src/favicon.ico and /dev/null differ diff --git a/tests/legacy-cli/e2e/assets/15.0-project/src/main.ts b/tests/legacy-cli/e2e/assets/15.0-project/src/main.ts deleted file mode 100644 index c58dc05cbc6d..000000000000 --- a/tests/legacy-cli/e2e/assets/15.0-project/src/main.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; - -import { AppModule } from './app/app.module'; - - -platformBrowserDynamic().bootstrapModule(AppModule) - .catch(err => console.error(err)); diff --git a/tests/legacy-cli/e2e/assets/15.0-project/.editorconfig b/tests/legacy-cli/e2e/assets/17.0-project/.editorconfig similarity index 100% rename from tests/legacy-cli/e2e/assets/15.0-project/.editorconfig rename to tests/legacy-cli/e2e/assets/17.0-project/.editorconfig diff --git a/tests/legacy-cli/e2e/assets/15.0-project/.gitignore b/tests/legacy-cli/e2e/assets/17.0-project/.gitignore similarity index 80% rename from tests/legacy-cli/e2e/assets/15.0-project/.gitignore rename to tests/legacy-cli/e2e/assets/17.0-project/.gitignore index 0711527ef9d5..cc7b141350ff 100644 --- a/tests/legacy-cli/e2e/assets/15.0-project/.gitignore +++ b/tests/legacy-cli/e2e/assets/17.0-project/.gitignore @@ -1,4 +1,4 @@ -# See http://help.github.com/ignore-files/ for more about ignoring files. +# See https://docs.github.com/get-started/getting-started-with-git/ignoring-files for more about ignoring files. # Compiled output /dist diff --git a/tests/legacy-cli/e2e/assets/15.0-project/README.md b/tests/legacy-cli/e2e/assets/17.0-project/README.md similarity index 75% rename from tests/legacy-cli/e2e/assets/15.0-project/README.md rename to tests/legacy-cli/e2e/assets/17.0-project/README.md index fc9c6d1fcff6..5418a46b83c0 100644 --- a/tests/legacy-cli/e2e/assets/15.0-project/README.md +++ b/tests/legacy-cli/e2e/assets/17.0-project/README.md @@ -1,6 +1,6 @@ -# FifteenProject +# SeventeenProject -This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 15.2.8. +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 17.3.12. ## Development server @@ -8,7 +8,7 @@ Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The appli ## Code scaffolding -Run `ng generate component component-name` to generate a new component. You can also use `ng generate --help` to see all the available schematics you can generate. +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. ## Build @@ -24,4 +24,4 @@ Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To u ## Further help -To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview](https://angular.dev/tools/cli) and [Command Reference](https://angular.dev/cli) pages. +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/tests/legacy-cli/e2e/assets/15.0-project/angular.json b/tests/legacy-cli/e2e/assets/17.0-project/angular.json similarity index 82% rename from tests/legacy-cli/e2e/assets/15.0-project/angular.json rename to tests/legacy-cli/e2e/assets/17.0-project/angular.json index 23915a2857d0..4e6c604d0031 100644 --- a/tests/legacy-cli/e2e/assets/15.0-project/angular.json +++ b/tests/legacy-cli/e2e/assets/17.0-project/angular.json @@ -3,7 +3,7 @@ "version": 1, "newProjectRoot": "projects", "projects": { - "fifteen-project": { + "seventeen-project": { "projectType": "application", "schematics": {}, "root": "", @@ -11,11 +11,11 @@ "prefix": "app", "architect": { "build": { - "builder": "@angular-devkit/build-angular:browser", + "builder": "@angular-devkit/build-angular:application", "options": { - "outputPath": "dist/fifteen-project", + "outputPath": "dist/seventeen-project", "index": "src/index.html", - "main": "src/main.ts", + "browser": "src/main.ts", "polyfills": [ "zone.js" ], @@ -46,12 +46,9 @@ "outputHashing": "all" }, "development": { - "buildOptimizer": false, "optimization": false, - "vendorChunk": true, "extractLicenses": false, - "sourceMap": true, - "namedChunks": true + "sourceMap": true } }, "defaultConfiguration": "production" @@ -60,10 +57,10 @@ "builder": "@angular-devkit/build-angular:dev-server", "configurations": { "production": { - "browserTarget": "fifteen-project:build:production" + "buildTarget": "seventeen-project:build:production" }, "development": { - "browserTarget": "fifteen-project:build:development" + "buildTarget": "seventeen-project:build:development" } }, "defaultConfiguration": "development" @@ -71,7 +68,7 @@ "extract-i18n": { "builder": "@angular-devkit/build-angular:extract-i18n", "options": { - "browserTarget": "fifteen-project:build" + "buildTarget": "seventeen-project:build" } }, "test": { diff --git a/tests/legacy-cli/e2e/assets/17.0-project/package.json b/tests/legacy-cli/e2e/assets/17.0-project/package.json new file mode 100644 index 000000000000..c0f3c7b59156 --- /dev/null +++ b/tests/legacy-cli/e2e/assets/17.0-project/package.json @@ -0,0 +1,38 @@ +{ + "name": "seventeen-project", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test" + }, + "private": true, + "dependencies": { + "@angular/animations": "^17.3.0", + "@angular/common": "^17.3.0", + "@angular/compiler": "^17.3.0", + "@angular/core": "^17.3.0", + "@angular/forms": "^17.3.0", + "@angular/platform-browser": "^17.3.0", + "@angular/platform-browser-dynamic": "^17.3.0", + "@angular/router": "^17.3.0", + "rxjs": "~7.8.0", + "tslib": "^2.3.0", + "zone.js": "~0.14.3" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^17.3.12", + "@angular/cli": "^17.3.12", + "@angular/compiler-cli": "^17.3.0", + "@types/jasmine": "~5.1.0", + "jasmine-core": "~5.1.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.1.0", + "typescript": "~5.4.2" + } +} diff --git a/tests/legacy-cli/e2e/assets/15.0-project/src/app/app.component.css b/tests/legacy-cli/e2e/assets/17.0-project/src/app/app.component.css similarity index 100% rename from tests/legacy-cli/e2e/assets/15.0-project/src/app/app.component.css rename to tests/legacy-cli/e2e/assets/17.0-project/src/app/app.component.css diff --git a/tests/legacy-cli/e2e/assets/17.0-project/src/app/app.component.html b/tests/legacy-cli/e2e/assets/17.0-project/src/app/app.component.html new file mode 100644 index 000000000000..36093e187977 --- /dev/null +++ b/tests/legacy-cli/e2e/assets/17.0-project/src/app/app.component.html @@ -0,0 +1,336 @@ + + + + + + + + + + + +
+
+
+ +

Hello, {{ title }}

+

Congratulations! Your app is running. 🎉

+
+ +
+
+ @for (item of [ + { title: 'Explore the Docs', link: 'https://angular.dev' }, + { title: 'Learn with Tutorials', link: 'https://angular.dev/tutorials' }, + { title: 'CLI Docs', link: 'https://angular.dev/tools/cli' }, + { title: 'Angular Language Service', link: 'https://angular.dev/tools/language-service' }, + { title: 'Angular DevTools', link: 'https://angular.dev/tools/devtools' }, + ]; track item.title) { + + {{ item.title }} + + + + + } +
+ +
+
+
+ + + + + + + + + + + diff --git a/tests/legacy-cli/e2e/assets/15.0-project/src/app/app.component.spec.ts b/tests/legacy-cli/e2e/assets/17.0-project/src/app/app.component.spec.ts similarity index 72% rename from tests/legacy-cli/e2e/assets/15.0-project/src/app/app.component.spec.ts rename to tests/legacy-cli/e2e/assets/17.0-project/src/app/app.component.spec.ts index 803558e830fb..81f10c9432b5 100644 --- a/tests/legacy-cli/e2e/assets/15.0-project/src/app/app.component.spec.ts +++ b/tests/legacy-cli/e2e/assets/17.0-project/src/app/app.component.spec.ts @@ -1,16 +1,10 @@ import { TestBed } from '@angular/core/testing'; -import { RouterModule } from '@angular/router'; import { AppComponent } from './app.component'; describe('AppComponent', () => { beforeEach(async () => { await TestBed.configureTestingModule({ - imports: [ - RouterModule.forRoot([]) - ], - declarations: [ - AppComponent - ], + imports: [AppComponent], }).compileComponents(); }); @@ -20,16 +14,16 @@ describe('AppComponent', () => { expect(app).toBeTruthy(); }); - it(`should have as title 'fifteen-project'`, () => { + it(`should have the 'seventeen-project' title`, () => { const fixture = TestBed.createComponent(AppComponent); const app = fixture.componentInstance; - expect(app.title).toEqual('fifteen-project'); + expect(app.title).toEqual('seventeen-project'); }); it('should render title', () => { const fixture = TestBed.createComponent(AppComponent); fixture.detectChanges(); const compiled = fixture.nativeElement as HTMLElement; - expect(compiled.querySelector('h1')?.textContent).toContain('Hello, fifteen-project'); + expect(compiled.querySelector('h1')?.textContent).toContain('Hello, seventeen-project'); }); }); diff --git a/tests/legacy-cli/e2e/assets/17.0-project/src/app/app.component.ts b/tests/legacy-cli/e2e/assets/17.0-project/src/app/app.component.ts new file mode 100644 index 000000000000..ec163593670e --- /dev/null +++ b/tests/legacy-cli/e2e/assets/17.0-project/src/app/app.component.ts @@ -0,0 +1,13 @@ +import { Component } from '@angular/core'; +import { RouterOutlet } from '@angular/router'; + +@Component({ + selector: 'app-root', + standalone: true, + imports: [RouterOutlet], + templateUrl: './app.component.html', + styleUrl: './app.component.css' +}) +export class AppComponent { + title = 'seventeen-project'; +} diff --git a/tests/legacy-cli/e2e/assets/17.0-project/src/app/app.config.ts b/tests/legacy-cli/e2e/assets/17.0-project/src/app/app.config.ts new file mode 100644 index 000000000000..6c6ef6035f3d --- /dev/null +++ b/tests/legacy-cli/e2e/assets/17.0-project/src/app/app.config.ts @@ -0,0 +1,8 @@ +import { ApplicationConfig } from '@angular/core'; +import { provideRouter } from '@angular/router'; + +import { routes } from './app.routes'; + +export const appConfig: ApplicationConfig = { + providers: [provideRouter(routes)] +}; diff --git a/tests/legacy-cli/e2e/assets/17.0-project/src/app/app.routes.ts b/tests/legacy-cli/e2e/assets/17.0-project/src/app/app.routes.ts new file mode 100644 index 000000000000..dc39edb5f23a --- /dev/null +++ b/tests/legacy-cli/e2e/assets/17.0-project/src/app/app.routes.ts @@ -0,0 +1,3 @@ +import { Routes } from '@angular/router'; + +export const routes: Routes = []; diff --git a/tests/legacy-cli/e2e/assets/15.0-project/src/assets/.gitkeep b/tests/legacy-cli/e2e/assets/17.0-project/src/assets/.gitkeep similarity index 100% rename from tests/legacy-cli/e2e/assets/15.0-project/src/assets/.gitkeep rename to tests/legacy-cli/e2e/assets/17.0-project/src/assets/.gitkeep diff --git a/tests/legacy-cli/e2e/assets/17.0-project/src/favicon.ico b/tests/legacy-cli/e2e/assets/17.0-project/src/favicon.ico new file mode 100644 index 000000000000..57614f9c9675 Binary files /dev/null and b/tests/legacy-cli/e2e/assets/17.0-project/src/favicon.ico differ diff --git a/tests/legacy-cli/e2e/assets/15.0-project/src/index.html b/tests/legacy-cli/e2e/assets/17.0-project/src/index.html similarity index 88% rename from tests/legacy-cli/e2e/assets/15.0-project/src/index.html rename to tests/legacy-cli/e2e/assets/17.0-project/src/index.html index e5f9b8557710..18ffbad003b2 100644 --- a/tests/legacy-cli/e2e/assets/15.0-project/src/index.html +++ b/tests/legacy-cli/e2e/assets/17.0-project/src/index.html @@ -2,7 +2,7 @@ - FifteenProject + SeventeenProject diff --git a/tests/legacy-cli/e2e/assets/17.0-project/src/main.ts b/tests/legacy-cli/e2e/assets/17.0-project/src/main.ts new file mode 100644 index 000000000000..35b00f346331 --- /dev/null +++ b/tests/legacy-cli/e2e/assets/17.0-project/src/main.ts @@ -0,0 +1,6 @@ +import { bootstrapApplication } from '@angular/platform-browser'; +import { appConfig } from './app/app.config'; +import { AppComponent } from './app/app.component'; + +bootstrapApplication(AppComponent, appConfig) + .catch((err) => console.error(err)); diff --git a/tests/legacy-cli/e2e/assets/15.0-project/src/styles.css b/tests/legacy-cli/e2e/assets/17.0-project/src/styles.css similarity index 100% rename from tests/legacy-cli/e2e/assets/15.0-project/src/styles.css rename to tests/legacy-cli/e2e/assets/17.0-project/src/styles.css diff --git a/tests/legacy-cli/e2e/assets/15.0-project/tsconfig.app.json b/tests/legacy-cli/e2e/assets/17.0-project/tsconfig.app.json similarity index 100% rename from tests/legacy-cli/e2e/assets/15.0-project/tsconfig.app.json rename to tests/legacy-cli/e2e/assets/17.0-project/tsconfig.app.json diff --git a/tests/legacy-cli/e2e/assets/15.0-project/tsconfig.json b/tests/legacy-cli/e2e/assets/17.0-project/tsconfig.json similarity index 93% rename from tests/legacy-cli/e2e/assets/15.0-project/tsconfig.json rename to tests/legacy-cli/e2e/assets/17.0-project/tsconfig.json index 7b61667161ee..eb49734a4325 100644 --- a/tests/legacy-cli/e2e/assets/15.0-project/tsconfig.json +++ b/tests/legacy-cli/e2e/assets/17.0-project/tsconfig.json @@ -2,16 +2,16 @@ { "compileOnSave": false, "compilerOptions": { - "baseUrl": "./", "outDir": "./dist/out-tsc", "strict": true, "noImplicitOverride": true, "noPropertyAccessFromIndexSignature": true, "noImplicitReturns": true, "noFallthroughCasesInSwitch": true, + "skipLibCheck": true, + "esModuleInterop": true, "sourceMap": true, "declaration": false, - "downlevelIteration": true, "experimentalDecorators": true, "moduleResolution": "node", "importHelpers": true, diff --git a/tests/legacy-cli/e2e/assets/15.0-project/tsconfig.spec.json b/tests/legacy-cli/e2e/assets/17.0-project/tsconfig.spec.json similarity index 100% rename from tests/legacy-cli/e2e/assets/15.0-project/tsconfig.spec.json rename to tests/legacy-cli/e2e/assets/17.0-project/tsconfig.spec.json diff --git a/tests/legacy-cli/e2e/assets/19-ssr-project-webpack/package.json b/tests/legacy-cli/e2e/assets/19-ssr-project-webpack/package.json index 1de5ac2dda79..bfd64b6be8ae 100644 --- a/tests/legacy-cli/e2e/assets/19-ssr-project-webpack/package.json +++ b/tests/legacy-cli/e2e/assets/19-ssr-project-webpack/package.json @@ -14,25 +14,25 @@ }, "private": true, "dependencies": { - "@angular/animations": "^19.1.0-next.0", - "@angular/common": "^19.1.0-next.0", - "@angular/compiler": "^19.1.0-next.0", - "@angular/core": "^19.1.0-next.0", - "@angular/forms": "^19.1.0-next.0", - "@angular/platform-browser": "^19.1.0-next.0", - "@angular/platform-browser-dynamic": "^19.1.0-next.0", - "@angular/platform-server": "^19.1.0-next.0", - "@angular/router": "^19.1.0-next.0", - "@angular/ssr": "^19.1.0-next.0", + "@angular/animations": "^19.2.0-next.0", + "@angular/common": "^19.2.0-next.0", + "@angular/compiler": "^19.2.0-next.0", + "@angular/core": "^19.2.0-next.0", + "@angular/forms": "^19.2.0-next.0", + "@angular/platform-browser": "^19.2.0-next.0", + "@angular/platform-browser-dynamic": "^19.2.0-next.0", + "@angular/platform-server": "^19.2.0-next.0", + "@angular/router": "^19.2.0-next.0", + "@angular/ssr": "^19.2.0-next.0", "express": "^4.18.2", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.15.0" }, "devDependencies": { - "@angular-devkit/build-angular": "^19.1.0-next.0", - "@angular/cli": "^19.1.0-next.0", - "@angular/compiler-cli": "^19.1.0-next.0", + "@angular-devkit/build-angular": "^19.2.0-next.0", + "@angular/cli": "^19.2.0-next.0", + "@angular/compiler-cli": "^19.2.0-next.0", "@types/express": "^4.17.17", "@types/jasmine": "~4.3.0", "@types/mime": "^3.0.0", diff --git a/tests/legacy-cli/e2e/assets/BUILD.bazel b/tests/legacy-cli/e2e/assets/BUILD.bazel index a2889b56559f..a3e838b59a7b 100644 --- a/tests/legacy-cli/e2e/assets/BUILD.bazel +++ b/tests/legacy-cli/e2e/assets/BUILD.bazel @@ -1,4 +1,4 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "copy_to_bin") +load("//tools:defaults2.bzl", "copy_to_bin") copy_to_bin( name = "assets", diff --git a/tests/legacy-cli/e2e/assets/protractor-saucelabs.conf.js b/tests/legacy-cli/e2e/assets/protractor-saucelabs.conf.js index f26ee83f5967..fb9ab42798a8 100644 --- a/tests/legacy-cli/e2e/assets/protractor-saucelabs.conf.js +++ b/tests/legacy-cli/e2e/assets/protractor-saucelabs.conf.js @@ -21,25 +21,25 @@ exports.config = { multiCapabilities: [ { browserName: 'chrome', + version: '132', platform: 'Windows 11', - version: '119', tunnelIdentifier, }, { browserName: 'chrome', + version: '131', platform: 'Windows 11', - version: '116', tunnelIdentifier, }, { browserName: 'firefox', - version: '119', + version: '134', platform: 'Windows 11', tunnelIdentifier, }, { browserName: 'firefox', - version: '102', // Latest Firefox ESR version as of Sep 2023 + version: '128', // Latest Firefox ESR version as of Jan 2025 platform: 'Windows 11', tunnelIdentifier, }, @@ -58,13 +58,13 @@ exports.config = { { browserName: 'MicrosoftEdge', platform: 'Windows 11', - version: '118', + version: '132', tunnelIdentifier, }, { browserName: 'MicrosoftEdge', platform: 'Windows 11', - version: '115', + version: '131', tunnelIdentifier, }, ], diff --git a/tests/legacy-cli/e2e/initialize/500-create-project.ts b/tests/legacy-cli/e2e/initialize/500-create-project.ts index b4da91579ac7..0cec8bcfef33 100644 --- a/tests/legacy-cli/e2e/initialize/500-create-project.ts +++ b/tests/legacy-cli/e2e/initialize/500-create-project.ts @@ -1,4 +1,4 @@ -import { join } from 'path'; +import { join } from 'node:path'; import { getGlobalVariable } from '../utils/env'; import { expectFileToExist } from '../utils/fs'; import { gitClean } from '../utils/git'; diff --git a/tests/legacy-cli/e2e/initialize/BUILD.bazel b/tests/legacy-cli/e2e/initialize/BUILD.bazel index 1a5c5c1ffe41..87a882c3462e 100644 --- a/tests/legacy-cli/e2e/initialize/BUILD.bazel +++ b/tests/legacy-cli/e2e/initialize/BUILD.bazel @@ -10,6 +10,7 @@ ts_project( "//:config-files", ], deps = [ - "//tests/legacy-cli/e2e/utils:utils_rjs", + "//:node_modules/@types/node", + "//tests/legacy-cli/e2e/utils", ], ) diff --git a/tests/legacy-cli/e2e/ng-snapshot/BUILD.bazel b/tests/legacy-cli/e2e/ng-snapshot/BUILD.bazel index 079ffeb1accc..a6196b576d38 100644 --- a/tests/legacy-cli/e2e/ng-snapshot/BUILD.bazel +++ b/tests/legacy-cli/e2e/ng-snapshot/BUILD.bazel @@ -1,4 +1,4 @@ -load("@build_bazel_rules_nodejs//:index.bzl", "copy_to_bin") +load("//tools:defaults2.bzl", "copy_to_bin") copy_to_bin( name = "ng-snapshot", diff --git a/tests/legacy-cli/e2e/ng-snapshot/package.json b/tests/legacy-cli/e2e/ng-snapshot/package.json index c2a0441891e0..5abd2effbd82 100644 --- a/tests/legacy-cli/e2e/ng-snapshot/package.json +++ b/tests/legacy-cli/e2e/ng-snapshot/package.json @@ -2,21 +2,21 @@ "description": "snapshot versions of Angular for e2e testing", "private": true, "dependencies": { - "@angular/animations": "github:angular/animations-builds#4c103ca52a38ff728a0ab1c5f9578f70e83643d6", - "@angular/cdk": "github:angular/cdk-builds#5ba6ad089f2b28e71013d357acc41bf91421dd43", - "@angular/common": "github:angular/common-builds#3b597d6b01a9d867223e4e48acd5a2eb52d1862c", - "@angular/compiler": "github:angular/compiler-builds#1a3c02c4b9ade87bc7d89ba19dad6532570402b0", - "@angular/compiler-cli": "github:angular/compiler-cli-builds#dce1169334901520116d091267428f21d18a6d12", - "@angular/core": "github:angular/core-builds#f343af04c17a9213bed8cea4bb18e3a1f94141cb", - "@angular/forms": "github:angular/forms-builds#6c50dd915e48100439ee6ca60e20dcb44f41377c", - "@angular/language-service": "github:angular/language-service-builds#f6bf914f3641748556c9dff229ebf54cc521499c", - "@angular/localize": "github:angular/localize-builds#a5031b5263ad5ab76e8a439405b2fe84e68d3659", - "@angular/material": "github:angular/material-builds#95804188fe01f8df9911764f3e692a0bba4dd75c", - "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#a86bb7b8cfc2ffe4b1eb4ca4113799b0aca697b8", - "@angular/platform-browser": "github:angular/platform-browser-builds#d887b36fc98633c76c414c6a8a88ef032d89ee99", - "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#b760ddf810b5e75500d71ba0852b5b60e732506c", - "@angular/platform-server": "github:angular/platform-server-builds#49db5ed6df6f325f47bc6a1891131e120c1af3c9", - "@angular/router": "github:angular/router-builds#eb1b93897c195e93a5e73fb7402b575b00d9f4f1", - "@angular/service-worker": "github:angular/service-worker-builds#14960de212e5ee468bcee4320b6f12116fdc7ab9" + "@angular/animations": "github:angular/animations-builds#c2612d3bac64a936d8d24dd56da01b0c9f2682c8", + "@angular/cdk": "github:angular/cdk-builds#c2ee5594efe7bfa971893eb7180b5b6de9a156e8", + "@angular/common": "github:angular/common-builds#0184f3a2f9b38efa91803937229f75af346afcdb", + "@angular/compiler": "github:angular/compiler-builds#ae58cb3f20956a5a839d4c79a477112ed7b343c2", + "@angular/compiler-cli": "github:angular/compiler-cli-builds#128ae9cf010699c884d8faec25743ac6d774d2df", + "@angular/core": "github:angular/core-builds#914ec51a8b05e1e9445666303afb1850379e6e13", + "@angular/forms": "github:angular/forms-builds#fc0a02588d98da3fdb44960b2878106066ca7061", + "@angular/language-service": "github:angular/language-service-builds#e170311477c407baec097013312096bfa777cedc", + "@angular/localize": "github:angular/localize-builds#e975a081b6dcae0ddca551c22991e8ac47eaf459", + "@angular/material": "github:angular/material-builds#b8a26ece4d3d27cd7bb6a94b14459941022eb24b", + "@angular/material-moment-adapter": "github:angular/material-moment-adapter-builds#81bf621812a728ba7cf470bfbbc3cf3c70652818", + "@angular/platform-browser": "github:angular/platform-browser-builds#c51d68fb84f5521d22fc8ef83a031e132f93429c", + "@angular/platform-browser-dynamic": "github:angular/platform-browser-dynamic-builds#e2ac515b388e9bb0800ccda300f1d1d3d6e3d72d", + "@angular/platform-server": "github:angular/platform-server-builds#02337660ee628f667ffff17c5c3d101056c22164", + "@angular/router": "github:angular/router-builds#d9f99f500e98f40c9d7e629921b4e69692180741", + "@angular/service-worker": "github:angular/service-worker-builds#a55ae561dfd08048ae6f380d75be50d6bbe65300" } } diff --git a/tests/legacy-cli/e2e/setup/001-create-tmp-dir.ts b/tests/legacy-cli/e2e/setup/001-create-tmp-dir.ts index 29c403be85de..4914921eca18 100644 --- a/tests/legacy-cli/e2e/setup/001-create-tmp-dir.ts +++ b/tests/legacy-cli/e2e/setup/001-create-tmp-dir.ts @@ -1,4 +1,4 @@ -import { dirname } from 'path'; +import { dirname } from 'node:path'; import { getGlobalVariable, setGlobalVariable } from '../utils/env'; import { mktempd } from '../utils/utils'; diff --git a/tests/legacy-cli/e2e/setup/002-npm-sandbox.ts b/tests/legacy-cli/e2e/setup/002-npm-sandbox.ts index 98d7f04dda21..dcd5f8a1a021 100644 --- a/tests/legacy-cli/e2e/setup/002-npm-sandbox.ts +++ b/tests/legacy-cli/e2e/setup/002-npm-sandbox.ts @@ -1,5 +1,5 @@ -import { mkdir, writeFile } from 'fs/promises'; -import { join } from 'path'; +import { mkdir, writeFile } from 'node:fs/promises'; +import { join } from 'node:path'; import { getGlobalVariable, setGlobalVariable } from '../utils/env'; /** diff --git a/tests/legacy-cli/e2e/setup/010-local-publish.ts b/tests/legacy-cli/e2e/setup/010-local-publish.ts index 4809b5a8c12d..b58a5b871daf 100644 --- a/tests/legacy-cli/e2e/setup/010-local-publish.ts +++ b/tests/legacy-cli/e2e/setup/010-local-publish.ts @@ -2,7 +2,7 @@ import { writeFile } from 'node:fs/promises'; import { join } from 'node:path/posix'; import { getGlobalVariable } from '../utils/env'; import { PkgInfo } from '../utils/packages'; -import { globalNpm, extractNpmEnv } from '../utils/process'; +import { globalNpm, extractNpmEnv, extractCIAndInfraEnv } from '../utils/process'; import { isPrereleaseCli } from '../utils/project'; export default async function () { @@ -21,6 +21,7 @@ export default async function () { packageTars.map(({ path: p }) => globalNpm(['publish', '--tag', isPrereleaseCli() ? 'next' : 'latest', p], { ...extractNpmEnv(), + ...extractCIAndInfraEnv(), 'NPM_CONFIG_USERCONFIG': npmrc, }), ), diff --git a/tests/legacy-cli/e2e/setup/200-create-project-dir.ts b/tests/legacy-cli/e2e/setup/200-create-project-dir.ts index 1bfb66dde96f..1e1e049956bf 100644 --- a/tests/legacy-cli/e2e/setup/200-create-project-dir.ts +++ b/tests/legacy-cli/e2e/setup/200-create-project-dir.ts @@ -1,5 +1,5 @@ -import { mkdir } from 'fs/promises'; -import { join } from 'path'; +import { mkdir } from 'node:fs/promises'; +import { join } from 'node:path'; import { getGlobalVariable, setGlobalVariable } from '../utils/env'; /** diff --git a/tests/legacy-cli/e2e/setup/BUILD.bazel b/tests/legacy-cli/e2e/setup/BUILD.bazel index f75ce1c7ab46..a41d626ee921 100644 --- a/tests/legacy-cli/e2e/setup/BUILD.bazel +++ b/tests/legacy-cli/e2e/setup/BUILD.bazel @@ -7,6 +7,7 @@ ts_project( testonly = True, srcs = glob(["**/*.ts"]), deps = [ - "//tests/legacy-cli/e2e/utils:utils_rjs", + "//:node_modules/@types/node", + "//tests/legacy-cli/e2e/utils", ], ) diff --git a/tests/legacy-cli/e2e/tests/BUILD.bazel b/tests/legacy-cli/e2e/tests/BUILD.bazel index 1dc0fa8ec9dc..9dc7c5f96575 100644 --- a/tests/legacy-cli/e2e/tests/BUILD.bazel +++ b/tests/legacy-cli/e2e/tests/BUILD.bazel @@ -6,15 +6,13 @@ ts_project( name = "tests", testonly = True, srcs = glob(["**/*.ts"]), - data = [ - "//tests/legacy-cli/e2e/ng-snapshot", - ], deps = [ - "//:root_modules/@types/express", - "//:root_modules/@types/semver", - "//:root_modules/express", - "//:root_modules/fast-glob", - "//:root_modules/semver", - "//tests/legacy-cli/e2e/utils:utils_rjs", + "//:node_modules/@types/express", + "//:node_modules/@types/node", + "//:node_modules/@types/semver", + "//:node_modules/express", + "//:node_modules/fast-glob", + "//:node_modules/semver", + "//tests/legacy-cli/e2e/utils", ], ) diff --git a/tests/legacy-cli/e2e/tests/build/assets.ts b/tests/legacy-cli/e2e/tests/build/assets.ts index 5a13deec4c26..5c484f02d5cd 100644 --- a/tests/legacy-cli/e2e/tests/build/assets.ts +++ b/tests/legacy-cli/e2e/tests/build/assets.ts @@ -1,4 +1,4 @@ -import * as fs from 'fs'; +import * as fs from 'node:fs'; import { expectFileToExist, expectFileToMatch, writeFile } from '../../utils/fs'; import { ng } from '../../utils/process'; import { updateJsonFile } from '../../utils/project'; diff --git a/tests/legacy-cli/e2e/tests/build/auto-csp.ts b/tests/legacy-cli/e2e/tests/build/auto-csp.ts index 1ea1aa5641d5..1839b160d549 100644 --- a/tests/legacy-cli/e2e/tests/build/auto-csp.ts +++ b/tests/legacy-cli/e2e/tests/build/auto-csp.ts @@ -1,6 +1,6 @@ import assert from 'node:assert'; import { getGlobalVariable } from '../../utils/env'; -import { expectFileToMatch, writeMultipleFiles } from '../../utils/fs'; +import { expectFileToMatch, writeFile, writeMultipleFiles } from '../../utils/fs'; import { findFreePort } from '../../utils/network'; import { execAndWaitForOutputToMatch, ng } from '../../utils/process'; import { updateJsonFile } from '../../utils/project'; @@ -13,6 +13,9 @@ export default async function () { 'This test should not be called in the Webpack suite.', ); + // Add global css to trigger critical css inlining + await writeFile('src/styles.css', `body { color: green }`); + // Turn on auto-CSP await updateJsonFile('angular.json', (json) => { const build = json['projects']['test-project']['architect']['build']; @@ -54,7 +57,7 @@ export default async function () { - +