diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml
index 94fdfb8df840..f21e2612ef53 100644
--- a/.github/workflows/assistant-to-the-branch-manager.yml
+++ b/.github/workflows/assistant-to-the-branch-manager.yml
@@ -2,6 +2,7 @@ name: DevInfra
on:
push:
+ # zizmor: ignore[dangerous-triggers] - {Trigger is safe as workflow does not checkout untrusted code}
pull_request_target:
types: [opened, synchronize, reopened, ready_for_review, labeled]
@@ -17,6 +18,6 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- - uses: angular/dev-infra/github-actions/branch-manager@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ - uses: angular/dev-infra/github-actions/branch-manager@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
with:
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 57b31cb9c2f1..eb33533f00e2 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -21,9 +21,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Generate JSON schema types
@@ -44,11 +44,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
with:
google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }}
- name: Install node modules
@@ -61,11 +61,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
with:
google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }}
- name: Install node modules
@@ -84,13 +84,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
with:
google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }}
- name: Run CLI E2E tests
@@ -100,11 +100,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
with:
google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }}
- name: Install node modules
@@ -137,7 +137,7 @@ jobs:
runs-on: windows-2025
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Download built Windows E2E tests
@@ -164,13 +164,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
with:
google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }}
- name: Run CLI E2E tests
@@ -188,13 +188,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
with:
google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }}
- name: Run CLI E2E tests
@@ -208,34 +208,35 @@ 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@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
with:
google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }}
+ - name: Start Sauce Connect
+ uses: saucelabs/sauce-connect-action@cb88b508c6f9ff4d84490093733315dbd55de022 # v3
+ timeout-minutes: 10
+ with:
+ username: ${{ vars.SAUCE_USERNAME }}
+ accessKey: ${{ secrets.SAUCE_ACCESS_KEY }}
+ region: us-west-1
+ tunnelName: ${{ env.SAUCE_TUNNEL_IDENTIFIER }}
+ proxyLocalhost: allow
+ # By default we disable SSL bumping for all requests. This is because SSL bumping is not needed
+ # for our test setup and in order to perform the SSL bumping, Saucelabs intercepts all HTTP
+ # requests in the tunnel VM and modifies them. This can cause flakiness as it makes all requests
+ # dependent on the SSL bumping middleware.
+ # See: https://wiki.saucelabs.com/display/DOCS/Troubleshooting+Sauce+Connect#TroubleshootingSauceConnect-DisablingSSLBumping
+ tlsPassthroughDomains: all
- name: Run E2E Browser tests
env:
SAUCE_USERNAME: ${{ vars.SAUCE_USERNAME }}
SAUCE_ACCESS_KEY: ${{ secrets.SAUCE_ACCESS_KEY }}
- SAUCE_LOG_FILE: /tmp/angular/sauce-connect.log
- SAUCE_READY_FILE: /tmp/angular/sauce-connect-ready-file.lock
- SAUCE_PID_FILE: /tmp/angular/sauce-connect-pid-file.lock
- SAUCE_TUNNEL_IDENTIFIER: 'angular-${{ github.run_number }}'
- SAUCE_READY_FILE_TIMEOUT: 120
- run: |
- ./scripts/saucelabs/start-tunnel.sh &
- ./scripts/saucelabs/wait-for-tunnel.sh
- pnpm bazel test --config=saucelabs //tests:e2e.saucelabs
- ./scripts/saucelabs/stop-tunnel.sh
- - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
- if: ${{ failure() }}
- with:
- name: sauce-connect-log
- path: ${{ env.SAUCE_CONNECT_DIR_IN_HOST }}/sauce-connect.log
+ run: pnpm bazel test --config=saucelabs //tests:e2e.saucelabs
publish-snapshots:
needs: build
@@ -244,11 +245,11 @@ jobs:
CIRCLE_BRANCH: ${{ github.ref_name }}
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- 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
index f95ab2f4ac05..15fc3e9c9ba5 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -23,12 +23,12 @@ jobs:
with:
persist-credentials: false
- name: Initialize CodeQL
- uses: github/codeql-action/init@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
+ uses: github/codeql-action/init@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
with:
languages: javascript-typescript
build-mode: none
config-file: .github/codeql/config.yml
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
+ uses: github/codeql-action/analyze@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
with:
category: '/language:javascript-typescript'
diff --git a/.github/workflows/dev-infra.yml b/.github/workflows/dev-infra.yml
index e0efdf2b94e4..2c9e701b95e2 100644
--- a/.github/workflows/dev-infra.yml
+++ b/.github/workflows/dev-infra.yml
@@ -1,6 +1,7 @@
name: DevInfra
on:
+ # zizmor: ignore[dangerous-triggers] - {Trigger is safe as workflow does not checkout untrusted code}
pull_request_target:
types: [opened, synchronize, reopened]
issues:
@@ -15,21 +16,21 @@ jobs:
if: github.event_name == 'pull_request_target'
runs-on: ubuntu-latest
steps:
- - uses: angular/dev-infra/github-actions/labeling/pull-request@649c3afeaa46674507b9625537e49de54a695e2b
+ - uses: angular/dev-infra/github-actions/labeling/pull-request@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
with:
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
post_approval_changes:
if: github.event_name == 'pull_request_target'
runs-on: ubuntu-latest
steps:
- - uses: angular/dev-infra/github-actions/post-approval-changes@649c3afeaa46674507b9625537e49de54a695e2b
+ - uses: angular/dev-infra/github-actions/post-approval-changes@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
with:
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
issue_labels:
if: github.event_name == 'issues'
runs-on: ubuntu-latest
steps:
- - uses: angular/dev-infra/github-actions/labeling/issue@649c3afeaa46674507b9625537e49de54a695e2b
+ - uses: angular/dev-infra/github-actions/labeling/issue@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
with:
angular-robot-key: ${{ secrets.ANGULAR_ROBOT_PRIVATE_KEY }}
google-generative-ai-key: ${{ secrets.GOOGLE_GENERATIVE_AI_KEY }}
diff --git a/.github/workflows/perf.yml b/.github/workflows/perf.yml
index dac67ebcbe7f..591414f2e95a 100644
--- a/.github/workflows/perf.yml
+++ b/.github/workflows/perf.yml
@@ -9,7 +9,6 @@ on:
permissions:
contents: 'read'
- id-token: 'write'
defaults:
run:
@@ -23,7 +22,7 @@ jobs:
workflows: ${{ steps.workflows.outputs.workflows }}
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Install node modules
run: pnpm install --frozen-lockfile
- id: workflows
@@ -33,14 +32,17 @@ jobs:
timeout-minutes: 30
runs-on: ubuntu-latest
needs: list
+ permissions:
+ contents: 'read'
+ id-token: 'write'
strategy:
matrix:
workflow: ${{ fromJSON(needs.list.outputs.workflows) }}
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Install node modules
run: pnpm install --frozen-lockfile
# We utilize the google-github-actions/auth action to allow us to get an active credential using workflow
@@ -52,4 +54,7 @@ jobs:
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: pnpm ng-dev perf workflows --name ${{ matrix.workflow }} --commit-sha ${{github.sha}}
+ - run: pnpm ng-dev perf workflows --name "$WORKFLOW" --commit-sha "$COMMIT_SHA"
+ env:
+ WORKFLOW: ${{ matrix.workflow }}
+ COMMIT_SHA: ${{ github.sha }}
diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
index 0f5a37f5751a..ad9364286682 100644
--- a/.github/workflows/pr.yml
+++ b/.github/workflows/pr.yml
@@ -23,7 +23,7 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- - uses: dorny/paths-filter@7b450fff21473bca461d4b92ce414b9d0420d706 # v4.0.2
+ - uses: dorny/paths-filter@ceb8a2b8f2d89434be7ff52d3de7ec3738c5cc9d # v4.0.3
id: filter
with:
filters: |
@@ -34,9 +34,9 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup ESLint Caching
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
@@ -66,17 +66,17 @@ jobs:
# it has been merged.
run: pnpm ng-dev format changed --check ${{ github.event.pull_request.base.sha }}
- name: Check Package Licenses
- uses: angular/dev-infra/github-actions/linting/licenses@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/linting/licenses@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
build:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Build release targets
@@ -93,11 +93,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Run module and package tests
@@ -114,13 +114,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- 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:e2e.${{ matrix.subset }}_node${{ matrix.node }}
@@ -128,11 +128,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Build E2E tests for Windows on Linux
@@ -156,7 +156,7 @@ jobs:
runs-on: windows-2025
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Download built Windows E2E tests
@@ -183,13 +183,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Run CLI E2E tests
run: pnpm bazel test --test_env=E2E_SHARD_TOTAL=3 --test_env=E2E_SHARD_INDEX=${{ matrix.shard }} --config=e2e //tests:e2e.${{ matrix.subset }}_node${{ matrix.node }}
@@ -205,12 +205,12 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Install node modules
run: pnpm install --frozen-lockfile
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@ba726e7bca0b08b125ccc6f93c233749e1213c17
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- 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:e2e.snapshots.${{ matrix.subset }}_node${{ matrix.node }}
diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml
index 2e9f8b03919a..862ead79f856 100644
--- a/.github/workflows/scorecard.yml
+++ b/.github/workflows/scorecard.yml
@@ -30,7 +30,7 @@ jobs:
persist-credentials: false
- name: 'Run analysis'
- uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3
+ uses: ossf/scorecard-action@2d1146689b8cda280b9bc96326124645441f03bc # v2.4.4
with:
results_file: results.sarif
results_format: 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@e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 # v4.37.3
+ uses: github/codeql-action/upload-sarif@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
with:
sarif_file: results.sarif
diff --git a/.nvmrc b/.nvmrc
index f9e7451e7715..c94711948a66 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-22.23.1
+22.23.2
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8867117ff498..4f37cdba567a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,133 @@
+
+
+# 22.1.3 (2026-08-05)
+
+### @angular/cli
+
+| Commit | Type | Description |
+| ---------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------------------------------------------------------------------------------------------------- |
+| [f837b788c6](https://github.com/angular/angular-cli/commit/f837b788c6a23e7661db5455192f5a84d20e9b37) | fix | always install package during ng add to inspect manifest on disk for schematics ([#33718](https://github.com/angular/angular-cli/pull/33718)) |
+| [72ae93638d](https://github.com/angular/angular-cli/commit/72ae93638dd83b3877773ac0d9f7e4c4e9056a33) | fix | correctly report available package updates during bare ng update |
+| [a949e06568](https://github.com/angular/angular-cli/commit/a949e0656855786e4274159be09242ff9c4eb012) | fix | discover migrations from installed packages when omitted by registry metadata ([#33718](https://github.com/angular/angular-cli/pull/33718)) |
+| [1d9122fd50](https://github.com/angular/angular-cli/commit/1d9122fd50f8a9b82199d44f9b0e075726279538) | fix | normalize Windows drive-letter casing for process.cwd |
+
+### @angular/build
+
+| Commit | Type | Description |
+| ---------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------- |
+| [a4860d505a](https://github.com/angular/angular-cli/commit/a4860d505aff0b43fc608cd0745ed187b1d407b5) | fix | prevent build process hang on unhandled error ([#33715](https://github.com/angular/angular-cli/pull/33715)) |
+| [7686d66cab](https://github.com/angular/angular-cli/commit/7686d66cabcdfe90748ac405686d42674a19576f) | fix | retain watch files on error in load result cache |
+| [25b7cf7504](https://github.com/angular/angular-cli/commit/25b7cf7504838d541abfba043d9ea3d616a23c04) | fix | support case-insensitive and alternative license file names |
+| [4fd81402ce](https://github.com/angular/angular-cli/commit/4fd81402ce5f2f3db45a17ee0d116f12edf8d254) | perf | release build resources early in non-watch mode ([#33715](https://github.com/angular/angular-cli/pull/33715)) |
+
+### @angular/ssr
+
+| Commit | Type | Description |
+| ---------------------------------------------------------------------------------------------------- | ---- | ---------------------------------------------------------- |
+| [6af906cb94](https://github.com/angular/angular-cli/commit/6af906cb94bd0686b4c0431989e054711c74892a) | fix | settle writeResponseToNodeResponse when client disconnects |
+| [917d3b2254](https://github.com/angular/angular-cli/commit/917d3b22549c19b91e03ceb0775a3a758142b9de) | perf | avoid buffering request body when sanitizing headers |
+
+
+
+
+
+# 22.1.2 (2026-07-30)
+
+### @angular/cli
+
+| Commit | Type | Description |
+| ---------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------- |
+| [57db27ea91](https://github.com/angular/angular-cli/commit/57db27ea910b102854267dfcd77e8fe60f23993c) | fix | add packages with built-in schematics to devDependencies only |
+
+### @angular/build
+
+| Commit | Type | Description |
+| ---------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------ |
+| [baed978885](https://github.com/angular/angular-cli/commit/baed978885585fceadc64f0151d7474054d57d6a) | fix | prevent IIFE wrapper interleaving for adjacent classes in minified files |
+
+
+
+
+
+# 22.1.1 (2026-07-30)
+
+### @angular/cli
+
+| Commit | Type | Description |
+| ---------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------- |
+| [ab971a8543](https://github.com/angular/angular-cli/commit/ab971a8543d80dfc93fdddf49598564f25196160) | fix | support npm 12 metadata array and error formats |
+
+### @angular/build
+
+| Commit | Type | Description |
+| ---------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------------------- |
+| [db24220fb8](https://github.com/angular/angular-cli/commit/db24220fb8efb5c9416e375a468672ff69d0659d) | fix | rewrite paths from sandboxed execroots when running under Bazel |
+
+
+
+
+
+# 22.1.0 (2026-07-29)
+
+## Deprecations
+
+### @angular-devkit/core
+
+- `stringToFileBuffer` and `fileBufferToString` are deprecated. Use standard Web APIs (`TextEncoder` and `TextDecoder`) instead.
+
+ Internal usages within the repository have been removed and replaced with standard Web APIs. The public API golden file for `@angular-devkit/core` has been updated to reflect the deprecations.
+
+### @schematics/angular
+
+| Commit | Type | Description |
+| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------- |
+| [89d7f59cd](https://github.com/angular/angular-cli/commit/89d7f59cd7cc5d821ac0e81b1fee50e27877c976) | feat | update ai-config to include Angular MCP server config |
+| [b345bb54d](https://github.com/angular/angular-cli/commit/b345bb54d3ec7c73f9db70400f823d90aeab8fa8) | fix | remove unused spec tsconfig outDir |
+
+### @angular/cli
+
+| Commit | Type | Description |
+| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------------------------- |
+| [f59bcf529](https://github.com/angular/angular-cli/commit/f59bcf52917bc5e25b97c863f96127ec8d0f12f5) | fix | abort and guide manual mitigation when updating catalog packages |
+| [48f90f5d5](https://github.com/angular/angular-cli/commit/48f90f5d5e5dd6369b2ccf044a722271c82dffd6) | fix | prevent Yarn registry environment variable override |
+| [c963ecbec](https://github.com/angular/angular-cli/commit/c963ecbec241d42dfb419ae081ba22429e37f09e) | fix | remove algoliasearch dependency and support latest docs versions |
+| [6859d25c3](https://github.com/angular/angular-cli/commit/6859d25c32b6c93cbbf2d4ad4143aa10b52b7588) | fix | resolve correct registry name when using npm alias syntax during update |
+| [3a2589dac](https://github.com/angular/angular-cli/commit/3a2589dac684dfe26b2151b940bd40280d7c5d8e) | fix | respect client-side release age settings during update resolution |
+| [5c3101bff](https://github.com/angular/angular-cli/commit/5c3101bff2e1b9d0b0e4668a183e8bcab8a1540e) | fix | revert package.json changes if installation tasks fail during update |
+| [7932caaf9](https://github.com/angular/angular-cli/commit/7932caaf987c5692d6624f6af23e65ce3f6d27fd) | fix | robustly parse npm manifest from array |
+
+### @angular-devkit/core
+
+| Commit | Type | Description |
+| --------------------------------------------------------------------------------------------------- | -------- | --------------------------------------------------- |
+| [fd336d365](https://github.com/angular/angular-cli/commit/fd336d365dbfe8f558db177a8da24790914a541b) | refactor | deprecate stringToFileBuffer and fileBufferToString |
+
+### @angular/build
+
+| Commit | Type | Description |
+| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------------------------------------------------- |
+| [34d558c3c](https://github.com/angular/angular-cli/commit/34d558c3c98e1b59a2c2808fc04bfbb63dfe8acf) | feat | add built-in SQLite cache store fallback |
+| [0c18dc0f6](https://github.com/angular/angular-cli/commit/0c18dc0f6d4f36d7bbb6f35b37bfa688e8fcf7d2) | feat | emit debug ids for stable subresource integrity hashes |
+| [51f69276f](https://github.com/angular/angular-cli/commit/51f69276fd2b2aab0e94901e79a51f6860ef8690) | feat | enable chunk optimization for server builds |
+| [10dc30f9c](https://github.com/angular/angular-cli/commit/10dc30f9c680f46f65b5beb030f2a75c422a3e71) | feat | migrate advanced optimization Babel plugins to oxc-parser + magic-string |
+| [917393a4c](https://github.com/angular/angular-cli/commit/917393a4cd85172574b155f727da5c1eae196fb1) | feat | migrate i18n inliner to oxc-parser + magic-string |
+| [52ae7f862](https://github.com/angular/angular-cli/commit/52ae7f862a581cac97d5a9b33c9b71b830d95b19) | feat | share persistent build cache across git worktrees |
+| [95510511d](https://github.com/angular/angular-cli/commit/95510511d963384c5a03298300246aa34a62328a) | fix | add bounded timeout to vitest executor disposal |
+| [62b11e316](https://github.com/angular/angular-cli/commit/62b11e316e8248161877592acee5954b2a8c9c66) | fix | anchor debug ID comment matching and make injection idempotent |
+| [6d9b360e5](https://github.com/angular/angular-cli/commit/6d9b360e5f2b7ab3d4ace4db35f674166630f658) | fix | prevent esbuild service hang on internal component stylesheet builds |
+| [291caab61](https://github.com/angular/angular-cli/commit/291caab6158fa804f6221dd024a5b96e6181eaad) | fix | prevent stripping nested sourceMappingURL comments |
+| [0e3ca3dfb](https://github.com/angular/angular-cli/commit/0e3ca3dfba8ef60217089d93a321660ebb6fb838) | fix | support hyphens and underscores when stripping chunk hash in chunk optimizer |
+| [585d08af8](https://github.com/angular/angular-cli/commit/585d08af881a35653dc5e7b1ee7a75b42e154517) | perf | default chunk optimization to use Rolldown |
+| [09d0a11a8](https://github.com/angular/angular-cli/commit/09d0a11a8b832f156aea100ad3497c5221fc0f50) | perf | enable fast-path AST printing with sourcemaps in AotCompilation |
+
+### @angular/ssr
+
+| Commit | Type | Description |
+| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------- |
+| [7ef9ed24d](https://github.com/angular/angular-cli/commit/7ef9ed24d3c111474ae21c06cb2b05a21804f586) | feat | support the standard Forwarded header |
+
+
+
# 22.0.8 (2026-07-23)
@@ -22,32 +152,6 @@
-
-
-# 22.1.0-next.4 (2026-07-15)
-
-### @angular/cli
-
-| Commit | Type | Description |
-| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------ |
-| [3789ceee1](https://github.com/angular/angular-cli/commit/3789ceee18b4528c2acb7989b5d41c32d386a8a8) | fix | copy packageManager field and yarn config for temp installs |
-| [b0b3a47ae](https://github.com/angular/angular-cli/commit/b0b3a47ae95f4e98e1280ff5c9e3751ccecee5a8) | fix | support resolving subproject dependencies in pnpm workspaces |
-
-### @schematics/angular
-
-| Commit | Type | Description |
-| --------------------------------------------------------------------------------------------------- | ---- | ---------------------------------- |
-| [b345bb54d](https://github.com/angular/angular-cli/commit/b345bb54d3ec7c73f9db70400f823d90aeab8fa8) | fix | remove unused spec tsconfig outDir |
-
-### @angular/build
-
-| Commit | Type | Description |
-| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------ |
-| [0c18dc0f6](https://github.com/angular/angular-cli/commit/0c18dc0f6d4f36d7bbb6f35b37bfa688e8fcf7d2) | feat | emit debug ids for stable subresource integrity hashes |
-| [291caab61](https://github.com/angular/angular-cli/commit/291caab6158fa804f6221dd024a5b96e6181eaad) | fix | prevent stripping nested sourceMappingURL comments |
-
-
-
# 22.0.7 (2026-07-15)
@@ -85,30 +189,6 @@
-
-
-# 22.1.0-next.3 (2026-07-09)
-
-### @angular/build
-
-| Commit | Type | Description |
-| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------ |
-| [34d558c3c](https://github.com/angular/angular-cli/commit/34d558c3c98e1b59a2c2808fc04bfbb63dfe8acf) | feat | add built-in SQLite cache store fallback |
-| [52ae7f862](https://github.com/angular/angular-cli/commit/52ae7f862a581cac97d5a9b33c9b71b830d95b19) | feat | share persistent build cache across git worktrees |
-| [41bd100dd](https://github.com/angular/angular-cli/commit/41bd100dd8edebdf6c7279e1c7d3847ee5f22702) | fix | fallback to build target preserveSymlinks option in karma runner |
-| [6d9b360e5](https://github.com/angular/angular-cli/commit/6d9b360e5f2b7ab3d4ace4db35f674166630f658) | fix | prevent esbuild service hang on internal component stylesheet builds |
-| [85c53d990](https://github.com/angular/angular-cli/commit/85c53d9909b8bcb35a360044a0afde5352d45d72) | fix | prevent externalizing builder-injected i18n locale data |
-| [004cc4104](https://github.com/angular/angular-cli/commit/004cc410487b2dbb80001f045cd19f899c980ccc) | fix | strip all vite id prefixes from minified code with external dependencies |
-| [09d0a11a8](https://github.com/angular/angular-cli/commit/09d0a11a8b832f156aea100ad3497c5221fc0f50) | perf | enable fast-path AST printing with sourcemaps in AotCompilation |
-
-### @angular/ssr
-
-| Commit | Type | Description |
-| --------------------------------------------------------------------------------------------------- | ---- | -------------------------------------------------------------- |
-| [0bd22dae0](https://github.com/angular/angular-cli/commit/0bd22dae09a83e36ed3863ca2b050666cc8d7aec) | fix | replace all route parameters when resolving relative redirects |
-
-
-
# 22.0.6 (2026-07-08)
@@ -129,47 +209,6 @@
-
-
-# 22.1.0-next.2 (2026-07-01)
-
-### @angular/cli
-
-| Commit | Type | Description |
-| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------------------- |
-| [010cef665](https://github.com/angular/angular-cli/commit/010cef6657365cad8529c164d7c594ca598180a0) | fix | gracefully handle package manager errors in command handler |
-| [3a2589dac](https://github.com/angular/angular-cli/commit/3a2589dac684dfe26b2151b940bd40280d7c5d8e) | fix | respect client-side release age settings during update resolution |
-| [edb4594de](https://github.com/angular/angular-cli/commit/edb4594deb5ff96967c1ce13b4494e3fd675ebec) | fix | respect release age policy in update bootstrapping logic |
-
-### @schematics/angular
-
-| Commit | Type | Description |
-| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------- |
-| [0b3172e07](https://github.com/angular/angular-cli/commit/0b3172e076b75df5b8c3066a115d1151f8b0bad9) | fix | remove unused app tsconfig outDir |
-
-### @angular-devkit/build-angular
-
-| Commit | Type | Description |
-| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------ |
-| [2d3eb7fb3](https://github.com/angular/angular-cli/commit/2d3eb7fb3b43b64c476296581481dbf67cb57b1d) | fix | prevent OS command injection in ssr-dev-server builder |
-
-### @angular/build
-
-| Commit | Type | Description |
-| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------- |
-| [75c1dce38](https://github.com/angular/angular-cli/commit/75c1dce387075d3ea9d6da572f7daa589856bc0e) | fix | auto-inject localize/init in library unit tests |
-| [dc27e17fc](https://github.com/angular/angular-cli/commit/dc27e17fc2cbb91b10b508a7e46cd72734959ffa) | fix | inherit preserveSymlinks option from build target in unit-test builder |
-| [61e25fb1d](https://github.com/angular/angular-cli/commit/61e25fb1db56694da800f330dd65cb7e50ea2d11) | fix | load zone.js dynamically for library unit tests |
-| [0010b922f](https://github.com/angular/angular-cli/commit/0010b922f8fc5a9c57b9512594f9c3b4da3fa2ae) | fix | scope createRequire module resolution using paths to prevent parent paths |
-
-### @angular/ssr
-
-| Commit | Type | Description |
-| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------- |
-| [d9fb854c9](https://github.com/angular/angular-cli/commit/d9fb854c9a48ba8852d57f3fa8f7a9640ee0aab2) | fix | preserve response headers during redirect |
-
-
-
# 22.0.5 (2026-07-01)
@@ -247,43 +286,6 @@
-
-
-# 22.1.0-next.1 (2026-06-24)
-
-### @angular/cli
-
-| Commit | Type | Description |
-| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------- |
-| [48f90f5d5](https://github.com/angular/angular-cli/commit/48f90f5d5e5dd6369b2ccf044a722271c82dffd6) | fix | prevent Yarn registry environment variable override |
-| [38e0fabc0](https://github.com/angular/angular-cli/commit/38e0fabc05eb5d622a25c68692d7d073485750e3) | fix | support registry metadata fetching under bun package manager |
-| [3ce6e5fc3](https://github.com/angular/angular-cli/commit/3ce6e5fc3b4f4b5fb6ac99cc82023bf01894d14c) | perf | implement semaphore backpressure throttling in PackageManager |
-
-### @schematics/angular
-
-| Commit | Type | Description |
-| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------ |
-| [01008f1c6](https://github.com/angular/angular-cli/commit/01008f1c69321d0a8b5b8344672b594a68fe83b6) | fix | remove default workspace vscode mcp.json configuration |
-
-### @angular/build
-
-| Commit | Type | Description |
-| --------------------------------------------------------------------------------------------------- | ---- | -------------------------------------------------------------------- |
-| [851711b03](https://github.com/angular/angular-cli/commit/851711b031603293b58e33357c70eea7675452e3) | fix | aggregate parallel worker performance timings on the main thread |
-| [585d08af8](https://github.com/angular/angular-cli/commit/585d08af881a35653dc5e7b1ee7a75b42e154517) | perf | default chunk optimization to use Rolldown |
-| [3019c8032](https://github.com/angular/angular-cli/commit/3019c8032ba9462d0edc614940b26ade24e45ec8) | perf | dispose builder result context early in non-watch mode |
-| [583736a4d](https://github.com/angular/angular-cli/commit/583736a4de8b3d0b4d79709a445809c264e38c17) | perf | implement semaphore backpressure throttling in JavaScriptTransformer |
-
-### @angular/ssr
-
-| Commit | Type | Description |
-| --------------------------------------------------------------------------------------------------- | ---- | --------------------------------------------------------------------- |
-| [7ef9ed24d](https://github.com/angular/angular-cli/commit/7ef9ed24d3c111474ae21c06cb2b05a21804f586) | feat | support the standard Forwarded header |
-| [37f1a7491](https://github.com/angular/angular-cli/commit/37f1a749132d55a81cec231bd260ed280b10fc00) | fix | avoid caching non-SSG page lookups |
-| [5875b6024](https://github.com/angular/angular-cli/commit/5875b6024ff9e59fddf7481b6b961d73ae809963) | fix | prioritize options over environment variables in AngularNodeAppEngine |
-
-
-
# 22.0.4 (2026-06-24)
@@ -402,44 +404,6 @@
-
-
-# 22.1.0-next.0 (2026-06-11)
-
-## Deprecations
-
-### @angular-devkit/core
-
-- `stringToFileBuffer` and `fileBufferToString` are deprecated. Use standard Web APIs (`TextEncoder` and `TextDecoder`) instead.
-
- Internal usages within the repository have been removed and replaced with standard Web APIs. The public API golden file for `@angular-devkit/core` has been updated to reflect the deprecations.
-
-### @schematics/angular
-
-| Commit | Type | Description |
-| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------- |
-| [89d7f59cd](https://github.com/angular/angular-cli/commit/89d7f59cd7cc5d821ac0e81b1fee50e27877c976) | feat | update ai-config to include Angular MCP server config |
-
-### @angular/cli
-
-| Commit | Type | Description |
-| --------------------------------------------------------------------------------------------------- | ---- | -------------------------------------- |
-| [7932caaf9](https://github.com/angular/angular-cli/commit/7932caaf987c5692d6624f6af23e65ce3f6d27fd) | fix | robustly parse npm manifest from array |
-
-### @angular-devkit/core
-
-| Commit | Type | Description |
-| --------------------------------------------------------------------------------------------------- | -------- | --------------------------------------------------- |
-| [fd336d365](https://github.com/angular/angular-cli/commit/fd336d365dbfe8f558db177a8da24790914a541b) | refactor | deprecate stringToFileBuffer and fileBufferToString |
-
-### @angular/ssr
-
-| Commit | Type | Description |
-| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------ |
-| [ddcef9d48](https://github.com/angular/angular-cli/commit/ddcef9d484e205c5fcfd93d184425c1c1af19c34) | fix | correct grammar in console warning for redirected location headers |
-
-
-
# 20.3.28 (2026-06-11)
diff --git a/MODULE.bazel b/MODULE.bazel
index 4b82a12dc781..02156424e307 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -7,48 +7,48 @@ module(
bazel_dep(name = "platforms", version = "1.1.0")
bazel_dep(name = "yq.bzl", version = "0.3.6")
bazel_dep(name = "rules_nodejs", version = "6.7.5")
-bazel_dep(name = "aspect_rules_js", version = "3.2.3")
+bazel_dep(name = "aspect_rules_js", version = "3.3.1")
bazel_dep(name = "aspect_rules_ts", version = "3.9.2")
bazel_dep(name = "rules_pkg", version = "1.2.0")
bazel_dep(name = "rules_cc", version = "0.2.22")
bazel_dep(name = "jq.bzl", version = "0.6.1")
-bazel_dep(name = "bazel_lib", version = "3.5.0")
-bazel_dep(name = "bazel_skylib", version = "1.9.0")
+bazel_dep(name = "bazel_lib", version = "3.7.1")
+bazel_dep(name = "bazel_skylib", version = "1.9.2")
bazel_dep(name = "aspect_rules_esbuild", version = "0.26.0")
bazel_dep(name = "aspect_rules_jasmine", version = "2.0.4")
bazel_dep(name = "rules_angular")
git_override(
module_name = "rules_angular",
- commit = "db445dccfe48aad20be6ee3df456df91660ff217",
+ commit = "20a373d609c4f5765b9ad367a205f3a635dd2cda",
remote = "https://github.com/angular/rules_angular.git",
)
bazel_dep(name = "devinfra")
git_override(
module_name = "devinfra",
- commit = "daa0b5ecd15668d12163f70d4c9836ada70808c9",
+ commit = "04230133d395dfb032d782b8e63b4fcbbd406aa5",
remote = "https://github.com/angular/dev-infra.git",
)
bazel_dep(name = "rules_browsers")
git_override(
module_name = "rules_browsers",
- commit = "3a6bd40f9be945dc51c976a21424c656448f9b09",
+ commit = "37853f23de9a9a70f53c02a9baa27e08d7d12003",
remote = "https://github.com/angular/rules_browsers.git",
)
node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node")
node.toolchain(
node_repositories = {
- "22.23.1-darwin_arm64": ("node-v22.23.1-darwin-arm64.tar.gz", "node-v22.23.1-darwin-arm64", "ef28d8fab2c0e4314522d4bb1b7173270aa3937e93b92cb7de79c112ac1fa953"),
- "22.23.1-darwin_amd64": ("node-v22.23.1-darwin-x64.tar.gz", "node-v22.23.1-darwin-x64", "b8da981b8a0b1241b70249204916da76c63573ddf5814dbd2d1e41069105cb81"),
- "22.23.1-linux_arm64": ("node-v22.23.1-linux-arm64.tar.xz", "node-v22.23.1-linux-arm64", "0294e8b915ab75f92c7513d2fcb830ae06e10684e6c603e99a87dbf8835389c1"),
- "22.23.1-linux_ppc64le": ("node-v22.23.1-linux-ppc64le.tar.xz", "node-v22.23.1-linux-ppc64le", "a645bcb7bbc498d09ba9249b5c6414aa6d0a461d8854afc61e32096646ba5e66"),
- "22.23.1-linux_s390x": ("node-v22.23.1-linux-s390x.tar.xz", "node-v22.23.1-linux-s390x", "f16b5636ba925b462e627c5e0ef47de3255bf4a7b38d56db58e2cf165df19c3c"),
- "22.23.1-linux_amd64": ("node-v22.23.1-linux-x64.tar.xz", "node-v22.23.1-linux-x64", "9749e988f437343b7fa832c69ded82a312e41a03116d766797ac14f6f9eee578"),
- "22.23.1-windows_amd64": ("node-v22.23.1-win-x64.zip", "node-v22.23.1-win-x64", "7df0bc9375723f4a86b3aa1b7cc73342423d9677a8df4538aca31a049e309c29"),
+ "22.23.2-darwin_arm64": ("node-v22.23.2-darwin-arm64.tar.gz", "node-v22.23.2-darwin-arm64", "61130f394c1630d211dd50aecc4353d379480f36d3ac913cd85dbba1aed585c6"),
+ "22.23.2-darwin_amd64": ("node-v22.23.2-darwin-x64.tar.gz", "node-v22.23.2-darwin-x64", "58e99022c2ff89395576cc7fd4d98cea24bb68081475d5f88b801ee8729fb026"),
+ "22.23.2-linux_arm64": ("node-v22.23.2-linux-arm64.tar.xz", "node-v22.23.2-linux-arm64", "fff4078c5def658577f92c88db7db3bc0072924bfb93fe52c1e744a54e94abb8"),
+ "22.23.2-linux_ppc64le": ("node-v22.23.2-linux-ppc64le.tar.xz", "node-v22.23.2-linux-ppc64le", "e2ba10110ad34096c051fe47134fcd12175ecc48e7e879d7d4c78b70cf66442c"),
+ "22.23.2-linux_s390x": ("node-v22.23.2-linux-s390x.tar.xz", "node-v22.23.2-linux-s390x", "50aa0935c7caee2f95434f84c2c19f16e4f223257eadb341a3a2d5aaa545bbe6"),
+ "22.23.2-linux_amd64": ("node-v22.23.2-linux-x64.tar.xz", "node-v22.23.2-linux-x64", "d60acfe00a2932254bb0ad20e01b0d74397a0875595de719654b214f4b03f307"),
+ "22.23.2-windows_amd64": ("node-v22.23.2-win-x64.zip", "node-v22.23.2-win-x64", "1177b4137ba5adaa56354ae40f1080c7450e8ae09cecb47da459d1c52ac99f97"),
},
- node_version = "22.23.1",
+ node_version = "22.23.2",
)
use_repo(
node,
@@ -131,8 +131,8 @@ use_repo(
pnpm = use_extension("@aspect_rules_js//npm:extensions.bzl", "pnpm")
pnpm.pnpm(
name = "pnpm",
- pnpm_version = "11.15.1",
- pnpm_version_integrity = "sha512-gTULB+U8lTigLx8jA7QpD6LXvgTlbiqXDEzEtBfcdh3hlu2r1J1Vx9yVgNuBAHxEFD5OPX5GKzAA0jwlUSLQZQ==",
+ pnpm_version = "11.21.0",
+ pnpm_version_integrity = "sha512-UhcFvOaJkk6scvWjWHEi82JonvZXHlW6gAdv1jfBETLs/62ib61Op5xIW/3b/T1aKlsFgFp36JPeceyKbMo7sQ==",
)
use_repo(pnpm, "pnpm")
diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock
index eb446604633b..5dea915111bc 100644
--- a/MODULE.bazel.lock
+++ b/MODULE.bazel.lock
@@ -24,8 +24,8 @@
"https://bcr.bazel.build/modules/aspect_rules_jasmine/2.0.4/source.json": "81ffb708333cd98ec3c0b4cc004f4d5cf92a16914b5196a2892c45141bba7cff",
"https://bcr.bazel.build/modules/aspect_rules_js/2.0.0/MODULE.bazel": "b45b507574aa60a92796e3e13c195cd5744b3b8aff516a9c0cb5ae6a048161c5",
"https://bcr.bazel.build/modules/aspect_rules_js/3.0.3/MODULE.bazel": "28a30e8fc33bf64a67835d64d124f6e05a7d59648dcb27b110fb3502f761e503",
- "https://bcr.bazel.build/modules/aspect_rules_js/3.2.3/MODULE.bazel": "3a0363a5b8ec4931488dc327c577a78c1f5a725293ebffaa5d2613283701aa8a",
- "https://bcr.bazel.build/modules/aspect_rules_js/3.2.3/source.json": "fa3187962f5fdeee0c6226792904aaafb2cf585717a264fa4393a767bffb99fe",
+ "https://bcr.bazel.build/modules/aspect_rules_js/3.3.1/MODULE.bazel": "3e02b51b503ba8dda69b043290f6cc11add9aeb8db0bf1f6c861c396c7ddc5b2",
+ "https://bcr.bazel.build/modules/aspect_rules_js/3.3.1/source.json": "d5e0736539b00bdd33015bb336877ad5a4d16f1d1d4af13ffeade395106cabd7",
"https://bcr.bazel.build/modules/aspect_rules_ts/3.9.2/MODULE.bazel": "feeb6c45b69c995eca3e5ca5872658c80df658022e01044eca00cf472bb89142",
"https://bcr.bazel.build/modules/aspect_rules_ts/3.9.2/source.json": "cf3075502f798f71a9c5707a7684eaf0b86da11ed440fd90ea34385dc297676a",
"https://bcr.bazel.build/modules/aspect_tools_telemetry/0.2.8/MODULE.bazel": "aa975a83e72bcaac62ee61ab12b788ea324a1d05c4aab28aadb202f647881679",
@@ -52,8 +52,8 @@
"https://bcr.bazel.build/modules/bazel_lib/3.0.0-rc.0/MODULE.bazel": "d6e00979a98ac14ada5e31c8794708b41434d461e7e7ca39b59b765e6d233b18",
"https://bcr.bazel.build/modules/bazel_lib/3.0.0/MODULE.bazel": "22b70b80ac89ad3f3772526cd9feee2fa412c2b01933fea7ed13238a448d370d",
"https://bcr.bazel.build/modules/bazel_lib/3.2.2/MODULE.bazel": "e2c890c8a515d6bca9c66d47718aa9e44b458fde64ec7204b8030bf2d349058c",
- "https://bcr.bazel.build/modules/bazel_lib/3.5.0/MODULE.bazel": "1eba0ba67d418d99fb682c36147a9e1725abbc8fc25544be64702e32eda2be29",
- "https://bcr.bazel.build/modules/bazel_lib/3.5.0/source.json": "98d49ec7e2b15298c990f09ec8cdea8d4788c2885497aa9cbb0a74e36e994df8",
+ "https://bcr.bazel.build/modules/bazel_lib/3.7.1/MODULE.bazel": "b6fd9b2f8fab956420c11836f416efac4a70e20804ae384ebe62773a4ed70046",
+ "https://bcr.bazel.build/modules/bazel_lib/3.7.1/source.json": "635fdaa28b50c04febc5e60ef51bc913d3bc87bfbaac7045449273c2341648cb",
"https://bcr.bazel.build/modules/bazel_skylib/1.0.3/MODULE.bazel": "bcb0fd896384802d1ad283b4e4eb4d718eebd8cb820b0a2c3a347fb971afd9d8",
"https://bcr.bazel.build/modules/bazel_skylib/1.1.1/MODULE.bazel": "1add3e7d93ff2e6998f9e118022c84d163917d912f5afafb3058e3d2f1545b5e",
"https://bcr.bazel.build/modules/bazel_skylib/1.2.0/MODULE.bazel": "44fe84260e454ed94ad326352a698422dbe372b21a1ac9f3eab76eb531223686",
@@ -68,8 +68,8 @@
"https://bcr.bazel.build/modules/bazel_skylib/1.8.0/MODULE.bazel": "2fb3fb53675f6adfc1ca5bfbd5cfb655ae350fba4706d924a8ec7e3ba945671c",
"https://bcr.bazel.build/modules/bazel_skylib/1.8.1/MODULE.bazel": "88ade7293becda963e0e3ea33e7d54d3425127e0a326e0d17da085a5f1f03ff6",
"https://bcr.bazel.build/modules/bazel_skylib/1.8.2/MODULE.bazel": "69ad6927098316848b34a9142bcc975e018ba27f08c4ff403f50c1b6e646ca67",
- "https://bcr.bazel.build/modules/bazel_skylib/1.9.0/MODULE.bazel": "72997b29dfd95c3fa0d0c48322d05590418edef451f8db8db5509c57875fb4b7",
- "https://bcr.bazel.build/modules/bazel_skylib/1.9.0/source.json": "7ad77c1e8c1b84222d9b3f3cae016a76639435744c19330b0b37c0a3c9da7dc0",
+ "https://bcr.bazel.build/modules/bazel_skylib/1.9.2/MODULE.bazel": "8c51259b0f4481475586dbfede7591e57b75702e637f840f6138eec80c34b270",
+ "https://bcr.bazel.build/modules/bazel_skylib/1.9.2/source.json": "41cbde7546542dee2f26e3f10bf1c4ac57909943194b7ac48cc5238a01893aa8",
"https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84",
"https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8",
"https://bcr.bazel.build/modules/gawk/5.3.2.bcr.1/MODULE.bazel": "cdf8cbe5ee750db04b78878c9633cc76e80dcf4416cbe982ac3a9222f80713c8",
@@ -222,7 +222,7 @@
"moduleExtensions": {
"@@aspect_rules_esbuild+//esbuild:extensions.bzl%esbuild": {
"general": {
- "bzlTransitiveDigest": "DE8ssop85SA4kEHMbyc2ajgEW3TNsQFbT4L6IfuwTZo=",
+ "bzlTransitiveDigest": "DfFT9JjdwDXEFWTCpbJTMqiSwGOU02Jq1C1XgMbRhec=",
"usagesDigest": "LSQ+zZp7JNgnBONTxxXnwGr4NTh2qtQYk7qwXXz5qWo=",
"recordedFileInputs": {},
"recordedDirentsInputs": {},
@@ -438,7 +438,7 @@
"@@aspect_tools_telemetry+//:extension.bzl%telemetry": {
"general": {
"bzlTransitiveDigest": "4w9RM0xjdKo1crk5zL20a/TuhqO0P1z1LsuXDneBXD4=",
- "usagesDigest": "hqK7Zzp+y5jlPhecF8Z77KSrR9zpTS+H88Epy3pRc/s=",
+ "usagesDigest": "q7mSkkDF8zaV9mtEPYuvConVymuL69UDTnd+J5Pgo0w=",
"recordedFileInputs": {},
"recordedDirentsInputs": {},
"envVariables": {
@@ -449,13 +449,13 @@
"repoRuleId": "@@aspect_tools_telemetry+//:extension.bzl%tel_repository",
"attributes": {
"deps": {
- "aspect_rules_js": "3.2.3",
+ "aspect_rules_js": "3.3.1",
"aspect_rules_ts": "3.9.2",
"aspect_rules_esbuild": "0.26.0",
"aspect_rules_jasmine": "2.0.4",
"aspect_tools_telemetry": "0.4.2"
},
- "last_notice": 0
+ "last_notice": 1
}
}
},
@@ -539,7 +539,7 @@
},
"@@rules_browsers+//browsers:extensions.bzl%browsers": {
"general": {
- "bzlTransitiveDigest": "3W9m9j39szqkOoSVVqamCaSwCCw7x5Wq1kcYTwYBNOc=",
+ "bzlTransitiveDigest": "4TUvIB8juKCShOmy6m77drIdimJqOTEPwfzMxkWD5a4=",
"usagesDigest": "FmXYJVoVJlnfUU8x8gObSvu4qWcco/9Faw61aC/wBF0=",
"recordedFileInputs": {},
"recordedDirentsInputs": {},
@@ -548,9 +548,9 @@
"rules_browsers_chrome_linux": {
"repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo",
"attributes": {
- "sha256": "13d6638183ccab406ee16e28730826bd3ea57fe564a741bc935401221dfec64f",
+ "sha256": "5b132ebe0be5c0c15cb5222c33e04e37ae21ed3e00d84c68e905f80f29221c50",
"urls": [
- "https://storage.googleapis.com/chrome-for-testing-public/152.0.7960.0/linux64/chrome-headless-shell-linux64.zip"
+ "https://storage.googleapis.com/chrome-for-testing-public/153.0.7993.0/linux64/chrome-headless-shell-linux64.zip"
],
"named_files": {
"CHROME-HEADLESS-SHELL": "chrome-headless-shell-linux64/chrome-headless-shell"
@@ -566,9 +566,9 @@
"rules_browsers_chrome_mac": {
"repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo",
"attributes": {
- "sha256": "b50ee6ddb3bf30c91f3094fa41cc8e8de60e317c63ef058db2375346cde78d98",
+ "sha256": "522e62dbfce61fddd413fb76a65e699b6f5bdce4045e4398d1e2fb1ef73ff6f3",
"urls": [
- "https://storage.googleapis.com/chrome-for-testing-public/152.0.7960.0/mac-x64/chrome-headless-shell-mac-x64.zip"
+ "https://storage.googleapis.com/chrome-for-testing-public/153.0.7993.0/mac-x64/chrome-headless-shell-mac-x64.zip"
],
"named_files": {
"CHROME-HEADLESS-SHELL": "chrome-headless-shell-mac-x64/chrome-headless-shell"
@@ -584,9 +584,9 @@
"rules_browsers_chrome_mac_arm": {
"repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo",
"attributes": {
- "sha256": "49859c1d3b0d29a82c58765e9e5fe21efa0bf7c03a86fc91eb5f3f94f34c45b6",
+ "sha256": "b68d54b63ab30042874a87ad81a135360fa87e1d4763df2431b30b4d59878b4e",
"urls": [
- "https://storage.googleapis.com/chrome-for-testing-public/152.0.7960.0/mac-arm64/chrome-headless-shell-mac-arm64.zip"
+ "https://storage.googleapis.com/chrome-for-testing-public/153.0.7993.0/mac-arm64/chrome-headless-shell-mac-arm64.zip"
],
"named_files": {
"CHROME-HEADLESS-SHELL": "chrome-headless-shell-mac-arm64/chrome-headless-shell"
@@ -602,9 +602,9 @@
"rules_browsers_chrome_win64": {
"repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo",
"attributes": {
- "sha256": "d161d88a999effd212ce87df2ff710be1a25a495cc428d4c3029feccd02dafe9",
+ "sha256": "0fd5b488d41686cb7cb0be1feb861f1e4cb44d9c5e67a4c5328a385742aa6a8e",
"urls": [
- "https://storage.googleapis.com/chrome-for-testing-public/152.0.7960.0/win64/chrome-headless-shell-win64.zip"
+ "https://storage.googleapis.com/chrome-for-testing-public/153.0.7993.0/win64/chrome-headless-shell-win64.zip"
],
"named_files": {
"CHROME-HEADLESS-SHELL": "chrome-headless-shell-win64/chrome-headless-shell.exe"
@@ -620,9 +620,9 @@
"rules_browsers_chromedriver_linux": {
"repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo",
"attributes": {
- "sha256": "7bb2eedf7030523ba617704bf6c3e472b5974d048d7fa6ac6a764904556c6f36",
+ "sha256": "69139f654d93c12d04209713c725b33ea7074a1e35c47aaf98f419c4a00b4e9b",
"urls": [
- "https://storage.googleapis.com/chrome-for-testing-public/152.0.7960.0/linux64/chromedriver-linux64.zip"
+ "https://storage.googleapis.com/chrome-for-testing-public/153.0.7993.0/linux64/chromedriver-linux64.zip"
],
"named_files": {
"CHROMEDRIVER": "chromedriver-linux64/chromedriver"
@@ -636,9 +636,9 @@
"rules_browsers_chromedriver_mac": {
"repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo",
"attributes": {
- "sha256": "5c1fffef90ecea2bb0c12c5a9c0549116fc7acda13cce15881da4aa8b74e6794",
+ "sha256": "b56b49cb41658c25405757b3c01a5412403e3744ee6935c5f9f59bf2b907bcf6",
"urls": [
- "https://storage.googleapis.com/chrome-for-testing-public/152.0.7960.0/mac-x64/chromedriver-mac-x64.zip"
+ "https://storage.googleapis.com/chrome-for-testing-public/153.0.7993.0/mac-x64/chromedriver-mac-x64.zip"
],
"named_files": {
"CHROMEDRIVER": "chromedriver-mac-x64/chromedriver"
@@ -652,9 +652,9 @@
"rules_browsers_chromedriver_mac_arm": {
"repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo",
"attributes": {
- "sha256": "a33d54c99a50fef25cbedb7c3d3cdd838dd784556138648bcc5da5814109a306",
+ "sha256": "e2bd843b45ba197632d29eeef188940488779684207eb3118a5a78c26aef9659",
"urls": [
- "https://storage.googleapis.com/chrome-for-testing-public/152.0.7960.0/mac-arm64/chromedriver-mac-arm64.zip"
+ "https://storage.googleapis.com/chrome-for-testing-public/153.0.7993.0/mac-arm64/chromedriver-mac-arm64.zip"
],
"named_files": {
"CHROMEDRIVER": "chromedriver-mac-arm64/chromedriver"
@@ -668,9 +668,9 @@
"rules_browsers_chromedriver_win64": {
"repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo",
"attributes": {
- "sha256": "2673d6a87dabd50c516d4d69b4daf742ff6169877c04bb226971503012262d8c",
+ "sha256": "2f56f10ba3989d8b5c44c22cff080c2cc436314f8f8babbcc151bb95b34de841",
"urls": [
- "https://storage.googleapis.com/chrome-for-testing-public/152.0.7960.0/win64/chromedriver-win64.zip"
+ "https://storage.googleapis.com/chrome-for-testing-public/153.0.7993.0/win64/chromedriver-win64.zip"
],
"named_files": {
"CHROMEDRIVER": "chromedriver-win64/chromedriver.exe"
@@ -684,9 +684,9 @@
"rules_browsers_firefox_linux": {
"repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo",
"attributes": {
- "sha256": "748704b06ffaabc8bd2b3351c93c244db4e29bfe21af6ecb4d6c124c7bd4a234",
+ "sha256": "bfc57e7b6b4e6204b11e7e03c4b93cff708e9fb37f6b9948be243455311d82ee",
"urls": [
- "https://archive.mozilla.org/pub/firefox/releases/152.0/linux-x86_64/en-US/firefox-152.0.tar.xz"
+ "https://archive.mozilla.org/pub/firefox/releases/153.0/linux-x86_64/en-US/firefox-153.0.tar.xz"
],
"named_files": {
"FIREFOX": "firefox/firefox"
@@ -700,9 +700,9 @@
"rules_browsers_firefox_mac": {
"repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo",
"attributes": {
- "sha256": "b8a46188850d2fb32f16ad3c0829b08cd689bc714b8ee18fd9b09bb60629004d",
+ "sha256": "2f9b5a20e546e7e79e4182f8fe10353a3e251635963ab3f6d399a3f290adeb96",
"urls": [
- "https://archive.mozilla.org/pub/firefox/releases/152.0/mac/en-US/Firefox%20152.0.dmg"
+ "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/en-US/Firefox%20153.0.dmg"
],
"named_files": {
"FIREFOX": "Firefox.app/Contents/MacOS/firefox"
@@ -716,9 +716,9 @@
"rules_browsers_firefox_mac_arm": {
"repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo",
"attributes": {
- "sha256": "b8a46188850d2fb32f16ad3c0829b08cd689bc714b8ee18fd9b09bb60629004d",
+ "sha256": "2f9b5a20e546e7e79e4182f8fe10353a3e251635963ab3f6d399a3f290adeb96",
"urls": [
- "https://archive.mozilla.org/pub/firefox/releases/152.0/mac/en-US/Firefox%20152.0.dmg"
+ "https://archive.mozilla.org/pub/firefox/releases/153.0/mac/en-US/Firefox%20153.0.dmg"
],
"named_files": {
"FIREFOX": "Firefox.app/Contents/MacOS/firefox"
@@ -732,9 +732,9 @@
"rules_browsers_firefox_win64": {
"repoRuleId": "@@rules_browsers+//browsers/private:browser_repo.bzl%browser_repo",
"attributes": {
- "sha256": "3c426623ff83cb014402607c7ec99fea5b39eec2e44a07f639680c393ff9784e",
+ "sha256": "b409ff5af3419214f11f928e67b1f44c1ad0f8a46f7db7e697caedefa02a6d2a",
"urls": [
- "https://archive.mozilla.org/pub/firefox/releases/152.0/win64/en-US/Firefox%20Setup%20152.0.exe"
+ "https://archive.mozilla.org/pub/firefox/releases/153.0/win64/en-US/Firefox%20Setup%20153.0.exe"
],
"named_files": {
"FIREFOX": "core/firefox.exe"
@@ -1175,7 +1175,7 @@
"@@yq.bzl+//yq:extensions.bzl%yq": {
"general": {
"bzlTransitiveDigest": "UfFMy8CWK4/dVo/tfaSAIYUiDGNAPes5eRllx9O9Q9Q=",
- "usagesDigest": "Sllnnruao+9gE+ivwtmfqL78yZPGXm4HVMOBoVEIW0U=",
+ "usagesDigest": "hKjC8oZmSZDlZ1NsPZgCEomqFtqBXEQo88wUuHfg4F4=",
"recordedFileInputs": {},
"recordedDirentsInputs": {},
"envVariables": {},
diff --git a/constants.bzl b/constants.bzl
index 6987637a4442..88f85d3477b0 100644
--- a/constants.bzl
+++ b/constants.bzl
@@ -3,10 +3,10 @@ RELEASE_ENGINES_NODE = "^22.22.3 || ^24.15.0 || >=26.0.0"
RELEASE_ENGINES_NPM = "^6.11.0 || ^7.5.6 || >=8.0.0"
RELEASE_ENGINES_YARN = ">= 1.13.0"
-NG_PACKAGR_VERSION = "^22.1.0-next.0"
-ANGULAR_FW_VERSION = "^22.1.0-next.0"
-ANGULAR_FW_PEER_DEP = "^22.0.0 || ^22.1.0-next.0"
-NG_PACKAGR_PEER_DEP = "^22.0.0 || ^22.1.0-next.0"
+NG_PACKAGR_VERSION = "^22.1.0"
+ANGULAR_FW_VERSION = "^22.1.0"
+ANGULAR_FW_PEER_DEP = "^22.0.0"
+NG_PACKAGR_PEER_DEP = "^22.0.0"
# Baseline widely-available date in `YYYY-MM-DD` format which defines Angular's
# browser support. This date serves as the source of truth for the Angular CLI's
diff --git a/modules/testing/builder/package.json b/modules/testing/builder/package.json
index 9aede9dc7d10..048981abdc06 100644
--- a/modules/testing/builder/package.json
+++ b/modules/testing/builder/package.json
@@ -8,7 +8,7 @@
"browser-sync": "3.0.4",
"istanbul-lib-instrument": "6.0.3",
"jsdom": "29.1.1",
- "ng-packagr": "22.1.0-next.3",
+ "ng-packagr": "22.1.1",
"rxjs": "7.8.2",
"vitest": "4.1.10"
}
diff --git a/package.json b/package.json
index f67f33227c76..dc7b763b1402 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@angular/devkit-repo",
- "version": "22.1.0-next.4",
+ "version": "22.1.3",
"private": true,
"description": "Software Development Kit for Angular",
"keywords": [
@@ -28,12 +28,12 @@
"type": "git",
"url": "git+https://github.com/angular/angular-cli.git"
},
- "packageManager": "pnpm@11.15.1",
+ "packageManager": "pnpm@11.21.0",
"engines": {
"node": "^22.22.3 || ^24.15.0 || >=26.0.0",
"npm": "Please use pnpm instead of NPM to install dependencies",
"yarn": "Please use pnpm instead of Yarn to install dependencies",
- "pnpm": "11.15.1"
+ "pnpm": "11.21.0"
},
"author": "Angular Authors",
"license": "MIT",
@@ -42,23 +42,23 @@
},
"homepage": "https://github.com/angular/angular-cli",
"dependencies": {
- "@angular/compiler-cli": "22.1.0-rc.0",
+ "@angular/compiler-cli": "22.1.1",
"typescript": "6.0.3"
},
"devDependencies": {
- "@angular/animations": "22.1.0-rc.0",
- "@angular/cdk": "22.1.0-next.4",
- "@angular/common": "22.1.0-rc.0",
- "@angular/compiler": "22.1.0-rc.0",
- "@angular/core": "22.1.0-rc.0",
- "@angular/forms": "22.1.0-rc.0",
- "@angular/localize": "22.1.0-rc.0",
- "@angular/material": "22.1.0-next.4",
- "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#7a67d5221a9efec2b69b102759d04223a3fc8552",
- "@angular/platform-browser": "22.1.0-rc.0",
- "@angular/platform-server": "22.1.0-rc.0",
- "@angular/router": "22.1.0-rc.0",
- "@angular/service-worker": "22.1.0-rc.0",
+ "@angular/animations": "22.1.1",
+ "@angular/cdk": "22.1.1",
+ "@angular/common": "22.1.1",
+ "@angular/compiler": "22.1.1",
+ "@angular/core": "22.1.1",
+ "@angular/forms": "22.1.1",
+ "@angular/localize": "22.1.1",
+ "@angular/material": "22.1.1",
+ "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#c71d9b6af7560faa3d002534d416a8045111adae",
+ "@angular/platform-browser": "22.1.1",
+ "@angular/platform-server": "22.1.1",
+ "@angular/router": "22.1.1",
+ "@angular/service-worker": "22.1.1",
"@babel/core": "8.0.1",
"@bazel/bazelisk": "1.28.1",
"@bazel/buildifier": "8.2.1",
@@ -96,8 +96,8 @@
"@typescript-eslint/parser": "8.64.0",
"ajv": "8.20.0",
"buffer": "6.0.3",
- "esbuild": "0.28.1",
- "esbuild-wasm": "0.28.1",
+ "esbuild": "0.28.2",
+ "esbuild-wasm": "0.28.2",
"eslint": "10.7.0",
"eslint-config-prettier": "10.1.8",
"eslint-plugin-import": "2.32.0",
diff --git a/packages/angular/build/BUILD.bazel b/packages/angular/build/BUILD.bazel
index 7325ec88d35b..5a6f811e3ee5 100644
--- a/packages/angular/build/BUILD.bazel
+++ b/packages/angular/build/BUILD.bazel
@@ -338,7 +338,7 @@ npm_package(
],
stamp_files = [
"src/utils/version.js",
- "src/tools/esbuild/utils.js",
+ "src/tools/esbuild/target.js",
"src/utils/normalize-cache.js",
"src/utils/supported-browsers.js",
],
diff --git a/packages/angular/build/package.json b/packages/angular/build/package.json
index a049f92d4a73..e37ee6976688 100644
--- a/packages/angular/build/package.json
+++ b/packages/angular/build/package.json
@@ -27,13 +27,13 @@
"@vitejs/plugin-basic-ssl": "2.3.0",
"beasties": "0.4.3",
"browserslist": "^4.26.0",
- "esbuild": "0.28.1",
+ "esbuild": "0.28.2",
"https-proxy-agent": "9.1.0",
"jsonc-parser": "3.3.1",
"listr2": "10.2.2",
"magic-string": "1.0.0",
"mrmime": "2.0.1",
- "oxc-parser": "0.140.0",
+ "oxc-parser": "0.142.0",
"parse5-html-rewriting-stream": "8.0.1",
"picomatch": "4.0.5",
"piscina": "5.2.0",
@@ -55,8 +55,8 @@
"istanbul-lib-instrument": "6.0.3",
"jsdom": "29.1.1",
"less": "4.6.7",
- "ng-packagr": "22.1.0-next.3",
- "postcss": "8.5.19",
+ "ng-packagr": "22.1.1",
+ "postcss": "8.5.25",
"rollup": "4.62.2",
"rxjs": "7.8.2",
"vitest": "4.1.10"
diff --git a/packages/angular/build/src/builders/application/build-action.ts b/packages/angular/build/src/builders/application/build-action.ts
index d7dbdc8cfe21..dbec8d687b9f 100644
--- a/packages/angular/build/src/builders/application/build-action.ts
+++ b/packages/angular/build/src/builders/application/build-action.ts
@@ -81,7 +81,7 @@ export async function* runEsBuildBuildAction(
const withProgress: typeof withSpinner = progress ? withSpinner : withNoProgress;
// Initial build
- let result: ExecutionResult;
+ let result: ExecutionResult | undefined;
try {
// Perform the build action
result = await withProgress('Building...', () => action());
@@ -89,8 +89,8 @@ export async function* runEsBuildBuildAction(
// Log all diagnostic (error/warning/logs) messages
await logMessages(logger, result, colors, jsonLogs);
} finally {
- // Ensure Sass workers are shutdown if not watching
- if (!watch) {
+ // Ensure Sass workers are shutdown if not watching or if the initial build failed
+ if (!watch || !result) {
shutdownSassWorkerPool();
}
}
diff --git a/packages/angular/build/src/builders/application/chunk-optimizer.ts b/packages/angular/build/src/builders/application/chunk-optimizer.ts
index 7d7a6e56b829..2241a4204999 100644
--- a/packages/angular/build/src/builders/application/chunk-optimizer.ts
+++ b/packages/angular/build/src/builders/application/chunk-optimizer.ts
@@ -418,6 +418,7 @@ export async function optimizeChunks(
const record = createInitialFileRecord(entryRecord.depth + 1);
+ original.initialFiles.set(importPath, record);
entriesToAnalyze.push([importPath, record]);
}
}
diff --git a/packages/angular/build/src/builders/application/execute-build.ts b/packages/angular/build/src/builders/application/execute-build.ts
index 21beb57bf478..53aaec882cbf 100644
--- a/packages/angular/build/src/builders/application/execute-build.ts
+++ b/packages/angular/build/src/builders/application/execute-build.ts
@@ -18,11 +18,8 @@ import { checkCommonJSModules } from '../../tools/esbuild/commonjs-checker';
import { LOCALE_DATA_BASE_MODULE } from '../../tools/esbuild/i18n-locale-plugin';
import { extractLicenses } from '../../tools/esbuild/license-extractor';
import { profileAsync } from '../../tools/esbuild/profiling';
-import {
- calculateEstimatedTransferSizes,
- logBuildStats,
- transformSupportedBrowsersToTargets,
-} from '../../tools/esbuild/utils';
+import { transformSupportedBrowsersToTargets } from '../../tools/esbuild/target';
+import { calculateEstimatedTransferSizes, logBuildStats } from '../../tools/esbuild/utils';
import { BudgetCalculatorResult, checkBudgets } from '../../utils/bundle-calculator';
import { optimizeChunksThreshold } from '../../utils/environment-options';
import { resolveAssets } from '../../utils/resolve-assets';
@@ -74,12 +71,19 @@ export async function executeBuild(
let bundlingResult: BundleContextResult;
let templateUpdates: Map | undefined;
let angularCompilationContext: AngularCompilationContext | undefined;
+ let executionResult: ExecutionResult | undefined;
try {
if (rebuildState) {
bundlerContexts = rebuildState.rebuildContexts;
componentStyleBundler = rebuildState.componentStyleBundler;
codeBundleCache = rebuildState.codeBundleCache;
templateUpdates = rebuildState.templateUpdates;
+ executionResult = new ExecutionResult(
+ bundlerContexts,
+ componentStyleBundler,
+ codeBundleCache,
+ templateUpdates,
+ );
// Reset template updates for new rebuild
templateUpdates?.clear();
@@ -122,6 +126,12 @@ export async function executeBuild(
angularCompilationContext,
templateUpdates,
);
+ executionResult = new ExecutionResult(
+ bundlerContexts,
+ componentStyleBundler,
+ codeBundleCache,
+ templateUpdates,
+ );
// Bundle everything on initial build
bundlingResult = await BundlerContext.bundleAll([
@@ -138,234 +148,241 @@ export async function executeBuild(
const componentResults = await componentStyleBundler.bundleAllFiles(true, true);
bundlingResult = BundlerContext.mergeResults([bundlingResult, ...componentResults]);
}
- } catch (error) {
- await angularCompilationContext?.dispose();
- throw error;
- }
-
- const executionResult = new ExecutionResult(
- bundlerContexts,
- componentStyleBundler,
- codeBundleCache,
- templateUpdates,
- );
- executionResult.addWarnings(bundlingResult.warnings);
-
- // Add used external component style referenced files to be watched
- if (options.externalRuntimeStyles) {
- executionResult.extraWatchFiles.push(...componentStyleBundler.collectReferencedFiles());
- }
- // Return if the bundling has errors
- if (bundlingResult.errors) {
- executionResult.addErrors(bundlingResult.errors);
-
- return executionResult;
- }
+ executionResult.addWarnings(bundlingResult.warnings);
- // Optimize chunks if enabled and threshold is met.
- // This pass uses Rollup/Rolldown to further optimize chunks generated by esbuild.
- if (options.optimizationOptions.scripts) {
- // Count lazy chunks (files not needed for initial load).
- // Advanced chunk optimization is most beneficial when there are multiple lazy chunks.
- const { metafile, initialFiles } = bundlingResult;
- const lazyChunksCount = Object.keys(metafile.outputs).filter(
- (path) => path.endsWith('.js') && !initialFiles.has(path),
- ).length;
-
- // Only run if the number of lazy chunks meets the configured threshold.
- // This avoids overhead for small projects with few chunks.
- if (lazyChunksCount >= optimizeChunksThreshold) {
- const { optimizeChunks } = await import('./chunk-optimizer');
- const optimizationResult = await profileAsync('OPTIMIZE_CHUNKS', () =>
- optimizeChunks(
- bundlingResult,
- options.sourcemapOptions.scripts ? !options.sourcemapOptions.hidden || 'hidden' : false,
- ),
- );
+ // Add used external component style referenced files to be watched
+ if (options.externalRuntimeStyles) {
+ executionResult.extraWatchFiles.push(...componentStyleBundler.collectReferencedFiles());
+ }
- if (optimizationResult.errors) {
- executionResult.addErrors(optimizationResult.errors);
+ // In non-watch mode, the bundler rebuild contexts and Angular compilation
+ // are no longer needed once bundling completes. Dispose them early to free
+ // worker processes, TypeScript ASTs, and caches before post-bundling steps
+ // execute or before returning bundling errors.
+ // This is fire-and-forget so worker teardown runs concurrently in the background
+ // without blocking the critical path of post-bundle optimization steps.
+ // Any in-flight disposal is awaited in the builder action's finally block.
+ if (!options.watch) {
+ void angularCompilationContext?.dispose();
+ void executionResult.dispose();
+ }
- return executionResult;
- }
+ // Return if the bundling has errors
+ if (bundlingResult.errors) {
+ executionResult.addErrors(bundlingResult.errors);
- bundlingResult = optimizationResult;
+ return executionResult;
}
- }
- // Analyze external imports if external options are enabled
- if (options.externalPackages || bundlingResult.externalConfiguration) {
- const {
- externalConfiguration = [],
- externalImports: { browser = [], server = [] },
- } = bundlingResult;
- // 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 => {
- // Locale-data imports are injected by the builder itself (see i18n-locale-plugin) and must stay resolvable
- // even when the containing package is externalized by the user.
- if (dep.startsWith(`${LOCALE_DATA_BASE_MODULE}/`)) {
- return false;
- }
+ // Optimize chunks if enabled and threshold is met.
+ // This pass uses Rollup/Rolldown to further optimize chunks generated by esbuild.
+ if (options.optimizationOptions.scripts) {
+ // Count lazy chunks (files not needed for initial load).
+ // Advanced chunk optimization is most beneficial when there are multiple lazy chunks.
+ const { metafile, initialFiles } = bundlingResult;
+ const lazyChunksCount = Object.keys(metafile.outputs).filter(
+ (path) => path.endsWith('.js') && !initialFiles.has(path),
+ ).length;
+
+ // Only run if the number of lazy chunks meets the configured threshold.
+ // This avoids overhead for small projects with few chunks.
+ if (lazyChunksCount >= optimizeChunksThreshold) {
+ const { optimizeChunks } = await import('./chunk-optimizer');
+ const optimizationResult = await profileAsync('OPTIMIZE_CHUNKS', () =>
+ optimizeChunks(
+ bundlingResult,
+ options.sourcemapOptions.scripts ? !options.sourcemapOptions.hidden || 'hidden' : false,
+ ),
+ );
+
+ if (optimizationResult.errors) {
+ executionResult.addErrors(optimizationResult.errors);
+
+ return executionResult;
+ }
- if (exclusions.has(dep)) {
- return true;
+ bundlingResult = optimizationResult;
}
+ }
- for (const prefix of exclusionsPrefixes) {
- if (dep.startsWith(prefix)) {
+ // Analyze external imports if external options are enabled
+ if (options.externalPackages || bundlingResult.externalConfiguration) {
+ const {
+ externalConfiguration = [],
+ externalImports: { browser = [], server = [] },
+ } = bundlingResult;
+ // 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 => {
+ // Locale-data imports are injected by the builder itself (see i18n-locale-plugin) and must stay resolvable
+ // even when the containing package is externalized by the user.
+ if (dep.startsWith(`${LOCALE_DATA_BASE_MODULE}/`)) {
+ return false;
+ }
+
+ if (exclusions.has(dep)) {
return true;
}
- }
- return false;
- };
+ for (const prefix of exclusionsPrefixes) {
+ if (dep.startsWith(prefix)) {
+ return true;
+ }
+ }
- const implicitBrowser: string[] = [];
- for (const dep of browser) {
- if (isExplicitExternal(dep)) {
- explicitExternal.add(dep);
- } else {
- implicitBrowser.push(dep);
+ 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);
+ const implicitServer: string[] = [];
+ for (const dep of server) {
+ if (isExplicitExternal(dep)) {
+ explicitExternal.add(dep);
+ } else {
+ implicitServer.push(dep);
+ }
}
- }
- executionResult.setExternalMetadata(implicitBrowser, implicitServer, [...explicitExternal]);
- }
+ executionResult.setExternalMetadata(implicitBrowser, implicitServer, [...explicitExternal]);
+ }
- const { metafile, initialFiles, outputFiles } = bundlingResult;
+ const { metafile, initialFiles, outputFiles } = bundlingResult;
- executionResult.outputFiles.push(...outputFiles);
+ executionResult.outputFiles.push(...outputFiles);
- // Analyze files for bundle budget failures if present
- let budgetFailures: BudgetCalculatorResult[] | undefined;
- if (options.budgets) {
- const compatStats = generateBudgetStats(metafile, outputFiles, initialFiles);
- budgetFailures = [...checkBudgets(options.budgets, compatStats, true)];
- for (const { message, severity } of budgetFailures) {
- if (severity === 'error') {
- executionResult.addError(message);
- } else {
- executionResult.addWarning(message);
+ // Analyze files for bundle budget failures if present
+ let budgetFailures: BudgetCalculatorResult[] | undefined;
+ if (options.budgets) {
+ const compatStats = generateBudgetStats(metafile, outputFiles, initialFiles);
+ budgetFailures = [...checkBudgets(options.budgets, compatStats, true)];
+ for (const { message, severity } of budgetFailures) {
+ if (severity === 'error') {
+ executionResult.addError(message);
+ } else {
+ executionResult.addWarning(message);
+ }
}
}
- }
- // Calculate estimated transfer size if scripts are optimized
- let estimatedTransferSizes;
- if (optimizationOptions.scripts || optimizationOptions.styles.minify) {
- estimatedTransferSizes = await calculateEstimatedTransferSizes(executionResult.outputFiles);
- }
-
- // Check metafile for CommonJS module usage if optimizing scripts
- if (optimizationOptions.scripts) {
- const messages = checkCommonJSModules(metafile, options.allowedCommonJsDependencies);
- executionResult.addWarnings(messages);
- }
+ // Calculate estimated transfer size if scripts are optimized
+ let estimatedTransferSizes;
+ if (optimizationOptions.scripts || optimizationOptions.styles.minify) {
+ estimatedTransferSizes = await calculateEstimatedTransferSizes(executionResult.outputFiles);
+ }
- // Copy assets
- if (assets) {
- executionResult.addAssets(await resolveAssets(assets, workspaceRoot));
- }
+ // Check metafile for CommonJS module usage if optimizing scripts
+ if (optimizationOptions.scripts) {
+ const messages = checkCommonJSModules(metafile, options.allowedCommonJsDependencies);
+ executionResult.addWarnings(messages);
+ }
- // Extract and write licenses for used packages
- if (options.extractLicenses) {
- executionResult.addOutputFile(
- '3rdpartylicenses.txt',
- await extractLicenses(metafile, workspaceRoot),
- BuildOutputFileType.Root,
- );
- }
+ // Copy assets
+ if (assets) {
+ executionResult.addAssets(await resolveAssets(assets, workspaceRoot));
+ }
- // Watch input index HTML file if configured
- if (options.indexHtmlOptions) {
- executionResult.extraWatchFiles.push(options.indexHtmlOptions.input);
- executionResult.htmlIndexPath = options.indexHtmlOptions.output;
- executionResult.htmlBaseHref = options.baseHref;
- }
+ // Extract and write licenses for used packages
+ if (options.extractLicenses) {
+ executionResult.addOutputFile(
+ '3rdpartylicenses.txt',
+ await extractLicenses(metafile, workspaceRoot),
+ BuildOutputFileType.Root,
+ );
+ }
- // Create server app engine manifest
- if (serverEntryPoint) {
- executionResult.addOutputFile(
- SERVER_APP_ENGINE_MANIFEST_FILENAME,
- generateAngularServerAppEngineManifest(i18nOptions, security.allowedHosts, baseHref),
- BuildOutputFileType.ServerRoot,
- );
- }
+ // Watch input index HTML file if configured
+ if (options.indexHtmlOptions) {
+ executionResult.extraWatchFiles.push(options.indexHtmlOptions.input);
+ executionResult.htmlIndexPath = options.indexHtmlOptions.output;
+ executionResult.htmlBaseHref = options.baseHref;
+ }
- // Perform i18n translation inlining if enabled
- if (i18nOptions.shouldInline) {
- const result = await inlineI18n(metafile, options, executionResult, initialFiles);
- executionResult.addErrors(result.errors);
- executionResult.addWarnings(result.warnings);
- executionResult.addPrerenderedRoutes(result.prerenderedRoutes);
- } else {
- const result = await executePostBundleSteps(
- metafile,
- options,
- executionResult.outputFiles,
- executionResult.assetFiles,
- initialFiles,
- // Set lang attribute to the defined source locale if present
- i18nOptions.hasDefinedSourceLocale ? i18nOptions.sourceLocale : undefined,
- );
+ // Create server app engine manifest
+ if (serverEntryPoint) {
+ executionResult.addOutputFile(
+ SERVER_APP_ENGINE_MANIFEST_FILENAME,
+ generateAngularServerAppEngineManifest(i18nOptions, security.allowedHosts, baseHref),
+ BuildOutputFileType.ServerRoot,
+ );
+ }
- // Deduplicate and add errors and warnings
- executionResult.addErrors([...new Set(result.errors)]);
- executionResult.addWarnings([...new Set(result.warnings)]);
+ // Perform i18n translation inlining if enabled
+ if (i18nOptions.shouldInline) {
+ const result = await inlineI18n(metafile, options, executionResult, initialFiles);
+ executionResult.addErrors(result.errors);
+ executionResult.addWarnings(result.warnings);
+ executionResult.addPrerenderedRoutes(result.prerenderedRoutes);
+ } else {
+ const result = await executePostBundleSteps(
+ metafile,
+ options,
+ executionResult.outputFiles,
+ executionResult.assetFiles,
+ initialFiles,
+ // Set lang attribute to the defined source locale if present
+ i18nOptions.hasDefinedSourceLocale ? i18nOptions.sourceLocale : undefined,
+ );
- executionResult.addPrerenderedRoutes(result.prerenderedRoutes);
- executionResult.outputFiles.push(...result.additionalOutputFiles);
- executionResult.assetFiles.push(...result.additionalAssets);
- }
+ // Deduplicate and add errors and warnings
+ executionResult.addErrors([...new Set(result.errors)]);
+ executionResult.addWarnings([...new Set(result.warnings)]);
- executionResult.addOutputFile(
- 'prerendered-routes.json',
- JSON.stringify({ routes: executionResult.prerenderedRoutes }, null, 2),
- BuildOutputFileType.Root,
- );
+ executionResult.addPrerenderedRoutes(result.prerenderedRoutes);
+ executionResult.outputFiles.push(...result.additionalOutputFiles);
+ executionResult.assetFiles.push(...result.additionalAssets);
+ }
- // Write metafile if stats option is enabled
- if (options.stats) {
executionResult.addOutputFile(
- 'stats.json',
- JSON.stringify(metafile, null, 2),
+ 'prerendered-routes.json',
+ JSON.stringify({ routes: executionResult.prerenderedRoutes }, null, 2),
BuildOutputFileType.Root,
);
- }
- if (!jsonLogs && !options.quiet) {
- const changedFiles =
- rebuildState && executionResult.findChangedFiles(rebuildState.previousOutputInfo);
- executionResult.addLog(
- logBuildStats(
- metafile,
- outputFiles,
- initialFiles,
- budgetFailures,
- colors,
- changedFiles,
- estimatedTransferSizes,
- !!ssrOptions,
- verbose,
- ),
- );
- }
+ // Write metafile if stats option is enabled
+ if (options.stats) {
+ executionResult.addOutputFile(
+ 'stats.json',
+ JSON.stringify(metafile, null, 2),
+ BuildOutputFileType.Root,
+ );
+ }
+
+ if (!jsonLogs && !options.quiet) {
+ const changedFiles =
+ rebuildState && executionResult.findChangedFiles(rebuildState.previousOutputInfo);
+ executionResult.addLog(
+ logBuildStats(
+ metafile,
+ outputFiles,
+ initialFiles,
+ budgetFailures,
+ colors,
+ changedFiles,
+ estimatedTransferSizes,
+ !!ssrOptions,
+ verbose,
+ ),
+ );
+ }
- return executionResult;
+ return executionResult;
+ } catch (error) {
+ await Promise.allSettled([angularCompilationContext?.dispose(), executionResult?.dispose()]);
+
+ throw error;
+ }
}
diff --git a/packages/angular/build/src/builders/application/options.ts b/packages/angular/build/src/builders/application/options.ts
index 4ec810ff3c07..b3c180843f70 100644
--- a/packages/angular/build/src/builders/application/options.ts
+++ b/packages/angular/build/src/builders/application/options.ts
@@ -160,7 +160,7 @@ export async function normalizeOptions(
options.preserveSymlinks ?? process.execArgv.includes('--preserve-symlinks');
// Setup base paths based on workspace root and project information
- const workspaceRoot = canonicalizePath(context.workspaceRoot, preserveSymlinks);
+ const workspaceRoot = canonicalizePath(context.workspaceRoot);
const projectMetadata = await context.getProjectMetadata(projectName);
const { projectRoot, projectSourceRoot } = getProjectRootPaths(workspaceRoot, projectMetadata);
diff --git a/packages/angular/build/src/builders/application/setup-bundling.ts b/packages/angular/build/src/builders/application/setup-bundling.ts
index bb53c0bae902..79209ba0eaf9 100644
--- a/packages/angular/build/src/builders/application/setup-bundling.ts
+++ b/packages/angular/build/src/builders/application/setup-bundling.ts
@@ -19,7 +19,7 @@ import {
import { BundlerContext } from '../../tools/esbuild/bundler-context';
import { createGlobalScriptsBundleOptions } from '../../tools/esbuild/global-scripts';
import { createGlobalStylesBundleOptions } from '../../tools/esbuild/global-styles';
-import { getSupportedNodeTargets } from '../../tools/esbuild/utils';
+import { getSupportedNodeTargets } from '../../tools/esbuild/target';
import type { NormalizedApplicationBuildOptions } from './options';
/**
diff --git a/packages/angular/build/src/builders/application/tests/behavior/rebuild-global_styles_spec.ts b/packages/angular/build/src/builders/application/tests/behavior/rebuild-global_styles_spec.ts
index 22c4c32202bd..2de5c5f229ca 100644
--- a/packages/angular/build/src/builders/application/tests/behavior/rebuild-global_styles_spec.ts
+++ b/packages/angular/build/src/builders/application/tests/behavior/rebuild-global_styles_spec.ts
@@ -132,5 +132,119 @@ describeBuilder(buildApplication, APPLICATION_BUILDER_INFO, (harness) => {
{ outputLogsOnFailure: false },
);
});
+
+ it('rebuilds PostCSS stylesheet after error on rebuild from plugin dependency', async () => {
+ harness.useTarget('build', {
+ ...BASE_OPTIONS,
+ watch: true,
+ styles: ['src/styles.css'],
+ });
+
+ await harness.writeFile(
+ 'test-plugin.js',
+ `
+ const fs = require('fs');
+ const path = require('path');
+ module.exports = () => {
+ return {
+ postcssPlugin: 'test-plugin',
+ Once(root, { result }) {
+ const themePath = path.join(path.dirname(root.source.input.file), 'theme.json');
+ result.messages.push({
+ type: 'dependency',
+ file: themePath,
+ });
+ const data = fs.readFileSync(themePath, 'utf-8');
+ const json = JSON.parse(data);
+ root.append('body { color: ' + json.color + '; }');
+ },
+ };
+ };
+ module.exports.postcss = true;
+ `,
+ );
+ await harness.writeFile(
+ '.postcssrc.json',
+ JSON.stringify({
+ plugins: {
+ './test-plugin.js': {},
+ },
+ }),
+ );
+ await harness.writeFile('src/styles.css', '/* base */');
+ await harness.writeFile('src/theme.json', '{"color": "aqua"}');
+
+ await harness.executeWithCases(
+ [
+ async ({ result }) => {
+ expect(result?.success).toBe(true);
+ harness.expectFile('dist/browser/styles.css').content.toContain('color: aqua');
+ harness.expectFile('dist/browser/styles.css').content.not.toContain('color: blue');
+
+ await harness.writeFile('src/theme.json', 'invalid-json');
+ },
+ async ({ result }) => {
+ expect(result?.success).toBe(false);
+
+ await harness.writeFile('src/theme.json', '{"color": "blue"}');
+ },
+ ({ result }) => {
+ expect(result?.success).toBe(true);
+ harness.expectFile('dist/browser/styles.css').content.not.toContain('color: aqua');
+ harness.expectFile('dist/browser/styles.css').content.toContain('color: blue');
+ },
+ ],
+ { outputLogsOnFailure: false },
+ );
+ });
+
+ it('rebuilds PostCSS stylesheet after CSS syntax error on initial build from import', async () => {
+ harness.useTarget('build', {
+ ...BASE_OPTIONS,
+ watch: true,
+ styles: ['src/styles.css'],
+ });
+
+ await harness.writeFile(
+ 'noop-plugin.js',
+ `
+ module.exports = () => ({ postcssPlugin: 'noop-plugin' });
+ module.exports.postcss = true;
+ `,
+ );
+ await harness.writeFile(
+ '.postcssrc.json',
+ JSON.stringify({
+ plugins: {
+ './noop-plugin.js': {},
+ },
+ }),
+ );
+ await harness.writeFile('src/styles.css', "@import './a.css';");
+ await harness.writeFile('src/a.css', "a { ' }");
+
+ await harness.executeWithCases(
+ [
+ async ({ result }) => {
+ expect(result?.success).toBe(false);
+
+ await harness.writeFile('src/a.css', 'body { color: aqua; }');
+ },
+ async ({ result }) => {
+ expect(result?.success).toBe(true);
+ harness.expectFile('dist/browser/styles.css').content.toContain('color: aqua');
+ harness.expectFile('dist/browser/styles.css').content.not.toContain('color: blue');
+
+ await harness.writeFile('src/a.css', 'body { color: blue; }');
+ },
+ ({ result }) => {
+ expect(result?.success).toBe(true);
+ harness.expectFile('dist/browser/styles.css').content.not.toContain('color: aqua');
+ harness.expectFile('dist/browser/styles.css').content.toContain('color: blue');
+ },
+ ],
+ { outputLogsOnFailure: false },
+ );
+ });
});
});
diff --git a/packages/angular/build/src/builders/application/tests/options/extract-licenses_spec.ts b/packages/angular/build/src/builders/application/tests/options/extract-licenses_spec.ts
index 402200a27f9d..2c495e703a7b 100644
--- a/packages/angular/build/src/builders/application/tests/options/extract-licenses_spec.ts
+++ b/packages/angular/build/src/builders/application/tests/options/extract-licenses_spec.ts
@@ -55,5 +55,96 @@ describeBuilder(buildApplication, APPLICATION_BUILDER_INFO, (harness) => {
harness.expectFile('dist/3rdpartylicenses.txt').content.toContain('MIT');
harness.expectFile('dist/browser/en-US/main.js').toExist();
});
+
+ it(`should extract license from a package with a lowercase 'license' file`, async () => {
+ await harness.writeFile(
+ 'node_modules/test-package-a/package.json',
+ JSON.stringify({
+ name: 'test-package-a',
+ version: '1.0.0',
+ main: 'index.js',
+ license: 'MIT',
+ }),
+ );
+ await harness.writeFile(
+ 'node_modules/test-package-a/index.js',
+ 'console.log("test-package-a");',
+ );
+ await harness.writeFile('node_modules/test-package-a/license', 'TEST_LOWERCASE_LICENSE_TEXT');
+ await harness.appendToFile('src/main.ts', "\nimport 'test-package-a';\n");
+
+ harness.useTarget('build', {
+ ...BASE_OPTIONS,
+ extractLicenses: true,
+ });
+
+ const { result } = await harness.executeOnce();
+ expect(result?.success).toBeTrue();
+ harness
+ .expectFile('dist/3rdpartylicenses.txt')
+ .content.toContain('TEST_LOWERCASE_LICENSE_TEXT');
+ });
+
+ it(`should extract license from a package with an alternative license file name (e.g., 'MIT-LICENCE.txt')`, async () => {
+ await harness.writeFile(
+ 'node_modules/test-package-b/package.json',
+ JSON.stringify({
+ name: 'test-package-b',
+ version: '1.0.0',
+ main: 'index.js',
+ license: 'MIT',
+ }),
+ );
+ await harness.writeFile(
+ 'node_modules/test-package-b/index.js',
+ 'console.log("test-package-b");',
+ );
+ await harness.writeFile(
+ 'node_modules/test-package-b/MIT-LICENCE.txt',
+ 'TEST_ALTERNATIVE_LICENSE_TEXT',
+ );
+ await harness.appendToFile('src/main.ts', "\nimport 'test-package-b';\n");
+
+ harness.useTarget('build', {
+ ...BASE_OPTIONS,
+ extractLicenses: true,
+ });
+
+ const { result } = await harness.executeOnce();
+ expect(result?.success).toBeTrue();
+ harness
+ .expectFile('dist/3rdpartylicenses.txt')
+ .content.toContain('TEST_ALTERNATIVE_LICENSE_TEXT');
+ });
+
+ it(`should extract license from a package with a custom license file specified in package.json`, async () => {
+ await harness.writeFile(
+ 'node_modules/test-package-c/package.json',
+ JSON.stringify({
+ name: 'test-package-c',
+ version: '1.0.0',
+ main: 'index.js',
+ license: 'SEE LICENSE IN custom-license.md',
+ }),
+ );
+ await harness.writeFile(
+ 'node_modules/test-package-c/index.js',
+ 'console.log("test-package-c");',
+ );
+ await harness.writeFile(
+ 'node_modules/test-package-c/custom-license.md',
+ 'TEST_CUSTOM_LICENSE_TEXT',
+ );
+ await harness.appendToFile('src/main.ts', "\nimport 'test-package-c';\n");
+
+ harness.useTarget('build', {
+ ...BASE_OPTIONS,
+ extractLicenses: true,
+ });
+
+ const { result } = await harness.executeOnce();
+ expect(result?.success).toBeTrue();
+ harness.expectFile('dist/3rdpartylicenses.txt').content.toContain('TEST_CUSTOM_LICENSE_TEXT');
+ });
});
});
diff --git a/packages/angular/build/src/builders/application/tests/options/index_spec.ts b/packages/angular/build/src/builders/application/tests/options/index_spec.ts
index 11228658bbce..b53467caaec6 100644
--- a/packages/angular/build/src/builders/application/tests/options/index_spec.ts
+++ b/packages/angular/build/src/builders/application/tests/options/index_spec.ts
@@ -79,16 +79,17 @@ describeBuilder(buildApplication, APPLICATION_BUILDER_INFO, (harness) => {
harness.expectFile('dist/browser/index.html').content.toContain('TEST_123');
});
- // TODO: Build needs to be fixed to not throw an unhandled exception for this case
- xit('should fail build when a string path to non-existent file', async () => {
+ it('should fail build and terminate cleanly when a string path to non-existent file is provided', async () => {
harness.useTarget('build', {
...BASE_OPTIONS,
index: 'src/not-here.html',
});
- const { result } = await harness.executeOnce({ outputLogsOnFailure: false });
+ const { result, error } = await harness.executeOnce({ outputLogsOnException: false });
- expect(result?.success).toBe(false);
+ expect(result).toBeUndefined();
+ expect(error).toEqual(jasmine.any(Error));
+ expect(error?.message).toMatch(/Failed to read index HTML file/i);
harness.expectFile('dist/browser/index.html').toNotExist();
});
diff --git a/packages/angular/build/src/builders/dev-server/internal.ts b/packages/angular/build/src/builders/dev-server/internal.ts
index 4e5e97e5cf14..96587acb5cff 100644
--- a/packages/angular/build/src/builders/dev-server/internal.ts
+++ b/packages/angular/build/src/builders/dev-server/internal.ts
@@ -13,7 +13,7 @@ export { getFeatureSupport, isZonelessApp } from '../../tools/esbuild/utils';
export { type IndexHtmlTransform } from '../../utils/index-file/index-html-generator';
export { purgeStaleBuildCache } from '../../utils/purge-cache';
export { getSupportedBrowsers } from '../../utils/supported-browsers';
-export { transformSupportedBrowsersToTargets } from '../../tools/esbuild/utils';
+export { transformSupportedBrowsersToTargets } from '../../tools/esbuild/target';
export { buildApplicationInternal } from '../../builders/application';
export type { ApplicationBuilderInternalOptions } from '../../builders/application/options';
export type { ExternalResultMetadata } from '../../tools/esbuild/bundler-execution-result';
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 c616e865a68b..868590edab95 100644
--- a/packages/angular/build/src/builders/dev-server/vite/server.ts
+++ b/packages/angular/build/src/builders/dev-server/vite/server.ts
@@ -104,6 +104,7 @@ function createSsrConfig(
prebundleLoaderExtensions: RolldownLoaderOption | undefined,
thirdPartySourcemaps: boolean,
define: ApplicationBuilderInternalOptions['define'],
+ target: string[],
): Vite.SSROptions {
return {
// Note: `true` and `/.*/` have different sematics. When true, the `external` option is ignored.
@@ -111,6 +112,7 @@ function createSsrConfig(
// Exclude any Node.js built in module and provided dependencies (currently build defined externals)
external: externalMetadata.explicitServer,
optimizeDeps: getDepOptimizationConfig({
+ target,
// Only enable with caching since it causes prebundle dependencies to be cached
disabled: serverOptions.prebundle === false,
// Exclude any explicitly defined dependencies (currently build defined externals and node.js built-ins)
@@ -214,6 +216,7 @@ export async function setupServer(
prebundleLoaderExtensions,
thirdPartySourcemaps,
define,
+ target,
),
plugins: [
createAngularSetupMiddlewaresPlugin({
@@ -239,6 +242,7 @@ export async function setupServer(
],
// Browser only optimizeDeps. (This does not run for SSR dependencies).
optimizeDeps: getDepOptimizationConfig({
+ target,
// Only enable with caching since it causes prebundle dependencies to be cached
disabled: serverOptions.prebundle === false,
// Exclude any explicitly defined dependencies (currently build defined externals)
diff --git a/packages/angular/build/src/builders/karma/application_builder.ts b/packages/angular/build/src/builders/karma/application_builder.ts
index b9a28e1bf0b0..d0adb6c3cf0e 100644
--- a/packages/angular/build/src/builders/karma/application_builder.ts
+++ b/packages/angular/build/src/builders/karma/application_builder.ts
@@ -11,7 +11,6 @@ import type { Config, ConfigOptions, FilePattern, InlinePluginDef, Server } from
import { randomUUID } from 'node:crypto';
import { rmSync } from 'node:fs';
import * as fs from 'node:fs/promises';
-import { createRequire } from 'node:module';
import path from 'node:path';
import { ReadableStream } from 'node:stream/web';
import { createVirtualModulePlugin } from '../../tools/esbuild/virtual-module-plugin';
@@ -66,8 +65,14 @@ export function execute(
init = await initializeApplication(normalizedOptions, context, karmaOptions, transforms);
} catch (err) {
if (err instanceof ApplicationBuildError) {
- controller.enqueue({ success: false, message: err.message });
- controller.close();
+ if (controller.desiredSize !== null) {
+ try {
+ controller.enqueue({ success: false, message: err.message });
+ controller.close();
+ } catch {
+ // Stream controller may already be closed or cancelled
+ }
+ }
return;
}
@@ -85,8 +90,14 @@ export function execute(
// Close the stream once the Karma server returns.
karmaServer = new karma.Server(karmaConfig as Config, (exitCode) => {
- controller.enqueue({ success: exitCode === 0 });
- controller.close();
+ if (controller.desiredSize !== null) {
+ try {
+ controller.enqueue({ success: exitCode === 0 });
+ controller.close();
+ } catch {
+ // Stream controller may already be closed or cancelled
+ }
+ }
});
await karmaServer.start();
diff --git a/packages/angular/build/src/builders/karma/progress-reporter.ts b/packages/angular/build/src/builders/karma/progress-reporter.ts
index 16824badd095..6fc92b6c74c8 100644
--- a/packages/angular/build/src/builders/karma/progress-reporter.ts
+++ b/packages/angular/build/src/builders/karma/progress-reporter.ts
@@ -59,8 +59,18 @@ export function injectKarmaReporter(
break;
}
+ if (controller.desiredSize === null) {
+ break;
+ }
+
if (buildOutput.kind === ResultKind.Failure) {
- controller.enqueue({ success: false, message: 'Build failed' });
+ if (controller.desiredSize !== null) {
+ try {
+ controller.enqueue({ success: false, message: 'Build failed' });
+ } catch {
+ // Stream controller may already be closed or cancelled
+ }
+ }
} else if (
buildOutput.kind === ResultKind.Incremental ||
buildOutput.kind === ResultKind.Full
@@ -81,10 +91,12 @@ export function injectKarmaReporter(
}
onRunComplete = function (_browsers: unknown, results: RunCompleteInfo): void {
- if (results.exitCode === 0) {
- controller.enqueue({ success: true });
- } else {
- controller.enqueue({ success: false });
+ if (controller.desiredSize !== null) {
+ try {
+ controller.enqueue({ success: results.exitCode === 0 });
+ } catch {
+ // Stream controller may already be closed or cancelled
+ }
}
};
}
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
index 366cc2aa20a1..a69698b8d743 100644
--- a/packages/angular/build/src/builders/karma/tests/behavior/errors_spec.ts
+++ b/packages/angular/build/src/builders/karma/tests/behavior/errors_spec.ts
@@ -28,5 +28,18 @@ describeKarmaBuilder(execute, KARMA_BUILDER_INFO, (harness, setupTarget) => {
expect(result?.success).toBeFalse();
});
+
+ it('handles stream cancellation gracefully in watch mode', async () => {
+ harness.useTarget('test', {
+ ...BASE_OPTIONS,
+ watch: true,
+ });
+
+ const { result } = await harness.executeOnce({
+ outputLogsOnFailure: false,
+ });
+
+ expect(result?.success).toBeTrue();
+ });
});
});
diff --git a/packages/angular/build/src/builders/unit-test/options.ts b/packages/angular/build/src/builders/unit-test/options.ts
index d3402b090e0f..7d57716214b1 100644
--- a/packages/angular/build/src/builders/unit-test/options.ts
+++ b/packages/angular/build/src/builders/unit-test/options.ts
@@ -10,7 +10,7 @@ import { type BuilderContext, targetFromTargetString } from '@angular-devkit/arc
import { constants, promises as fs } from 'node:fs';
import path from 'node:path';
import { normalizeCacheOptions } from '../../utils/normalize-cache';
-import { canonicalizePath } from '../../utils/path';
+import { canonicalizePath, toPosixPath } from '../../utils/path';
import { getProjectRootPaths } from '../../utils/project-metadata';
import { isTTY } from '../../utils/tty';
import { Runner, type Schema as UnitTestBuilderOptions } from './schema';
@@ -58,7 +58,7 @@ export async function normalizeOptions(
: process.execArgv.includes('--preserve-symlinks');
// Setup base paths based on workspace root and project information
- const workspaceRoot = canonicalizePath(context.workspaceRoot, preserveSymlinks);
+ const workspaceRoot = canonicalizePath(context.workspaceRoot);
const projectMetadata = await context.getProjectMetadata(projectName);
const { projectRoot, projectSourceRoot } = getProjectRootPaths(workspaceRoot, projectMetadata);
@@ -143,7 +143,7 @@ export async function normalizeOptions(
quiet: options.quiet ?? (process.env['CI'] ? false : true),
providersFile: options.providersFile && path.join(workspaceRoot, options.providersFile),
setupFiles: options.setupFiles
- ? options.setupFiles.map((setupFile) => path.join(workspaceRoot, setupFile))
+ ? options.setupFiles.map((setupFile) => toPosixPath(path.join(workspaceRoot, setupFile)))
: [],
dumpVirtualFiles: options.dumpVirtualFiles,
listTests: options.listTests,
diff --git a/packages/angular/build/src/private.ts b/packages/angular/build/src/private.ts
index 50d57d0e5a01..7618ca1e3dcb 100644
--- a/packages/angular/build/src/private.ts
+++ b/packages/angular/build/src/private.ts
@@ -35,7 +35,7 @@ export {
export * from './tools/babel/plugins';
export type { ExternalResultMetadata } from './tools/esbuild/bundler-execution-result';
export { emitFilesToDisk } from './tools/esbuild/utils';
-export { transformSupportedBrowsersToTargets } from './tools/esbuild/utils';
+export { transformSupportedBrowsersToTargets } from './tools/esbuild/target';
export { SassWorkerImplementation } from './tools/sass/sass-service';
export { SourceFileCache } from './tools/esbuild/angular/source-file-cache';
diff --git a/packages/angular/build/src/tools/babel/plugins/adjust-static-class-members_oxc_spec.ts b/packages/angular/build/src/tools/babel/plugins/adjust-static-class-members_oxc_spec.ts
index af28ab66b264..7fe8c68030fc 100644
--- a/packages/angular/build/src/tools/babel/plugins/adjust-static-class-members_oxc_spec.ts
+++ b/packages/angular/build/src/tools/babel/plugins/adjust-static-class-members_oxc_spec.ts
@@ -998,4 +998,106 @@ describe('adjust-static-class-members oxc-transform implementation', () => {
`,
}),
);
+
+ it(
+ 'wraps adjacent class declarations without interleaving',
+ testCase({
+ input: 'class A{static s=[1]}class B{static s=[2]}',
+ expected: `
+ let A = /*#__PURE__*/ (() => {
+ class A {
+ static s = [1]
+ }
+ return A;
+ })();
+ let B = /*#__PURE__*/ (() => {
+ class B {
+ static s = [2]
+ }
+ return B;
+ })();
+ `,
+ }),
+ );
+
+ it(
+ 'wraps adjacent exported class declarations without interleaving',
+ testCase({
+ input: 'export class A{static s=[1]}export class B{static s=[2]}',
+ expected: `
+ export let A = /*#__PURE__*/ (() => {
+ class A {
+ static s = [1]
+ }
+ return A;
+ })();
+ export let B = /*#__PURE__*/ (() => {
+ class B {
+ static s = [2]
+ }
+ return B;
+ })();
+ `,
+ }),
+ );
+
+ it(
+ 'wraps adjacent default export and class declarations without interleaving',
+ testCase({
+ input: 'export default class A{static s=[1]}class B{static s=[2]}',
+ expected: `
+ let A = /*#__PURE__*/ (() => {
+ class A {
+ static s = [1]
+ }
+ return A;
+ })();
+ export { A as default };
+ let B = /*#__PURE__*/ (() => {
+ class B {
+ static s = [2]
+ }
+ return B;
+ })();
+ `,
+ }),
+ );
+
+ it(
+ 'splits default export without interleaving with adjacent class declaration',
+ testCase({
+ input: 'export default class A{}class B{static s=[2]}',
+ expected: `
+ class A {}
+ export { A as default };
+ let B = /*#__PURE__*/ (() => {
+ class B {
+ static s = [2]
+ }
+ return B;
+ })();
+ `,
+ }),
+ );
+
+ it(
+ 'wraps adjacent variable class declarations without interleaving',
+ testCase({
+ input: 'let A=class A{static s=[1]};class B{static s=[2]}',
+ expected: `
+ let A = /*#__PURE__*/ (() => {
+ let A = class A {
+ static s = [1]
+ };
+ return A;
+ })();
+ let B = /*#__PURE__*/ (() => {
+ class B {
+ static s = [2]
+ }
+ return B;
+ })();
+ `,
+ }),
+ );
});
diff --git a/packages/angular/build/src/tools/babel/plugins/adjust-typescript-enums_oxc_spec.ts b/packages/angular/build/src/tools/babel/plugins/adjust-typescript-enums_oxc_spec.ts
index fc01eecf991a..82877cb3b2e3 100644
--- a/packages/angular/build/src/tools/babel/plugins/adjust-typescript-enums_oxc_spec.ts
+++ b/packages/angular/build/src/tools/babel/plugins/adjust-typescript-enums_oxc_spec.ts
@@ -280,4 +280,103 @@ describe('adjust-typescript-enums oxc-transform implementation', () => {
`,
}),
);
+
+ it(
+ 'handles TypeScript enums with chained exports assignment (angular-split / shared-docs pattern)',
+ testCase({
+ input: `
+ var Area;
+ (function (a1) {
+ a1[a1["areaAfter"] = 0] = "areaAfter";
+ a1[a1["preserveOtherCategoryOrder"] = 1] = "preserveOtherCategoryOrder";
+ })(Area || (Area = exports.Area = {}));
+ `,
+ expected: `
+ var Area = /*#__PURE__*/ (function (a1) {
+ a1[(a1["areaAfter"] = 0)] = "areaAfter";
+ a1[(a1["preserveOtherCategoryOrder"] = 1)] = "preserveOtherCategoryOrder";
+ return a1;
+ })(Area || (exports.Area = {}));
+ `,
+ }),
+ );
+
+ it(
+ 'handles TypeScript enums wrapped in parentheses',
+ testCase({
+ input: `
+ var ChangeDetectionStrategy;
+ ((function (ChangeDetectionStrategy) {
+ ChangeDetectionStrategy[ChangeDetectionStrategy["OnPush"] = 0] = "OnPush";
+ ChangeDetectionStrategy[ChangeDetectionStrategy["Default"] = 1] = "Default";
+ })(ChangeDetectionStrategy || (ChangeDetectionStrategy = {})));
+ `,
+ expected: `
+ var ChangeDetectionStrategy = /*#__PURE__*/ (function (ChangeDetectionStrategy) {
+ ChangeDetectionStrategy[(ChangeDetectionStrategy["OnPush"] = 0)] = "OnPush";
+ ChangeDetectionStrategy[(ChangeDetectionStrategy["Default"] = 1)] = "Default";
+ return ChangeDetectionStrategy;
+ })(ChangeDetectionStrategy || {});
+ `,
+ }),
+ );
+
+ it(
+ 'wraps Crockford-style TypeScript enum IIFE without leaving dangling parentheses',
+ testCase({
+ input: `
+ var HDirection;
+ (function (HDirection) {
+ HDirection[HDirection['Backwards'] = -1] = 'Backwards';
+ HDirection[HDirection['Forwards'] = 1] = 'Forwards';
+ }(HDirection || (HDirection = {})));
+ const nextStatement = true;
+ `,
+ expected: `
+ var HDirection = /*#__PURE__*/ (function (HDirection) {
+ HDirection[(HDirection['Backwards'] = -1)] = 'Backwards';
+ HDirection[(HDirection['Forwards'] = 1)] = 'Forwards';
+ return HDirection;
+ }(HDirection || {}));
+
+ const nextStatement = true;
+ `,
+ }),
+ );
+
+ it(
+ 'wraps TypeScript enum IIFE with multiple nested parentheses',
+ testCase({
+ input: `
+ var Foo;
+ (((function (Foo) {
+ Foo[Foo['A'] = 0] = 'A';
+ }(Foo || (Foo = {})))));
+ `,
+ expected: `
+ var Foo = /*#__PURE__*/ (function (Foo) {
+ Foo[(Foo['A'] = 0)] = 'A';
+ return Foo;
+ }(Foo || {}));
+ `,
+ }),
+ );
+
+ it(
+ 'wraps Crockford-style TypeScript enum IIFE with chained export assignments',
+ testCase({
+ input: `
+ var Foo;
+ (function (Foo) {
+ Foo[Foo['A'] = 0] = 'A';
+ }(Foo || (Foo = exports.Foo = {})));
+ `,
+ expected: `
+ var Foo = /*#__PURE__*/ (function (Foo) {
+ Foo[(Foo['A'] = 0)] = 'A';
+ return Foo;
+ }(Foo || (exports.Foo = {})));
+ `,
+ }),
+ );
});
diff --git a/packages/angular/build/src/tools/babel/plugins/oxc-transform.ts b/packages/angular/build/src/tools/babel/plugins/oxc-transform.ts
index 2c69d98cdf1a..569db927f45a 100644
--- a/packages/angular/build/src/tools/babel/plugins/oxc-transform.ts
+++ b/packages/angular/build/src/tools/babel/plugins/oxc-transform.ts
@@ -414,27 +414,30 @@ export function transform(filename: string, code: string, options: OxcTransformO
continue;
}
- // 1. Remove only the trailing characters/semicolon of the expression statement
+ // 1. Remove leading/trailing characters/parentheses of the expression statement
+ s.remove(nextStatement.start, nextExpr.start);
s.remove(nextExpr.end, nextStatement.end);
- markEdited(nextExpr.end, nextStatement.end);
+ markEdited(nextStatement.start, nextStatement.end);
// 2. Add return statement inside IIFE body
s.appendRight(callee.body.end - 1, `; return ${paramName};`);
// 3. Remove `Name = ` assignment in arguments if it's a simple identifier
if (rightCallArgument.left.type === 'Identifier') {
- s.overwrite(
- arg.right.start,
- arg.right.end,
- code.substring(rightCallArgument.right.start, rightCallArgument.right.end),
+ let replacement = code.substring(
+ rightCallArgument.right.start,
+ rightCallArgument.right.end,
);
+ if (unwrapParentheses(rightCallArgument.right).type === 'AssignmentExpression') {
+ replacement = `(${replacement})`;
+ }
+ s.overwrite(arg.right.start, arg.right.end, replacement);
markEdited(arg.right.start, arg.right.end);
}
// 4. Move IIFE to the var initializer
s.move(nextExpr.start, nextExpr.end, decl.id.end);
s.appendLeft(decl.id.end, ' = /*#__PURE__*/ ');
- markEdited(nextExpr.start, nextExpr.end);
}
}
@@ -584,25 +587,25 @@ export function transform(filename: string, code: string, options: OxcTransformO
// 1. Remove `export default `
s.overwrite(statement.start, classNode.start, '');
// 2. Wrap in IIFE
- s.appendLeft(classNode.start, `let ${classIdName} = /*#__PURE__*/ (() => {\n`);
- s.appendRight(
+ s.appendRight(classNode.start, `let ${classIdName} = /*#__PURE__*/ (() => {\n`);
+ s.appendLeft(
lastStatement.end,
`\nreturn ${classIdName};\n})();\nexport { ${classIdName} as default };`,
);
} else if (isExportNamed) {
// 1. Export is kept, turn `class` into `let ClassName = IIFE`
- s.appendLeft(classNode.start, `let ${classIdName} = /*#__PURE__*/ (() => {\n`);
- s.appendRight(lastStatement.end, `\nreturn ${classIdName};\n})();`);
+ s.appendRight(classNode.start, `let ${classIdName} = /*#__PURE__*/ (() => {\n`);
+ s.appendLeft(lastStatement.end, `\nreturn ${classIdName};\n})();`);
} else if (isVariableClass) {
// Wrap class inside init: `/*#__PURE__*/ (() => { let ClassName = class ClassName {}; return ClassName; })()`
- s.appendLeft(classNode.start, `/*#__PURE__*/ (() => {\nlet ${classIdName} = `);
+ s.appendRight(classNode.start, `/*#__PURE__*/ (() => {\nlet ${classIdName} = `);
const terminator = activeWrapPaths.length === 0 ? ';' : '';
const iifeClosing = activeWrapPaths.length === 0 ? '})()' : '})();';
- s.appendRight(lastStatement.end, `${terminator}\nreturn ${classIdName};\n${iifeClosing}`);
+ s.appendLeft(lastStatement.end, `${terminator}\nreturn ${classIdName};\n${iifeClosing}`);
} else {
// Standard ClassDeclaration
- s.appendLeft(classNode.start, `let ${classIdName} = /*#__PURE__*/ (() => {\n`);
- s.appendRight(lastStatement.end, `\nreturn ${classIdName};\n})();`);
+ s.appendRight(classNode.start, `let ${classIdName} = /*#__PURE__*/ (() => {\n`);
+ s.appendLeft(lastStatement.end, `\nreturn ${classIdName};\n})();`);
}
markEdited(statement.start, lastStatement.end);
@@ -612,7 +615,7 @@ export function transform(filename: string, code: string, options: OxcTransformO
} else if (isExportDefault && !hasPotentialSideEffects) {
// Splitting default export even when not wrapped
s.overwrite(statement.start, classNode.start, '');
- s.appendRight(classNode.end, `\nexport { ${classIdName} as default };`);
+ s.appendLeft(classNode.end, `\nexport { ${classIdName} as default };`);
markEdited(statement.start, classNode.end);
}
}
diff --git a/packages/angular/build/src/tools/esbuild/angular/compilation-state.ts b/packages/angular/build/src/tools/esbuild/angular/compilation-state.ts
index 79fb9715bdbd..286411a06057 100644
--- a/packages/angular/build/src/tools/esbuild/angular/compilation-state.ts
+++ b/packages/angular/build/src/tools/esbuild/angular/compilation-state.ts
@@ -46,13 +46,14 @@ export class AngularCompilationContext {
this.#pendingCompilation = true;
}
- #disposed = false;
+ #disposal: Promise | undefined;
- async dispose(): Promise {
- if (this.#disposed) {
- return;
- }
- this.#disposed = true;
+ dispose(): Promise {
+ // Reuse any in progress disposal to ensure all callers can await completion
+ return (this.#disposal ??= this.#close());
+ }
+
+ async #close(): Promise {
this.markAsReady(true);
try {
await this.#compilation.close?.();
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 131547f78366..54c3f73b9f02 100644
--- a/packages/angular/build/src/tools/esbuild/angular/compiler-plugin.ts
+++ b/packages/angular/build/src/tools/esbuild/angular/compiler-plugin.ts
@@ -459,7 +459,7 @@ export function createCompilerPlugin(
if (!requiresAngularCompiler(directContents)) {
return {
warnings: [createMissingFileDiagnostic(request, args.path, diangosticRoot, false)],
- contents,
+ contents: directContents,
loader: 'ts',
resolveDir: path.dirname(request),
};
diff --git a/packages/angular/build/src/tools/esbuild/angular/rewrite-bazel-paths.ts b/packages/angular/build/src/tools/esbuild/angular/rewrite-bazel-paths.ts
index 8a6fb6aa82a4..b7cd376d560e 100644
--- a/packages/angular/build/src/tools/esbuild/angular/rewrite-bazel-paths.ts
+++ b/packages/angular/build/src/tools/esbuild/angular/rewrite-bazel-paths.ts
@@ -6,25 +6,55 @@
* found in the LICENSE file at https://angular.dev/license
*/
-import { join, relative } from 'node:path';
+import { join, relative, sep } from 'node:path';
const bazelBinDirectory = process.env['BAZEL_BINDIR'];
const bazelExecRoot = process.env['JS_BINARY__EXECROOT'];
+const execRootMarker = `${sep}execroot${sep}`;
+
+/**
+ * Sandboxed actions run in a copy of the execroot whose absolute path differs from
+ * `JS_BINARY__EXECROOT`, so the effective execroot is derived from the working directory.
+ */
+function effectiveExecRoot(): string | undefined {
+ const cwd = process.cwd();
+ const markerIndex = cwd.indexOf(execRootMarker);
+ if (markerIndex === -1) {
+ return bazelExecRoot;
+ }
+
+ const workspaceEnd = cwd.indexOf(sep, markerIndex + execRootMarker.length);
+
+ return workspaceEnd === -1 ? cwd : cwd.slice(0, workspaceEnd);
+}
export function rewriteForBazel(path: string): string {
if (!bazelBinDirectory || !bazelExecRoot) {
return path;
}
- const fromExecRoot = relative(bazelExecRoot, path);
+ const execRoot = effectiveExecRoot() ?? bazelExecRoot;
+
+ const fromExecRoot = relative(execRoot, path);
if (!fromExecRoot.startsWith('..')) {
return path;
}
const fromBinDirectory = relative(bazelBinDirectory, path);
- if (fromBinDirectory.startsWith('..')) {
- return path;
+ if (!fromBinDirectory.startsWith('..')) {
+ return join(execRoot, fromBinDirectory);
+ }
+
+ // A path that realpath resolved out of a symlink-staged sandbox into the
+ // unsandboxed execroot: re-anchor its execroot-relative tail.
+ const markerIndex = path.indexOf(execRootMarker);
+ if (markerIndex !== -1) {
+ const tail = path.slice(markerIndex + execRootMarker.length);
+ const workspaceEnd = tail.indexOf(sep);
+ if (workspaceEnd !== -1) {
+ return join(execRoot, tail.slice(workspaceEnd + 1));
+ }
}
- return join(bazelExecRoot, fromBinDirectory);
+ return path;
}
diff --git a/packages/angular/build/src/tools/esbuild/angular/source-file-cache.ts b/packages/angular/build/src/tools/esbuild/angular/source-file-cache.ts
index 2bc38bd12a89..a408650a4f4f 100644
--- a/packages/angular/build/src/tools/esbuild/angular/source-file-cache.ts
+++ b/packages/angular/build/src/tools/esbuild/angular/source-file-cache.ts
@@ -25,6 +25,19 @@ export class SourceFileCache extends Map {
super();
}
+ /**
+ * Releases all cached content. The cached data is only needed for incremental
+ * rebuilds and can include the emitted contents of every TypeScript file in the
+ * program. The cache is repopulated if a build is performed after this is called.
+ */
+ override clear(): void {
+ super.clear();
+ this.modifiedFiles.clear();
+ this.typeScriptFileCache.clear();
+ this.loadResultCache.clear();
+ this.referencedFiles = undefined;
+ }
+
invalidate(files: Iterable): boolean {
if (files !== this.modifiedFiles) {
this.modifiedFiles.clear();
diff --git a/packages/angular/build/src/tools/esbuild/bundler-context.ts b/packages/angular/build/src/tools/esbuild/bundler-context.ts
index 58f2df2a05c8..d3f3ca567a0f 100644
--- a/packages/angular/build/src/tools/esbuild/bundler-context.ts
+++ b/packages/angular/build/src/tools/esbuild/bundler-context.ts
@@ -17,9 +17,7 @@ import {
context,
} from 'esbuild';
import assert from 'node:assert';
-import { realpathSync } from 'node:fs';
-import { basename, extname, join, relative, resolve } from 'node:path';
-import { toPosixPath } from '../../utils/path';
+import { basename, extname, join, relative } from 'node:path';
import { SERVER_GENERATED_EXTERNALS } from '../../utils/server-rendering/manifest';
import {
type BuildOutputFile,
@@ -66,7 +64,6 @@ export class BundlerContext {
#optionsFactory: BundlerOptionsFactory;
#shouldCacheResult: boolean;
#loadCache?: MemoryLoadResultCache;
- #realWorkspaceRoot?: string;
readonly watchFiles = new Set();
constructor(
@@ -264,17 +261,6 @@ export class BundlerContext {
}
}
- // esbuild always resolves its working directory through symbolic links (including
- // Windows directory junctions) and generates metafile paths relative to the resolved
- // path. When `preserveSymlinks` is enabled, the workspace root is intentionally not
- // resolved, and the metafile paths are then relative to a different base directory.
- // The paths are remapped so that all downstream consumers can rely on the documented
- // invariant that metafile paths are relative to the workspace root.
- this.#realWorkspaceRoot ??= realpathSync(this.workspaceRoot);
- if (this.#realWorkspaceRoot !== this.workspaceRoot) {
- remapMetafileBasePath(result.metafile, this.#realWorkspaceRoot, this.workspaceRoot);
- }
-
// Update files that should be watched.
// While this should technically not be linked to incremental mode, incremental is only
// currently enabled with watch mode where watch files are needed.
@@ -501,71 +487,6 @@ export class BundlerContext {
}
}
-/**
- * Remaps all relative paths within an esbuild metafile from one base directory to another.
- * Virtual files (e.g., `angular:` namespaced or bundler generated), external imports, and
- * non-relative paths are left unmodified.
- *
- * @param metafile The metafile to update in place.
- * @param fromBase The absolute base directory the metafile paths are currently relative to.
- * @param toBase The absolute base directory the metafile paths should be made relative to.
- */
-export function remapMetafileBasePath(metafile: Metafile, fromBase: string, toBase: string): void {
- const remapped = new Map();
- const remap = (value: string): string => {
- // Skip virtual files and paths with a scheme-like or namespace prefix (e.g., `angular:`)
- if (
- isInternalAngularFile(value) ||
- isInternalBundlerFile(value) ||
- /^[^\\/.]{2,}:/.test(value)
- ) {
- return value;
- }
-
- let result = remapped.get(value);
- if (result === undefined) {
- // esbuild metafile paths always use POSIX path separators
- result = toPosixPath(relative(toBase, resolve(fromBase, value)));
- remapped.set(value, result);
- }
-
- return result;
- };
-
- const inputs: Metafile['inputs'] = {};
- for (const [key, value] of Object.entries(metafile.inputs)) {
- for (const importRecord of value.imports) {
- if (!importRecord.external) {
- importRecord.path = remap(importRecord.path);
- }
- }
- inputs[remap(key)] = value;
- }
- metafile.inputs = inputs;
-
- const outputs: Metafile['outputs'] = {};
- for (const [key, value] of Object.entries(metafile.outputs)) {
- if (value.entryPoint !== undefined) {
- value.entryPoint = remap(value.entryPoint);
- }
- if (value.cssBundle !== undefined) {
- value.cssBundle = remap(value.cssBundle);
- }
- for (const importRecord of value.imports) {
- if (!importRecord.external) {
- importRecord.path = remap(importRecord.path);
- }
- }
- const outputInputs: (typeof value)['inputs'] = {};
- for (const [inputKey, inputValue] of Object.entries(value.inputs)) {
- outputInputs[remap(inputKey)] = inputValue;
- }
- value.inputs = outputInputs;
- outputs[remap(key)] = value;
- }
- metafile.outputs = outputs;
-}
-
function isInternalAngularFile(file: string) {
return file.startsWith('angular:');
}
diff --git a/packages/angular/build/src/tools/esbuild/bundler-context_spec.ts b/packages/angular/build/src/tools/esbuild/bundler-context_spec.ts
deleted file mode 100644
index 8806f1d90406..000000000000
--- a/packages/angular/build/src/tools/esbuild/bundler-context_spec.ts
+++ /dev/null
@@ -1,99 +0,0 @@
-/**
- * @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 { Metafile } from 'esbuild';
-import { join, relative } from 'node:path';
-import { remapMetafileBasePath } from './bundler-context';
-
-describe('remapMetafileBasePath', () => {
- // Simulates a workspace root accessed through a symbolic link or Windows
- // directory junction (`toBase`) that resolves to a different real path
- // (`fromBase`), as esbuild resolves its working directory through links.
- const fromBase = join('/real', 'projects', 'demo');
- const toBase = join('/linked', 'demo');
-
- /** Creates a metafile path as esbuild would: relative to the resolved (real) base. */
- const fromBaseRelative = (filePath: string): string => relative(fromBase, join(toBase, filePath));
-
- it('remaps input and output paths onto the target base directory', () => {
- const metafile: Metafile = {
- inputs: {
- [fromBaseRelative('src/main.ts')]: { bytes: 10, imports: [] },
- },
- outputs: {
- [fromBaseRelative('main.js')]: {
- bytes: 100,
- inputs: { [fromBaseRelative('src/main.ts')]: { bytesInOutput: 10 } },
- imports: [{ path: fromBaseRelative('chunk-ABC.js'), kind: 'import-statement' }],
- exports: [],
- entryPoint: fromBaseRelative('src/main.ts'),
- cssBundle: fromBaseRelative('main.css'),
- },
- },
- };
-
- remapMetafileBasePath(metafile, fromBase, toBase);
-
- expect(Object.keys(metafile.inputs)).toEqual(['src/main.ts']);
- expect(Object.keys(metafile.outputs)).toEqual(['main.js']);
-
- const output = metafile.outputs['main.js'];
- expect(output.entryPoint).toBe('src/main.ts');
- expect(output.cssBundle).toBe('main.css');
- expect(Object.keys(output.inputs)).toEqual(['src/main.ts']);
- expect(output.imports[0].path).toBe('chunk-ABC.js');
- });
-
- it('does not modify virtual and namespaced files', () => {
- const metafile: Metafile = {
- inputs: {
- 'angular:polyfills': {
- bytes: 10,
- imports: [{ path: '', kind: 'import-statement' }],
- },
- },
- outputs: {
- [fromBaseRelative('polyfills.js')]: {
- bytes: 100,
- inputs: { 'angular:polyfills': { bytesInOutput: 10 } },
- imports: [],
- exports: [],
- entryPoint: 'angular:polyfills',
- },
- },
- };
-
- remapMetafileBasePath(metafile, fromBase, toBase);
-
- expect(Object.keys(metafile.inputs)).toEqual(['angular:polyfills']);
- expect(metafile.inputs['angular:polyfills'].imports[0].path).toBe('');
-
- const output = metafile.outputs['polyfills.js'];
- expect(output.entryPoint).toBe('angular:polyfills');
- expect(Object.keys(output.inputs)).toEqual(['angular:polyfills']);
- });
-
- it('does not modify external imports', () => {
- const externalPath = 'https://example.com/module.js';
- const metafile: Metafile = {
- inputs: {},
- outputs: {
- [fromBaseRelative('main.js')]: {
- bytes: 100,
- inputs: {},
- imports: [{ path: externalPath, kind: 'import-statement', external: true }],
- exports: [],
- },
- },
- };
-
- remapMetafileBasePath(metafile, fromBase, toBase);
-
- expect(metafile.outputs['main.js'].imports[0].path).toBe(externalPath);
- });
-});
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 bebfd6a3eedd..53e17e7e427c 100644
--- a/packages/angular/build/src/tools/esbuild/bundler-execution-result.ts
+++ b/packages/angular/build/src/tools/esbuild/bundler-execution-result.ts
@@ -194,11 +194,21 @@ export class ExecutionResult {
return changed;
}
- async dispose(): Promise {
- await Promise.allSettled([
- ...this.rebuildContexts.typescriptContexts.map((context) => context.dispose()),
- ...this.rebuildContexts.otherContexts.map((context) => context.dispose()),
- this.componentStyleBundler.dispose(),
- ]);
+ #disposal?: Promise;
+
+ dispose(): Promise {
+ return (this.#disposal ??= this.#dispose());
+ }
+
+ async #dispose(): Promise {
+ try {
+ await Promise.allSettled([
+ ...this.rebuildContexts.typescriptContexts.map((context) => context.dispose()),
+ ...this.rebuildContexts.otherContexts.map((context) => context.dispose()),
+ this.componentStyleBundler.dispose(),
+ ]);
+ } finally {
+ this.codeBundleCache?.clear();
+ }
}
}
diff --git a/packages/angular/build/src/tools/esbuild/i18n-inliner-worker.ts b/packages/angular/build/src/tools/esbuild/i18n-inliner-worker.ts
index 71a055cea676..bfec753f6b2d 100644
--- a/packages/angular/build/src/tools/esbuild/i18n-inliner-worker.ts
+++ b/packages/angular/build/src/tools/esbuild/i18n-inliner-worker.ts
@@ -6,9 +6,10 @@
* found in the LICENSE file at https://angular.dev/license
*/
-import remapping, { type EncodedSourceMap, type SourceMapInput } from '@ampproject/remapping';
+import remapping, { type DecodedSourceMap, type SourceMapInput } from '@ampproject/remapping';
import { MagicString } from 'magic-string';
import assert from 'node:assert';
+import { deserialize } from 'node:v8';
import { workerData } from 'node:worker_threads';
import { Visitor, parseSync } from 'oxc-parser';
@@ -28,9 +29,11 @@ interface InlineFileRequest {
locale: string;
/**
- * The translation messages for the locale that should be used during the inlining process of the file.
+ * The serialized translation messages for the locale that should be used during the inlining
+ * process of the file. A Blob is used so that the messages are shared with the Worker by
+ * reference instead of being copied into it for every request.
*/
- translation?: Record;
+ translation?: Blob;
}
/**
@@ -53,19 +56,55 @@ interface InlineCodeRequest {
locale: string;
/**
- * The translation messages for the locale that should be used during the inlining process of the file.
+ * The serialized translation messages for the locale that should be used during the inlining
+ * process of the file. A Blob is used so that the messages are shared with the Worker by
+ * reference instead of being copied into it for every request.
*/
- translation?: Record;
+ translation?: Blob;
}
// Extract the application files and common options used for inline requests from the Worker context
-// TODO: Evaluate overall performance difference of passing translations here as well
const { files, missingTranslation, shouldOptimize } = (workerData || {}) as {
files: ReadonlyMap;
missingTranslation: 'error' | 'warning' | 'ignore';
shouldOptimize: boolean;
};
+/**
+ * The translation messages deserialized for the locale most recently requested of this Worker.
+ * Locales are inlined one at a time, so retaining only the active locale is enough to avoid
+ * deserializing the messages once per file while holding at most one set of messages in memory.
+ */
+let activeTranslation: { locale: string; messages: Promise> } | undefined;
+
+/**
+ * Deserializes the translation messages for an inline request, reusing the result for any
+ * subsequent request that targets the same locale.
+ * @param request An inline request containing the locale and its serialized messages.
+ * @returns The translation messages, or undefined if the locale has no translations.
+ */
+function loadTranslation(
+ request: InlineFileRequest | InlineCodeRequest,
+): Promise> | undefined {
+ const { locale, translation } = request;
+ if (!translation) {
+ return undefined;
+ }
+
+ if (activeTranslation?.locale !== locale) {
+ activeTranslation = {
+ locale,
+ // Deserializing within the stored promise ensures that concurrent requests for a locale
+ // share the one deserialization instead of each performing their own.
+ messages: translation
+ .arrayBuffer()
+ .then((buffer) => deserialize(new Uint8Array(buffer)) as Record),
+ };
+ }
+
+ return activeTranslation.messages;
+}
+
/**
* Inlines the provided locale and translation into a JavaScript file that contains `$localize` usage.
* This function is the main entry for the Worker's action that is called by the worker pool.
@@ -80,7 +119,12 @@ export default async function inlineFile(request: InlineFileRequest) {
const code = await data.text();
const map = await files.get(request.filename + '.map')?.text();
- const result = await transformWithOxc(code, map && (JSON.parse(map) as SourceMapInput), request);
+ const result = await transformWithOxc(
+ code,
+ map && (JSON.parse(map) as SourceMapInput),
+ request,
+ await loadTranslation(request),
+ );
return {
file: request.filename,
@@ -98,7 +142,12 @@ export default async function inlineFile(request: InlineFileRequest) {
* @returns An object containing the inlined code.
*/
export async function inlineCode(request: InlineCodeRequest) {
- const result = await transformWithOxc(request.code, undefined, request);
+ const result = await transformWithOxc(
+ request.code,
+ undefined,
+ request,
+ await loadTranslation(request),
+ );
return {
output: result.code,
@@ -136,12 +185,14 @@ async function loadLocalizeTools(): Promise {
* @param code A string containing the JavaScript code to transform.
* @param map A sourcemap object for the provided JavaScript code.
* @param options The inline request options to use.
+ * @param translation The translation messages to inline, or undefined for an untranslated locale.
* @returns An object containing the code, map, and diagnostics from the transformation.
*/
async function transformWithOxc(
code: string,
map: SourceMapInput | undefined,
options: InlineFileRequest,
+ translation: Record | undefined,
) {
const { program } = parseSync(options.filename, code, {
sourceType: 'unambiguous',
@@ -169,10 +220,10 @@ async function transformWithOxc(
const [translatedParts, translatedSubstitutions] = translate(
diagnostics,
- options.translation || {},
+ translation || {},
messageParts,
node.quasi.expressions.map((_, index) => index),
- options.translation === undefined ? 'ignore' : missingTranslation,
+ translation === undefined ? 'ignore' : missingTranslation,
);
// Reconstruct the new template/string literal replacement
@@ -209,12 +260,15 @@ async function transformWithOxc(
const outputCode = magicString.toString();
let outputMap;
if (map && magicString.hasChanged()) {
- const rawMap = magicString.generateMap({
+ // A decoded map is generated here rather than an encoded one because remapping decodes its
+ // inputs. Encoding the mappings only for remapping to immediately decode them again doubles
+ // the peak memory of the largest structure involved in inlining a file.
+ const rawMap = magicString.generateDecodedMap({
source: options.filename,
includeContent: true,
hires: 'boundary',
});
- outputMap = remapping([rawMap as EncodedSourceMap, map], () => null);
+ outputMap = remapping([{ ...rawMap, version: 3 } satisfies DecodedSourceMap, map], () => null);
}
return {
diff --git a/packages/angular/build/src/tools/esbuild/i18n-inliner.ts b/packages/angular/build/src/tools/esbuild/i18n-inliner.ts
index af13226a68d4..071097315e5b 100644
--- a/packages/angular/build/src/tools/esbuild/i18n-inliner.ts
+++ b/packages/angular/build/src/tools/esbuild/i18n-inliner.ts
@@ -9,6 +9,7 @@
import assert from 'node:assert';
import { createHash } from 'node:crypto';
import { extname, join } from 'node:path';
+import { serialize } from 'node:v8';
import { WorkerPool } from '../../utils/worker-pool';
import { type BuildOutputFile, BuildOutputFileType, createOutputFile } from './bundler-files';
import { type PersistentCacheStore, createPersistentCacheStore } from './cache';
@@ -19,6 +20,20 @@ import { type PersistentCacheStore, createPersistentCacheStore } from './cache';
*/
const LOCALIZE_KEYWORD = '$localize';
+/**
+ * Serializes the translation messages for a locale for transfer to an inliner Worker.
+ *
+ * A Blob is used because cloning one shares its data by reference, whereas sending the messages
+ * themselves copies them into a Worker for every request that carries them. A locale can contain
+ * tens of thousands of messages, which makes that copy the dominant cost of inlining a locale.
+ *
+ * @param translation The translation messages for a locale, if the locale has any.
+ * @returns A Blob containing the serialized messages, or undefined if the locale has none.
+ */
+function serializeTranslation(translation: Record | undefined): Blob | undefined {
+ return translation && new Blob([serialize(translation)]);
+}
+
/**
* Inlining options that should apply to all transformed code.
*/
@@ -125,6 +140,10 @@ export class I18nInliner {
await this.initCache();
const { shouldOptimize, missingTranslation } = this.options;
+
+ // Serialized once here and then shared by the request for every file of this locale
+ const translationBlob = serializeTranslation(translation);
+
// Request inlining for each file that contains localize calls
const requests = [];
@@ -138,10 +157,12 @@ export class I18nInliner {
let cacheResultPromise = Promise.resolve(null);
if (this.#cache) {
- fileCacheKeyBase ??= Buffer.from(
- JSON.stringify({ locale, translation, missingTranslation, shouldOptimize }),
- 'utf-8',
- );
+ // The options are digested here so that each file's key is derived from a fixed number
+ // of bytes. Hashing the options directly would re-hash the full set of messages, which
+ // can be several megabytes, once for every file.
+ fileCacheKeyBase ??= createHash('sha256')
+ .update(JSON.stringify({ locale, translation, missingTranslation, shouldOptimize }))
+ .digest();
// NOTE: If additional options are added, this may need to be updated.
// TODO: Consider xxhash or similar instead of SHA256
@@ -160,7 +181,11 @@ export class I18nInliner {
return cachedResult;
}
- const result = await this.#workerPool.run({ filename, locale, translation });
+ const result = await this.#workerPool.run({
+ filename,
+ locale,
+ translation: translationBlob,
+ });
if (this.#cache && cacheKey) {
try {
// Failure to set the value should not fail the transform
@@ -227,7 +252,12 @@ export class I18nInliner {
}
const { output, messages } = await this.#workerPool.run(
- { code: templateCode, filename: templateId, locale, translation },
+ {
+ code: templateCode,
+ filename: templateId,
+ locale,
+ translation: serializeTranslation(translation),
+ },
{ name: 'inlineCode' },
);
@@ -252,8 +282,8 @@ export class I18nInliner {
* Stops all active transformation tasks and shuts down all workers.
* @returns A void promise that resolves when closing is complete.
*/
- close(): Promise {
- return this.#workerPool.destroy();
+ async close(): Promise {
+ await Promise.allSettled([this.#cache?.close(), this.#workerPool.destroy()]);
}
/**
diff --git a/packages/angular/build/src/tools/esbuild/i18n-inliner_spec.ts b/packages/angular/build/src/tools/esbuild/i18n-inliner_spec.ts
new file mode 100644
index 000000000000..67a2fe5883a2
--- /dev/null
+++ b/packages/angular/build/src/tools/esbuild/i18n-inliner_spec.ts
@@ -0,0 +1,277 @@
+/**
+ * @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 { transform } from 'esbuild';
+import { type BuildOutputFile, BuildOutputFileType, createOutputFile } from './bundler-files';
+import { I18nInliner } from './i18n-inliner';
+
+/**
+ * A module that uses a `$localize` message with an explicit message identifier so that the
+ * translations for a test can be keyed by a known name.
+ */
+const GREETING_SOURCE = 'export const greeting = $localize`:@@greeting:Hello`;\n';
+
+/**
+ * Creates the parsed translation form that `@angular/localize` expects for a message without
+ * placeholders.
+ */
+function translationFor(message: string): Record {
+ return { messageParts: [message], placeholderNames: [], text: message };
+}
+
+function browserFile(path: string, contents: string): BuildOutputFile {
+ return createOutputFile(path, contents, BuildOutputFileType.Browser);
+}
+
+function findFile(outputFiles: BuildOutputFile[], path: string): BuildOutputFile {
+ const file = outputFiles.find((output) => output.path === path);
+ if (!file) {
+ throw new Error(`Expected output files to contain '${path}'.`);
+ }
+
+ return file;
+}
+
+describe('I18nInliner', () => {
+ let inliner: I18nInliner | undefined;
+
+ // A single thread is used throughout so that every file of every locale is inlined by the same
+ // Worker. Any translation state that a Worker retains between requests is then observable.
+ function createInliner(outputFiles: BuildOutputFile[]): I18nInliner {
+ inliner = new I18nInliner({ missingTranslation: 'warning', outputFiles }, 1);
+
+ return inliner;
+ }
+
+ afterEach(async () => {
+ await inliner?.close();
+ inliner = undefined;
+ });
+
+ it('inlines the translations of a locale', async () => {
+ const { outputFiles, errors, warnings } = await createInliner([
+ browserFile('main.js', GREETING_SOURCE),
+ ]).inlineForLocale('fr', { greeting: translationFor('Bonjour') });
+
+ expect(errors).toEqual([]);
+ expect(warnings).toEqual([]);
+ expect(findFile(outputFiles, 'main.js').text).toContain('"Bonjour"');
+ expect(findFile(outputFiles, 'main.js').text).not.toContain('$localize');
+ });
+
+ it('inlines the translations of each locale when several are inlined in sequence', async () => {
+ const localeInliner = createInliner([browserFile('main.js', GREETING_SOURCE)]);
+
+ const french = await localeInliner.inlineForLocale('fr', {
+ greeting: translationFor('Bonjour'),
+ });
+ const german = await localeInliner.inlineForLocale('de', { greeting: translationFor('Hallo') });
+ // Repeats the first locale to cover a locale being inlined again after another has been.
+ const frenchAgain = await localeInliner.inlineForLocale('fr', {
+ greeting: translationFor('Bonjour'),
+ });
+
+ expect(findFile(french.outputFiles, 'main.js').text).toContain('"Bonjour"');
+ expect(findFile(german.outputFiles, 'main.js').text).toContain('"Hallo"');
+ expect(findFile(frenchAgain.outputFiles, 'main.js').text).toContain('"Bonjour"');
+ });
+
+ it('inlines the translations of a locale into every file that uses them', async () => {
+ const { outputFiles } = await createInliner([
+ browserFile('main.js', GREETING_SOURCE),
+ browserFile('chunk.js', GREETING_SOURCE),
+ ]).inlineForLocale('fr', { greeting: translationFor('Bonjour') });
+
+ expect(findFile(outputFiles, 'main.js').text).toContain('"Bonjour"');
+ expect(findFile(outputFiles, 'chunk.js').text).toContain('"Bonjour"');
+ });
+
+ it('retains the original messages for a locale without translations', async () => {
+ const { outputFiles, errors, warnings } = await createInliner([
+ browserFile('main.js', GREETING_SOURCE),
+ ]).inlineForLocale('en-US', undefined);
+
+ // A locale without translations is the source locale, so its messages are not missing.
+ expect(errors).toEqual([]);
+ expect(warnings).toEqual([]);
+ expect(findFile(outputFiles, 'main.js').text).toContain('"Hello"');
+ });
+
+ it('warns and retains the original message when a locale is missing a translation', async () => {
+ const { outputFiles, errors, warnings } = await createInliner([
+ browserFile('main.js', GREETING_SOURCE),
+ ]).inlineForLocale('fr', { unrelated: translationFor('Sans rapport') });
+
+ expect(errors).toEqual([]);
+ expect(warnings.length).toBe(1);
+ expect(warnings[0]).toContain('greeting');
+ expect(findFile(outputFiles, 'main.js').text).toContain('"Hello"');
+ });
+
+ it('replaces the locale placeholder with the locale being inlined', async () => {
+ // The placeholder is only inlined for files that use `$localize`, which is where the build
+ // inserts it, so the message is present alongside it here.
+ const { outputFiles } = await createInliner([
+ browserFile('main.js', `export const locale = "___NG_LOCALE_INSERT___";\n${GREETING_SOURCE}`),
+ ]).inlineForLocale('fr', { greeting: translationFor('Bonjour') });
+
+ expect(findFile(outputFiles, 'main.js').text).toContain('"fr"');
+ expect(findFile(outputFiles, 'main.js').text).not.toContain('___NG_LOCALE_INSERT___');
+ });
+
+ it('remaps the source map of a file it modifies', async () => {
+ // esbuild provides a map from the emitted code back to an original file, matching what the
+ // inliner receives during a build.
+ const { code, map } = await transform(GREETING_SOURCE, {
+ sourcefile: 'greeting.ts',
+ loader: 'ts',
+ sourcemap: 'external',
+ });
+
+ const { outputFiles } = await createInliner([
+ browserFile('main.js', code),
+ browserFile('main.js.map', map),
+ ]).inlineForLocale('fr', { greeting: translationFor('Bonjour') });
+
+ const outputMap = JSON.parse(findFile(outputFiles, 'main.js.map').text) as {
+ version: number;
+ sources: string[];
+ mappings: string;
+ };
+
+ expect(outputMap.version).toBe(3);
+ // The map must still resolve to the original file rather than to the inliner's input.
+ expect(outputMap.sources).toContain('greeting.ts');
+ expect(outputMap.mappings.length).toBeGreaterThan(0);
+ });
+
+ describe('inlineTemplateUpdate', () => {
+ it('inlines the translations of a locale into a template update', async () => {
+ const { code, errors, warnings } = await createInliner([]).inlineTemplateUpdate(
+ 'fr',
+ { greeting: translationFor('Bonjour') },
+ GREETING_SOURCE,
+ 'template-id',
+ );
+
+ expect(errors).toEqual([]);
+ expect(warnings).toEqual([]);
+ expect(code).toContain('"Bonjour"');
+ expect(code).not.toContain('$localize');
+ });
+
+ it('retains the original messages for a locale without translations', async () => {
+ const { code, errors, warnings } = await createInliner([]).inlineTemplateUpdate(
+ 'en-US',
+ undefined,
+ GREETING_SOURCE,
+ 'template-id',
+ );
+
+ expect(errors).toEqual([]);
+ expect(warnings).toEqual([]);
+ expect(code).toContain('"Hello"');
+ });
+
+ it('returns the code untouched when it has no localize calls', async () => {
+ const source = 'export const answer = 42;\n';
+ const { code } = await createInliner([]).inlineTemplateUpdate(
+ 'fr',
+ { greeting: translationFor('Bonjour') },
+ source,
+ 'template-id',
+ );
+
+ expect(code).toBe(source);
+ });
+ });
+
+ it('safely inlines translations containing special characters, quotes, and newlines', async () => {
+ const { outputFiles, errors, warnings } = await createInliner([
+ browserFile('main.js', GREETING_SOURCE),
+ ]).inlineForLocale('fr', {
+ greeting: translationFor('Bonjour "mon ami" \\ \' \n '),
+ });
+
+ expect(errors).toEqual([]);
+ expect(warnings).toEqual([]);
+ expect(findFile(outputFiles, 'main.js').text).toBe(
+ 'export const greeting = "Bonjour \\"mon ami\\" \\\\ \' \\n ";\n',
+ );
+ });
+
+ it('inlines translations containing placeholders', async () => {
+ const source = 'export const welcome = (name) => $localize`:@@welcome:Hello ${name}!`;\n';
+ const { outputFiles, errors, warnings } = await createInliner([
+ browserFile('main.js', source),
+ ]).inlineForLocale('fr', {
+ welcome: {
+ messageParts: ['Bonjour ', ' !'],
+ placeholderNames: ['PH'],
+ text: 'Bonjour {$PH} !',
+ },
+ });
+
+ expect(errors).toEqual([]);
+ expect(warnings).toEqual([]);
+ expect(findFile(outputFiles, 'main.js').text).toBe(
+ 'export const welcome = (name) => `Bonjour ${name} !`;\n',
+ );
+ });
+
+ it('inlines multiple localize calls within the same file', async () => {
+ const source =
+ 'export const a = $localize`:@@greeting:Hello`;\nexport const b = $localize`:@@farewell:Goodbye`;\n';
+ const { outputFiles, errors, warnings } = await createInliner([
+ browserFile('main.js', source),
+ ]).inlineForLocale('fr', {
+ greeting: translationFor('Bonjour'),
+ farewell: translationFor('Au revoir'),
+ });
+
+ expect(errors).toEqual([]);
+ expect(warnings).toEqual([]);
+ expect(findFile(outputFiles, 'main.js').text).toBe(
+ 'export const a = "Bonjour";\nexport const b = "Au revoir";\n',
+ );
+ });
+
+ it('inlines translations across multiple files using multiple worker threads in parallel', async () => {
+ inliner = new I18nInliner(
+ {
+ missingTranslation: 'warning',
+ outputFiles: [
+ browserFile('main.js', GREETING_SOURCE),
+ browserFile('chunk1.js', GREETING_SOURCE),
+ browserFile('chunk2.js', GREETING_SOURCE),
+ browserFile('chunk3.js', GREETING_SOURCE),
+ ],
+ },
+ 4,
+ );
+
+ const { outputFiles, errors, warnings } = await inliner.inlineForLocale('fr', {
+ greeting: translationFor('Bonjour'),
+ });
+
+ expect(errors).toEqual([]);
+ expect(warnings).toEqual([]);
+ for (const name of ['main.js', 'chunk1.js', 'chunk2.js', 'chunk3.js']) {
+ expect(findFile(outputFiles, name).text).toBe('export const greeting = "Bonjour";\n');
+ }
+ });
+
+ it('leaves files without localize calls unmodified', async () => {
+ const { outputFiles } = await createInliner([
+ browserFile('main.js', GREETING_SOURCE),
+ browserFile('other.js', 'export const answer = 42;\n'),
+ ]).inlineForLocale('fr', { greeting: translationFor('Bonjour') });
+
+ expect(findFile(outputFiles, 'other.js').text).toBe('export const answer = 42;\n');
+ });
+});
diff --git a/packages/angular/build/src/tools/esbuild/license-extractor.ts b/packages/angular/build/src/tools/esbuild/license-extractor.ts
index 6629bbc387bf..890ebdd9826f 100644
--- a/packages/angular/build/src/tools/esbuild/license-extractor.ts
+++ b/packages/angular/build/src/tools/esbuild/license-extractor.ts
@@ -7,7 +7,7 @@
*/
import type { Metafile } from 'esbuild';
-import { readFile } from 'node:fs/promises';
+import { readFile, readdir } from 'node:fs/promises';
import path from 'node:path';
/**
@@ -30,9 +30,9 @@ const NODE_MODULE_SEGMENT = 'node_modules';
const CUSTOM_LICENSE_TEXT = 'SEE LICENSE IN ';
/**
- * A list of commonly named license files found within packages.
+ * A regular expression for commonly named license files found within packages.
*/
-const LICENSE_FILES = ['LICENSE', 'LICENSE.txt', 'LICENSE.md'];
+const LICENSE_FILE_REGEXP = /^(?:mit-)?licen[cs]e(?:$|[-._])/i;
/**
* Header text that will be added to the top of the output license extraction file.
@@ -64,6 +64,7 @@ export async function extractLicenses(metafile: Metafile, rootDirectory: string)
let extractedLicenseContent = `${EXTRACTION_FILE_HEADER}\n${EXTRACTION_FILE_SEPARATOR}`;
const seenPaths = new Set();
+ const seenPackageDirectories = new Set();
const seenPackages = new Set();
for (const entry of Object.values(metafile.outputs)) {
@@ -110,6 +111,11 @@ export async function extractLicenses(metafile: Metafile, rootDirectory: string)
: nameOrScope;
const packageDirectory = path.join(baseDirectory, packageName);
+ if (seenPackageDirectories.has(packageDirectory)) {
+ continue;
+ }
+ seenPackageDirectories.add(packageDirectory);
+
// Load the package's metadata to find the package's name, version, and license type
const packageJsonPath = path.join(packageDirectory, 'package.json');
let packageJson;
@@ -136,12 +142,12 @@ export async function extractLicenses(metafile: Metafile, rootDirectory: string)
let licenseText = '';
if (
typeof packageJson.license === 'string' &&
- packageJson.license.toLowerCase().startsWith(CUSTOM_LICENSE_TEXT)
+ packageJson.license.toUpperCase().startsWith(CUSTOM_LICENSE_TEXT)
) {
// Attempt to load the package's custom license
let customLicensePath;
const customLicenseFile = path.normalize(
- packageJson.license.slice(CUSTOM_LICENSE_TEXT.length + 1).trim(),
+ packageJson.license.slice(CUSTOM_LICENSE_TEXT.length).trim(),
);
if (customLicenseFile.startsWith('..') || path.isAbsolute(customLicenseFile)) {
// Path is attempting to access files outside of the package
@@ -150,17 +156,20 @@ export async function extractLicenses(metafile: Metafile, rootDirectory: string)
customLicensePath = path.join(packageDirectory, customLicenseFile);
try {
licenseText = await readFile(customLicensePath, 'utf-8');
- break;
} catch {}
}
} else {
// Search for a license file within the root of the package
- for (const potentialLicense of LICENSE_FILES) {
- const packageLicensePath = path.join(packageDirectory, potentialLicense);
- try {
- licenseText = await readFile(packageLicensePath, 'utf-8');
- break;
- } catch {}
+ const entries = await readdir(packageDirectory, { withFileTypes: true }).catch(() => []);
+
+ for (const entry of entries) {
+ if ((entry.isFile() || entry.isSymbolicLink()) && LICENSE_FILE_REGEXP.test(entry.name)) {
+ const packageLicensePath = path.join(packageDirectory, entry.name);
+ try {
+ licenseText = await readFile(packageLicensePath, 'utf-8');
+ break;
+ } catch {}
+ }
}
}
diff --git a/packages/angular/build/src/tools/esbuild/load-result-cache.ts b/packages/angular/build/src/tools/esbuild/load-result-cache.ts
index 30067486a384..40936c6a87d1 100644
--- a/packages/angular/build/src/tools/esbuild/load-result-cache.ts
+++ b/packages/angular/build/src/tools/esbuild/load-result-cache.ts
@@ -48,12 +48,26 @@ export function createCachedLoad(
export class MemoryLoadResultCache implements LoadResultCache {
#loadResults = new Map();
#fileDependencies = new Map>();
+ #watchFilesPerKey = new Map>();
get(path: string): OnLoadResult | undefined {
return this.#loadResults.get(path);
}
async put(path: string, result: OnLoadResult): Promise {
+ if (result.errors && result.errors.length > 0) {
+ const previousWatchFiles = this.#watchFilesPerKey.get(path);
+ if (previousWatchFiles) {
+ result.watchFiles = Array.from(
+ new Set([...(result.watchFiles ?? []), ...previousWatchFiles]),
+ );
+ }
+ } else if (result.watchFiles && result.watchFiles.length > 0) {
+ this.#watchFilesPerKey.set(path, [...result.watchFiles]);
+ } else {
+ this.#watchFilesPerKey.delete(path);
+ }
+
this.#loadResults.set(path, result);
if (result.watchFiles) {
for (const watchFile of result.watchFiles) {
@@ -90,4 +104,10 @@ export class MemoryLoadResultCache implements LoadResultCache {
// are namespaced request paths and not disk-based file paths.
return [...this.#fileDependencies.keys()];
}
+
+ clear(): void {
+ this.#loadResults.clear();
+ this.#fileDependencies.clear();
+ this.#watchFilesPerKey.clear();
+ }
}
diff --git a/packages/angular/build/src/tools/esbuild/load-result-cache_spec.ts b/packages/angular/build/src/tools/esbuild/load-result-cache_spec.ts
new file mode 100644
index 000000000000..fb0396aea829
--- /dev/null
+++ b/packages/angular/build/src/tools/esbuild/load-result-cache_spec.ts
@@ -0,0 +1,85 @@
+/**
+ * @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 { MemoryLoadResultCache } from './load-result-cache';
+
+describe('MemoryLoadResultCache', () => {
+ let cache: MemoryLoadResultCache;
+
+ beforeEach(() => {
+ cache = new MemoryLoadResultCache();
+ });
+
+ it('should store and retrieve results', async () => {
+ const result = {
+ contents: 'body { color: red; }',
+ loader: 'css' as const,
+ };
+
+ await cache.put('file:/test/styles.css', result);
+ const cached = cache.get('file:/test/styles.css');
+
+ expect(cached).toBe(result);
+ });
+
+ it('should track watch files in fileDependencies', async () => {
+ const result = {
+ contents: 'body { color: red; }',
+ loader: 'css' as const,
+ watchFiles: ['/test/styles.css', '/test/theme.json'],
+ };
+
+ await cache.put('file:/test/styles.css', result);
+
+ expect(cache.watchFiles).toContain('/test/styles.css');
+ expect(cache.watchFiles).toContain('/test/theme.json');
+ });
+
+ it('should invalidate cached results when a dependency changes', async () => {
+ const result = {
+ contents: 'body { color: red; }',
+ loader: 'css' as const,
+ watchFiles: ['/test/styles.css', '/test/theme.json'],
+ };
+
+ await cache.put('file:/test/styles.css', result);
+ expect(cache.get('file:/test/styles.css')).toBe(result);
+
+ const invalidated = cache.invalidate('/test/theme.json');
+ expect(invalidated).toBeTrue();
+ expect(cache.get('file:/test/styles.css')).toBeUndefined();
+ });
+
+ it('should preserve previous watch files when caching an error result', async () => {
+ const successResult = {
+ contents: 'body { color: red; }',
+ loader: 'css' as const,
+ watchFiles: ['/test/styles.css', '/test/theme.json'],
+ };
+
+ await cache.put('file:/test/styles.css', successResult);
+ cache.invalidate('/test/theme.json');
+
+ // Simulate an incremental rebuild error result that only has the entry file in watchFiles
+ const errorResult = {
+ errors: [{ text: 'Syntax error in theme.json' }],
+ watchFiles: ['/test/styles.css'],
+ };
+
+ await cache.put('file:/test/styles.css', errorResult);
+
+ // Both the entry file and the previous dependency should be tracked
+ expect(cache.watchFiles).toContain('/test/styles.css');
+ expect(cache.watchFiles).toContain('/test/theme.json');
+
+ // Invalidating the dependency should clear the cached error result
+ const invalidated = cache.invalidate('/test/theme.json');
+ expect(invalidated).toBeTrue();
+ expect(cache.get('file:/test/styles.css')).toBeUndefined();
+ });
+});
diff --git a/packages/angular/build/src/tools/esbuild/sqlite-cache-store.ts b/packages/angular/build/src/tools/esbuild/sqlite-cache-store.ts
index 3d594668d44f..4f50515749df 100644
--- a/packages/angular/build/src/tools/esbuild/sqlite-cache-store.ts
+++ b/packages/angular/build/src/tools/esbuild/sqlite-cache-store.ts
@@ -15,6 +15,8 @@ export class SqliteCacheStore implements PersistentCacheStore {
#hasStmt: StatementSync | undefined;
#setStmt: StatementSync | undefined;
#updateAccessedStmt: StatementSync | undefined;
+ readonly #pendingAccessedKeys = new Set();
+ #flushTimeout: NodeJS.Timeout | undefined;
constructor(
readonly cachePath: string,
@@ -29,6 +31,9 @@ export class SqliteCacheStore implements PersistentCacheStore {
this.#db.exec('PRAGMA auto_vacuum = FULL;');
this.#db.exec('PRAGMA journal_mode = WAL;');
this.#db.exec('PRAGMA synchronous = NORMAL;');
+ this.#db.exec('PRAGMA busy_timeout = 5000;');
+ this.#db.exec('PRAGMA temp_store = MEMORY;');
+ this.#db.exec('PRAGMA mmap_size = 268435456;');
this.#db.exec(
'CREATE TABLE IF NOT EXISTS cache (key TEXT PRIMARY KEY, value TEXT, last_accessed INTEGER NOT NULL) WITHOUT ROWID;',
);
@@ -46,13 +51,51 @@ export class SqliteCacheStore implements PersistentCacheStore {
return this.#db;
}
+ #queueAccessUpdate(key: string): void {
+ this.#pendingAccessedKeys.add(key);
+
+ if (this.#pendingAccessedKeys.size >= 100) {
+ this.#flushAccessUpdates();
+ } else if (!this.#flushTimeout) {
+ this.#flushTimeout = setTimeout(() => this.#flushAccessUpdates(), 500);
+ this.#flushTimeout.unref?.();
+ }
+ }
+
+ #flushAccessUpdates(): void {
+ if (this.#flushTimeout) {
+ clearTimeout(this.#flushTimeout);
+ this.#flushTimeout = undefined;
+ }
+
+ if (!this.#db || this.#pendingAccessedKeys.size === 0 || !this.#updateAccessedStmt) {
+ return;
+ }
+
+ try {
+ this.#db.exec('BEGIN IMMEDIATE TRANSACTION;');
+ for (const key of this.#pendingAccessedKeys) {
+ this.#updateAccessedStmt.run(key);
+ }
+ this.#db.exec('COMMIT;');
+ } catch {
+ try {
+ this.#db.exec('ROLLBACK;');
+ } catch {
+ // Ignore rollback errors if transaction was not active
+ }
+ } finally {
+ this.#pendingAccessedKeys.clear();
+ }
+ }
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
async get(key: string): Promise {
this.#ensureDb();
const row = this.#getStmt?.get(key) as { value: string } | undefined;
if (row) {
- this.#updateAccessedStmt?.run(key);
+ this.#queueAccessUpdate(key);
try {
return JSON.parse(row.value);
@@ -72,6 +115,7 @@ export class SqliteCacheStore implements PersistentCacheStore {
async set(key: string, value: unknown): Promise {
this.#ensureDb();
+ this.#pendingAccessedKeys.delete(key);
this.#setStmt?.run(key, JSON.stringify(value));
return this;
@@ -84,6 +128,9 @@ export class SqliteCacheStore implements PersistentCacheStore {
close(): void {
if (this.#db) {
try {
+ // Flush any pending access updates in one transaction before pruning
+ this.#flushAccessUpdates();
+
// 1. Delete items older than N days
this.#db
.prepare("DELETE FROM cache WHERE last_accessed < unixepoch('now', ?);")
@@ -103,6 +150,12 @@ export class SqliteCacheStore implements PersistentCacheStore {
} catch {
// Pruning errors should not block build success
} finally {
+ if (this.#flushTimeout) {
+ clearTimeout(this.#flushTimeout);
+ this.#flushTimeout = undefined;
+ }
+ this.#pendingAccessedKeys.clear();
+
this.#getStmt = undefined;
this.#hasStmt = undefined;
this.#setStmt = undefined;
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 78925f35835e..2c40e007350e 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
@@ -427,6 +427,7 @@ async function compileString(
},
},
],
+ watchFiles: error.file && error.file !== filename ? [filename, error.file] : [filename],
};
} else {
assertIsError(error);
diff --git a/packages/angular/build/src/tools/esbuild/target.ts b/packages/angular/build/src/tools/esbuild/target.ts
new file mode 100644
index 000000000000..2925905276b7
--- /dev/null
+++ b/packages/angular/build/src/tools/esbuild/target.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 { coerce, compare, minVersion } from 'semver';
+
+/**
+ * Compares two target version strings.
+ *
+ * This function is used to determine the lowest version for a given browser target.
+ *
+ * @param a The first version string.
+ * @param b The second version string.
+ * @returns A negative value if `a` is lower than `b`, a positive value if `a` is higher than `b`, and 0 if they are equal.
+ */
+function compareTargetVersions(a: string, b: string): number {
+ const aVersion = coerce(a);
+ const bVersion = coerce(b);
+
+ if (!aVersion || !bVersion) {
+ return aVersion ? -1 : bVersion ? 1 : 0;
+ }
+
+ return compare(aVersion, bVersion);
+}
+
+// https://esbuild.github.io/api/#target
+const ESBUILD_SUPPORTED_BROWSERS: ReadonlySet = new Set([
+ 'chrome',
+ 'edge',
+ 'firefox',
+ 'ie',
+ 'ios',
+ 'node',
+ 'opera',
+ 'safari',
+]);
+
+/**
+ * Transform browserlists result to esbuild target.
+ *
+ * Only the lowest version for each browser is returned to avoid issues with esbuild and rolldown
+ * when multiple versions of the same target engine are specified.
+ *
+ * @see https://esbuild.github.io/api/#target
+ * @see https://github.com/evanw/esbuild/issues/4509
+ * @see https://github.com/rolldown/rolldown/issues/10633
+ */
+export function transformSupportedBrowsersToTargets(supportedBrowsers: string[]): string[] {
+ const browsers = new Map();
+
+ for (const browser of supportedBrowsers) {
+ let [browserName, version] = browser.toLowerCase().split(' ');
+ if (!browserName || !version) {
+ continue;
+ }
+
+ // browserslist uses the name `ios_saf` for iOS Safari whereas esbuild uses `ios`
+ if (browserName === 'ios_saf') {
+ browserName = 'ios';
+ }
+
+ if (!ESBUILD_SUPPORTED_BROWSERS.has(browserName)) {
+ continue;
+ }
+
+ // browserslist uses ranges `15.2-15.3` versions but only the lowest is required
+ // to perform minimum supported feature checks. esbuild also expects a single version.
+ [version] = version.split('-');
+
+ if (browserName === 'safari' && version === 'tp') {
+ // esbuild only supports numeric versions so `TP` is converted to a high number (999) since
+ // a Technology Preview (TP) of Safari is assumed to support all currently known features.
+ version = '999';
+ } else if (!version.includes('.')) {
+ // A lone major version is considered by esbuild to include all minor versions. However,
+ // browserslist does not and is also inconsistent in its `.0` version naming. For example,
+ // Safari 15.0 is named `safari 15` but Safari 16.0 is named `safari 16.0`.
+ version += '.0';
+ }
+
+ const current = browsers.get(browserName);
+ if (!current || compareTargetVersions(version, current) < 0) {
+ browsers.set(browserName, version);
+ }
+ }
+
+ return Array.from(browsers, ([browserName, version]) => browserName + version);
+}
+
+const SUPPORTED_NODE_VERSIONS = '0.0.0-ENGINES-NODE';
+
+/**
+ * Transform supported Node.js versions to esbuild target.
+ *
+ * Only the lowest Node.js version is returned to avoid issues with esbuild and rolldown
+ * when multiple versions of the same target engine are specified.
+ *
+ * @see https://esbuild.github.io/api/#target
+ * @see https://github.com/evanw/esbuild/issues/4509
+ * @see https://github.com/rolldown/rolldown/issues/10633
+ */
+export function getSupportedNodeTargets(): string[] {
+ if (SUPPORTED_NODE_VERSIONS.charAt(0) === '0') {
+ // Unlike `pkg_npm`, `ts_library` which is used to run unit tests does not support substitutions.
+ return [];
+ }
+
+ const parsed = minVersion(SUPPORTED_NODE_VERSIONS);
+
+ return parsed ? ['node' + parsed.version] : [];
+}
diff --git a/packages/angular/build/src/tools/esbuild/target_spec.ts b/packages/angular/build/src/tools/esbuild/target_spec.ts
new file mode 100644
index 000000000000..e5a375a1412b
--- /dev/null
+++ b/packages/angular/build/src/tools/esbuild/target_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 { getSupportedNodeTargets, transformSupportedBrowsersToTargets } from './target';
+
+describe('esbuild target', () => {
+ describe('transformSupportedBrowsersToTargets', () => {
+ it('should return the smallest version for each browser', () => {
+ const targets = transformSupportedBrowsersToTargets([
+ 'chrome 122',
+ 'chrome 120',
+ 'chrome 121',
+ 'firefox 116',
+ 'firefox 115',
+ 'safari 17.0',
+ 'safari 16.4',
+ ]);
+
+ expect(targets).toEqual(['chrome120.0', 'firefox115.0', 'safari16.4']);
+ });
+
+ it('should handle version ranges and pick the lowest version', () => {
+ const targets = transformSupportedBrowsersToTargets([
+ 'ios_saf 15.4',
+ 'ios_saf 15.2-15.3',
+ 'ios_saf 16.0',
+ ]);
+
+ expect(targets).toEqual(['ios15.2']);
+ });
+
+ it('should handle Safari TP (Technology Preview)', () => {
+ const targetsWithOlderSafari = transformSupportedBrowsersToTargets([
+ 'safari TP',
+ 'safari 16.4',
+ ]);
+ expect(targetsWithOlderSafari).toEqual(['safari16.4']);
+
+ const targetsWithOnlyTP = transformSupportedBrowsersToTargets(['safari TP']);
+ expect(targetsWithOnlyTP).toEqual(['safari999']);
+ });
+
+ it('should ignore browsers not supported by esbuild', () => {
+ const targets = transformSupportedBrowsersToTargets([
+ 'android 4.4',
+ 'samsung 22',
+ 'kaios 2.5',
+ 'chrome 115',
+ ]);
+
+ expect(targets).toEqual(['chrome115.0']);
+ });
+
+ it('should return empty array for empty supportedBrowsers', () => {
+ const targets = transformSupportedBrowsersToTargets([]);
+ expect(targets).toEqual([]);
+ });
+
+ it('should handle malformed or incomplete browser strings gracefully', () => {
+ const targets = transformSupportedBrowsersToTargets(['chrome', 'firefox ', '']);
+ expect(targets).toEqual([]);
+ });
+
+ it('should handle single major versions by appending .0', () => {
+ const targets = transformSupportedBrowsersToTargets(['chrome 120', 'edge 120']);
+ expect(targets).toEqual(['chrome120.0', 'edge120.0']);
+ });
+ });
+
+ describe('getSupportedNodeTargets', () => {
+ it('should return empty array when node versions are not stamped', () => {
+ expect(getSupportedNodeTargets()).toEqual([]);
+ });
+ });
+});
diff --git a/packages/angular/build/src/tools/esbuild/utils.ts b/packages/angular/build/src/tools/esbuild/utils.ts
index 6d76623f1493..e4881e184862 100644
--- a/packages/angular/build/src/tools/esbuild/utils.ts
+++ b/packages/angular/build/src/tools/esbuild/utils.ts
@@ -12,7 +12,6 @@ import { Listr } from 'listr2';
import { basename, join } from 'node:path';
import { pathToFileURL } from 'node:url';
import { brotliCompress } from 'node:zlib';
-import { coerce } from 'semver';
import { NormalizedApplicationBuildOptions } from '../../builders/application/options';
import { OutputMode } from '../../builders/application/schema';
import { BudgetCalculatorResult } from '../../utils/bundle-calculator';
@@ -213,7 +212,7 @@ export async function emitFilesToDisk(
writeFileCallback: (file: T) => Promise,
): Promise {
// Write files in groups of MAX_CONCURRENT_WRITES to avoid too many open files
- for (let fileIndex = 0; fileIndex < files.length; ) {
+ for (let fileIndex = 0; fileIndex < files.length;) {
const groupMax = Math.min(fileIndex + MAX_CONCURRENT_WRITES, files.length);
const actions = [];
@@ -225,71 +224,6 @@ export async function emitFilesToDisk(
}
}
-/**
- * Transform browserlists result to esbuild target.
- * @see https://esbuild.github.io/api/#target
- */
-export function transformSupportedBrowsersToTargets(supportedBrowsers: string[]): string[] {
- const transformed: string[] = [];
-
- // https://esbuild.github.io/api/#target
- const esBuildSupportedBrowsers = new Set([
- 'chrome',
- 'edge',
- 'firefox',
- 'ie',
- 'ios',
- 'node',
- 'opera',
- 'safari',
- ]);
-
- for (const browser of supportedBrowsers) {
- let [browserName, version] = browser.toLowerCase().split(' ');
-
- // browserslist uses the name `ios_saf` for iOS Safari whereas esbuild uses `ios`
- if (browserName === 'ios_saf') {
- browserName = 'ios';
- }
-
- // browserslist uses ranges `15.2-15.3` versions but only the lowest is required
- // to perform minimum supported feature checks. esbuild also expects a single version.
- [version] = version.split('-');
-
- if (esBuildSupportedBrowsers.has(browserName)) {
- if (browserName === 'safari' && version === 'tp') {
- // esbuild only supports numeric versions so `TP` is converted to a high number (999) since
- // a Technology Preview (TP) of Safari is assumed to support all currently known features.
- version = '999';
- } else if (!version.includes('.')) {
- // A lone major version is considered by esbuild to include all minor versions. However,
- // browserslist does not and is also inconsistent in its `.0` version naming. For example,
- // Safari 15.0 is named `safari 15` but Safari 16.0 is named `safari 16.0`.
- version += '.0';
- }
-
- transformed.push(browserName + version);
- }
- }
-
- return transformed;
-}
-
-const SUPPORTED_NODE_VERSIONS = '0.0.0-ENGINES-NODE';
-
-/**
- * Transform supported Node.js versions to esbuild target.
- * @see https://esbuild.github.io/api/#target
- */
-export function getSupportedNodeTargets(): string[] {
- if (SUPPORTED_NODE_VERSIONS.charAt(0) === '0') {
- // Unlike `pkg_npm`, `ts_library` which is used to run unit tests does not support substitutions.
- return [];
- }
-
- return SUPPORTED_NODE_VERSIONS.split('||').map((v) => 'node' + coerce(v)?.version);
-}
-
interface BuildManifest {
errors: string[];
warnings: string[];
diff --git a/packages/angular/build/src/tools/vite/utils.ts b/packages/angular/build/src/tools/vite/utils.ts
index f2b54d403334..dc7094b8ffe4 100644
--- a/packages/angular/build/src/tools/vite/utils.ts
+++ b/packages/angular/build/src/tools/vite/utils.ts
@@ -48,6 +48,7 @@ export type RolldownLoaderOption = Exclude<
>['moduleTypes'];
export function getDepOptimizationConfig({
+ target,
disabled,
exclude,
include,
@@ -56,6 +57,7 @@ export function getDepOptimizationConfig({
thirdPartySourcemaps,
define = {},
}: {
+ target: string[];
disabled: boolean;
exclude: string[];
include: string[];
@@ -73,6 +75,7 @@ export function getDepOptimizationConfig({
noDiscovery: disabled,
rolldownOptions: {
transform: {
+ target,
define,
},
moduleTypes: loader,
diff --git a/packages/angular/build/src/utils/bundle-calculator.ts b/packages/angular/build/src/utils/bundle-calculator.ts
index 3349a8a40830..71a75dafde02 100644
--- a/packages/angular/build/src/utils/bundle-calculator.ts
+++ b/packages/angular/build/src/utils/bundle-calculator.ts
@@ -152,6 +152,8 @@ function calculateSizes(budget: BudgetEntry, stats: BudgetStats): Size[] {
}
abstract class Calculator {
+ private assetMap?: ReadonlyMap;
+
constructor(
protected budget: BudgetEntry,
protected chunks: BudgetChunk[],
@@ -167,15 +169,24 @@ abstract class Calculator {
return 0;
}
+ if (!this.assetMap) {
+ const map = new Map();
+ for (const asset of this.assets) {
+ map.set(asset.name, asset.size);
+ }
+ this.assetMap = map;
+ }
+ const assetMap = this.assetMap;
+
return chunk.files
.filter((file) => !file.endsWith('.map'))
.map((file) => {
- const asset = this.assets.find((asset) => asset.name === file);
- if (!asset) {
+ const assetSize = assetMap.get(file);
+ if (assetSize === undefined) {
throw new Error(`Could not find asset for file: ${file}`);
}
- return asset.size;
+ return assetSize;
})
.reduce((l, r) => l + r, 0);
}
diff --git a/packages/angular/build/src/utils/path.ts b/packages/angular/build/src/utils/path.ts
index 4056972f790c..a236878d134e 100644
--- a/packages/angular/build/src/utils/path.ts
+++ b/packages/angular/build/src/utils/path.ts
@@ -6,7 +6,6 @@
* found in the LICENSE file at https://angular.dev/license
*/
-import { realpathSync } from 'node:fs';
import { isAbsolute, posix, relative, resolve } from 'node:path';
import { platform } from 'node:process';
@@ -53,18 +52,15 @@ export function isSubDirectory(parent: string, child: string): boolean {
}
/**
- * Canonicalizes a file path by normalising Windows drive-letter casing to uppercase
- * and optionally resolving symbolic links.
+ * Canonicalizes a file path by normalising Windows drive-letter casing to uppercase.
*
* @param pathString - The file path to canonicalize.
- * @param preserveSymlinks - If true, symbolic links will not be resolved.
* @returns The canonicalized file path.
*/
-export function canonicalizePath(pathString: string, preserveSymlinks = false): string {
- const resolved = preserveSymlinks ? pathString : realpathSync(pathString);
- if (platform === 'win32' && /^[a-z]:/.test(resolved)) {
- return resolved[0].toUpperCase() + resolved.slice(1);
+export function canonicalizePath(pathString: string): string {
+ if (platform === 'win32' && /^[a-z]:/.test(pathString)) {
+ return pathString[0].toUpperCase() + pathString.slice(1);
}
- return resolved;
+ return pathString;
}
diff --git a/packages/angular/build/src/utils/path_spec.ts b/packages/angular/build/src/utils/path_spec.ts
index 84c7d8ac31c4..cd8ca3372433 100644
--- a/packages/angular/build/src/utils/path_spec.ts
+++ b/packages/angular/build/src/utils/path_spec.ts
@@ -6,7 +6,7 @@
* found in the LICENSE file at https://angular.dev/license
*/
-import { isSubDirectory } from './path';
+import { canonicalizePath, isSubDirectory } from './path';
describe('isSubDirectory', () => {
it('should return true for a direct child', () => {
@@ -39,3 +39,17 @@ describe('isSubDirectory', () => {
expect(isSubDirectory('/foo/bar', '/foo/bar/..baz/qux')).toBeTrue();
});
});
+
+describe('canonicalizePath', () => {
+ it('should return the path unmodified on POSIX systems', () => {
+ expect(canonicalizePath('/foo/bar/baz')).toBe('/foo/bar/baz');
+ });
+
+ if (process.platform === 'win32') {
+ it('should uppercase Windows drive-letter casing', () => {
+ expect(canonicalizePath('c:/foo/bar')).toBe('C:/foo/bar');
+ expect(canonicalizePath('d:\\foo\\bar')).toBe('D:\\foo\\bar');
+ expect(canonicalizePath('C:/foo/bar')).toBe('C:/foo/bar');
+ });
+ }
+});
diff --git a/packages/angular/build/src/utils/server-rendering/manifest.ts b/packages/angular/build/src/utils/server-rendering/manifest.ts
index bd294b1e7e4b..1ee430a76333 100644
--- a/packages/angular/build/src/utils/server-rendering/manifest.ts
+++ b/packages/angular/build/src/utils/server-rendering/manifest.ts
@@ -7,8 +7,8 @@
*/
import type { Metafile } from 'esbuild';
+import { Buffer } from 'node:buffer';
import { extname } from 'node:path';
-import { runInThisContext } from 'node:vm';
import { NormalizedApplicationBuildOptions } from '../../builders/application/options';
import {
type BuildOutputFile,
@@ -174,9 +174,14 @@ export function generateAngularServerAppManifest(
),
);
- // 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`);
+ // JavaScript engine script parsers normalize `\r\n` (2 bytes in UTF-8) to `\n` (1 byte in UTF-8) in template literals.
+ // Subtracting the count of `\r\n` occurrences avoids allocating any temporary strings or match arrays for large assets.
+ let size = Buffer.byteLength(file.text);
+ let pos = file.text.indexOf('\r\n');
+ while (pos !== -1) {
+ size--;
+ pos = file.text.indexOf('\r\n', pos + 2);
+ }
serverAssets[file.path] =
`{size: ${size}, hash: '${file.hash}', text: () => import('./${jsChunkFilePath}').then(m => m.default)}`;
diff --git a/packages/angular/build/src/utils/source-map.ts b/packages/angular/build/src/utils/source-map.ts
index 3b91bfb5b5ad..9ce5e838987b 100644
--- a/packages/angular/build/src/utils/source-map.ts
+++ b/packages/angular/build/src/utils/source-map.ts
@@ -21,7 +21,12 @@ import { fileURLToPath } from 'node:url';
* @returns The code with top-level sourcemap comments removed.
*/
export function removeSourceMappingURL(code: string): string {
+ if (!code.includes('//# sourceMappingURL=')) {
+ return code;
+ }
+
const result: string[] = [];
+ let lastCopiedIndex = 0;
let i = 0;
const len = code.length;
@@ -30,7 +35,6 @@ export function removeSourceMappingURL(code: string): string {
let currentState:
'normal' | 'string_double' | 'string_single' | 'template' | 'comment_block' | 'comment_line' =
'normal';
- let isStrippingComment = false;
while (i < len) {
const char = code[i];
@@ -39,20 +43,19 @@ export function removeSourceMappingURL(code: string): string {
if (currentState === 'normal') {
if (char === '/' && nextChar === '*') {
currentState = 'comment_block';
- result.push('/*');
i += 2;
continue;
}
if (char === '/' && nextChar === '/') {
// Detect if the comment is escaped (e.g. inside a regex literal like `/\/\/#/`).
let isEscaped = false;
- let prevIdx = result.length - 1;
- while (prevIdx >= 0 && /\s/.test(result[prevIdx])) {
+ let prevIdx = i - 1;
+ while (prevIdx >= 0 && /\s/.test(code[prevIdx])) {
prevIdx--;
}
- if (prevIdx >= 0 && result[prevIdx] === '\\') {
+ if (prevIdx >= 0 && code[prevIdx] === '\\') {
let bsCount = 0;
- while (prevIdx >= 0 && result[prevIdx] === '\\') {
+ while (prevIdx >= 0 && code[prevIdx] === '\\') {
bsCount++;
prevIdx--;
}
@@ -62,34 +65,35 @@ export function removeSourceMappingURL(code: string): string {
}
if (!isEscaped && code.startsWith('//# sourceMappingURL=', i)) {
- currentState = 'comment_line';
- isStrippingComment = true;
- i += 21; // Skip the '//# sourceMappingURL=' prefix
+ if (i > lastCopiedIndex) {
+ result.push(code.slice(lastCopiedIndex, i));
+ }
+ // Skip the rest of the comment line up to the newline
+ i += 21;
+ while (i < len && code[i] !== '\n' && code[i] !== '\r') {
+ i++;
+ }
+ lastCopiedIndex = i;
continue;
} else {
currentState = 'comment_line';
- isStrippingComment = false;
- result.push('//');
i += 2;
continue;
}
}
if (char === '"') {
currentState = 'string_double';
- result.push('"');
i++;
continue;
}
if (char === "'") {
currentState = 'string_single';
- result.push("'");
i++;
continue;
}
if (char === '`') {
currentState = 'template';
stack.push({ type: 'template', braceDepth: 0 });
- result.push('`');
i++;
continue;
}
@@ -98,7 +102,6 @@ export function removeSourceMappingURL(code: string): string {
if (top) {
top.braceDepth++;
}
- result.push('{');
i++;
continue;
}
@@ -110,43 +113,35 @@ export function removeSourceMappingURL(code: string): string {
// Exiting a template literal interpolation ${ ... }
stack.pop();
currentState = 'template';
- result.push('}');
i++;
continue;
}
}
- result.push('}');
i++;
continue;
}
- result.push(char);
i++;
} else if (currentState === 'string_double') {
if (char === '\\') {
- result.push(char, nextChar || '');
i += 2;
continue;
}
if (char === '"') {
currentState = 'normal';
}
- result.push(char);
i++;
} else if (currentState === 'string_single') {
if (char === '\\') {
- result.push(char, nextChar || '');
i += 2;
continue;
}
if (char === "'") {
currentState = 'normal';
}
- result.push(char);
i++;
} else if (currentState === 'template') {
if (char === '\\') {
- result.push(char, nextChar || '');
i += 2;
continue;
}
@@ -154,7 +149,6 @@ export function removeSourceMappingURL(code: string): string {
// Entering template literal interpolation context
currentState = 'normal';
stack.push({ type: 'template', braceDepth: 0 });
- result.push('${');
i += 2;
continue;
}
@@ -162,32 +156,30 @@ export function removeSourceMappingURL(code: string): string {
stack.pop();
currentState = 'normal';
}
- result.push(char);
i++;
} else if (currentState === 'comment_block') {
if (char === '*' && nextChar === '/') {
currentState = 'normal';
- result.push('*/');
i += 2;
continue;
}
- result.push(char);
i++;
} else if (currentState === 'comment_line') {
if (char === '\n' || char === '\r') {
currentState = 'normal';
- isStrippingComment = false;
- result.push(char);
- i++;
- continue;
- }
- if (!isStrippingComment) {
- result.push(char);
}
i++;
}
}
+ if (lastCopiedIndex === 0) {
+ return code;
+ }
+
+ if (lastCopiedIndex < len) {
+ result.push(code.slice(lastCopiedIndex));
+ }
+
return result.join('');
}
diff --git a/packages/angular/build/src/utils/source-map_spec.ts b/packages/angular/build/src/utils/source-map_spec.ts
index 7b424b019403..b34d5bc57a98 100644
--- a/packages/angular/build/src/utils/source-map_spec.ts
+++ b/packages/angular/build/src/utils/source-map_spec.ts
@@ -87,4 +87,14 @@ describe('removeSourceMappingURL', () => {
const code = '// # sourceMappingURL=main.js.map\n//# sourceMappingURL=main.js.map';
expect(removeSourceMappingURL(code)).toBe('// # sourceMappingURL=main.js.map\n');
});
+
+ it('should return the exact input string when no sourcemap comment is present', () => {
+ const code = 'const x = 1;\nconsole.log(x);';
+ expect(removeSourceMappingURL(code)).toBe(code);
+ });
+
+ it('should handle sourcemap comments with CRLF newlines', () => {
+ const code = 'console.log("hello");\r\n//# sourceMappingURL=main.js.map\r\nconst next = 2;';
+ expect(removeSourceMappingURL(code)).toBe('console.log("hello");\r\n\r\nconst next = 2;');
+ });
});
diff --git a/packages/angular/cli/lib/init.ts b/packages/angular/cli/lib/init.ts
index cd324b6df69b..97d410890955 100644
--- a/packages/angular/cli/lib/init.ts
+++ b/packages/angular/cli/lib/init.ts
@@ -10,8 +10,6 @@ import { readFile } from 'node:fs/promises';
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';
import { disableVersionCheck } from '../src/utilities/environment-options';
import { VERSION } from '../src/utilities/version';
@@ -24,6 +22,26 @@ import { VERSION } from '../src/utilities/version';
let forceExit = false;
(async (): Promise => {
+ /**
+ * On Windows, ensure process.cwd() uses uppercase drive letter casing.
+ * Windows cmd.exe and VS Code terminals often preserve lowercase drive letters (e.g. c:\...),
+ * which causes ESM module duplication in Node.js (e.g. loading "vitest" twice) and path
+ * lookup mismatches in tools like Vite and esbuild.
+ */
+ if (process.platform === 'win32') {
+ const cwd = process.cwd();
+ if (/^[a-z]:/.test(cwd)) {
+ try {
+ process.chdir(cwd[0].toUpperCase() + cwd.slice(1));
+ } catch {
+ // Ignore failure to change directory
+ }
+ }
+
+ // Ensure Windows CreateProcess does not search the current directory for bare executable names.
+ process.env['NoDefaultCurrentDirectoryInExePath'] = '1';
+ }
+
/**
* Disable Browserslist old data warning as otherwise with every release we'd need to update this dependency
* which is cumbersome considering we pin versions and the warning is not user actionable.
@@ -31,6 +49,7 @@ let forceExit = false;
* See: https://github.com/browserslist/browserslist/blob/819c4337456996d19db6ba953014579329e9c6e1/node.js#L324
*/
process.env.BROWSERSLIST_IGNORE_OLD_DATA = '1';
+
const rawCommandName = process.argv[2];
/**
@@ -104,15 +123,23 @@ let forceExit = false;
cli.VERSION.major - globalVersion.major <= 1
) {
cli = await import('./cli');
- } else if (await isWarningEnabled('versionMismatch')) {
- // Otherwise, use local version and warn if global is newer than local
- const warning =
- `Your global Angular CLI version (${globalVersion}) is greater than your local ` +
- `version (${localVersion}). The local Angular CLI version is used.\n\n` +
- 'To disable this warning use "ng config -g cli.warnings.versionMismatch false".';
+ } else {
+ try {
+ const { isWarningEnabled } = await import('../src/utilities/config');
+ if (await isWarningEnabled('versionMismatch')) {
+ // Otherwise, use local version and warn if global is newer than local
+ const warning =
+ `Your global Angular CLI version (${globalVersion}) is greater than your local ` +
+ `version (${localVersion}). The local Angular CLI version is used.\n\n` +
+ 'To disable this warning use "ng config -g cli.warnings.versionMismatch false".';
- // eslint-disable-next-line no-console
- console.error(colors.yellow(warning));
+ const { colors } = await import('../src/utilities/color');
+ // eslint-disable-next-line no-console
+ console.error(colors.yellow(warning));
+ }
+ } catch {
+ // Ignore errors during warning check to avoid falling back to global CLI
+ }
}
}
} catch {
diff --git a/packages/angular/cli/package.json b/packages/angular/cli/package.json
index 1d458f516d06..595994ec96eb 100644
--- a/packages/angular/cli/package.json
+++ b/packages/angular/cli/package.json
@@ -17,14 +17,14 @@
"@angular-devkit/schematics": "workspace:0.0.0-PLACEHOLDER",
"@inquirer/prompts": "8.5.2",
"@listr2/prompt-adapter-inquirer": "4.2.4",
- "@modelcontextprotocol/sdk": "1.29.0",
+ "@modelcontextprotocol/sdk": "1.30.0",
"@schematics/angular": "workspace:0.0.0-PLACEHOLDER",
"jsonc-parser": "3.3.1",
"listr2": "10.2.2",
"npm-package-arg": "14.0.0",
"parse5-html-rewriting-stream": "8.0.1",
"semver": "7.8.5",
- "yargs": "18.0.0",
+ "yargs": "18.1.0",
"zod": "4.4.3"
},
"ng-update": {
diff --git a/packages/angular/cli/src/commands/add/cli.ts b/packages/angular/cli/src/commands/add/cli.ts
index a3a3d6f7ecd2..bc95f33ff8e7 100644
--- a/packages/angular/cli/src/commands/add/cli.ts
+++ b/packages/angular/cli/src/commands/add/cli.ts
@@ -243,9 +243,7 @@ export default class AddCommandModule
},
// TODO: Rework schematic execution as a task and insert here
],
- {
- /* options */
- },
+ {/* options */},
);
try {
@@ -263,6 +261,9 @@ export default class AddCommandModule
if (localManifest['ng-add']?.save === false) {
shouldCleanUp = true;
}
+ } else {
+ await this.cleanUpTemporaryDependency(result.collectionName);
+ shouldCleanUp = false;
}
} catch {}
}
diff --git a/packages/angular/cli/src/commands/mcp/tools/devserver/devserver-start.ts b/packages/angular/cli/src/commands/mcp/tools/devserver/devserver-start.ts
index 4e2155f500b7..72bf5440adcb 100644
--- a/packages/angular/cli/src/commands/mcp/tools/devserver/devserver-start.ts
+++ b/packages/angular/cli/src/commands/mcp/tools/devserver/devserver-start.ts
@@ -119,7 +119,7 @@ the first build completes.
* **Consistent Ports**: If making multiple calls, it is recommended to reuse the port you got from the first call for subsequent ones.
`,
- isReadOnly: true,
+ isReadOnly: false,
isLocalOnly: true,
inputSchema: devserverStartToolInputSchema.shape,
outputSchema: devserverStartToolOutputSchema.shape,
diff --git a/packages/angular/cli/src/commands/mcp/tools/devserver/devserver-stop.ts b/packages/angular/cli/src/commands/mcp/tools/devserver/devserver-stop.ts
index 669160695194..32b7d90269d2 100644
--- a/packages/angular/cli/src/commands/mcp/tools/devserver/devserver-stop.ts
+++ b/packages/angular/cli/src/commands/mcp/tools/devserver/devserver-stop.ts
@@ -69,7 +69,7 @@ Stops a running Angular development server ("ng serve") that was started with th
time after this is called. However note that this is not a blocker for starting a new devserver.
`,
- isReadOnly: true,
+ isReadOnly: false,
isLocalOnly: true,
inputSchema: devserverStopToolInputSchema.shape,
outputSchema: devserverStopToolOutputSchema.shape,
diff --git a/packages/angular/cli/src/commands/mcp/tools/run-target/build-target-strategy.ts b/packages/angular/cli/src/commands/mcp/tools/run-target/build-target-strategy.ts
index 1fbd8f83e47a..2e280927f466 100644
--- a/packages/angular/cli/src/commands/mcp/tools/run-target/build-target-strategy.ts
+++ b/packages/angular/cli/src/commands/mcp/tools/run-target/build-target-strategy.ts
@@ -29,7 +29,7 @@ export class BuildTargetStrategy implements TargetStrategy {
): Promise {
const args = ['build', input.projectName];
if (input.configuration) {
- args.push('-c', input.configuration);
+ args.push(`--configuration=${input.configuration}`);
}
args.push(...serializeOptions(input.options));
diff --git a/packages/angular/cli/src/commands/mcp/tools/run-target/generic-target-strategy.ts b/packages/angular/cli/src/commands/mcp/tools/run-target/generic-target-strategy.ts
index e2cbc816c330..365253131248 100644
--- a/packages/angular/cli/src/commands/mcp/tools/run-target/generic-target-strategy.ts
+++ b/packages/angular/cli/src/commands/mcp/tools/run-target/generic-target-strategy.ts
@@ -46,7 +46,7 @@ export class GenericTargetStrategy implements TargetStrategy {
}
if (input.configuration) {
- args.push('-c', input.configuration);
+ args.push(`--configuration=${input.configuration}`);
}
let options = input.options;
diff --git a/packages/angular/cli/src/commands/mcp/tools/run-target/run-target_spec.ts b/packages/angular/cli/src/commands/mcp/tools/run-target/run-target_spec.ts
index 67b1fffef27e..91ccbac4584a 100644
--- a/packages/angular/cli/src/commands/mcp/tools/run-target/run-target_spec.ts
+++ b/packages/angular/cli/src/commands/mcp/tools/run-target/run-target_spec.ts
@@ -42,7 +42,7 @@ describe('Run Target Tool', () => {
mockContext.workspace.extensions['defaultProject'] = 'my-app';
await runTarget({ target: 'build', configuration: 'production' }, mockContext);
expect(mockHost.executeNgCommand).toHaveBeenCalledWith(
- ['build', 'my-app', '-c', 'production'],
+ ['build', 'my-app', '--configuration=production'],
{
cwd: '/test',
},
@@ -53,7 +53,7 @@ describe('Run Target Tool', () => {
mockContext.workspace.extensions['defaultProject'] = 'my-app';
await runTarget({ target: 'storybook', configuration: 'docs' }, mockContext);
expect(mockHost.executeNgCommand).toHaveBeenCalledWith(
- ['run', 'my-app:storybook', '-c', 'docs'],
+ ['run', 'my-app:storybook', '--configuration=docs'],
{ cwd: '/test' },
);
});
diff --git a/packages/angular/cli/src/commands/mcp/tools/run-target/unit-test-strategy.ts b/packages/angular/cli/src/commands/mcp/tools/run-target/unit-test-strategy.ts
index 77ca5797e71c..1023cdd7956c 100644
--- a/packages/angular/cli/src/commands/mcp/tools/run-target/unit-test-strategy.ts
+++ b/packages/angular/cli/src/commands/mcp/tools/run-target/unit-test-strategy.ts
@@ -28,7 +28,7 @@ export class UnitTestTargetStrategy implements TargetStrategy {
): Promise {
const args = ['test', input.projectName];
if (input.configuration) {
- args.push('-c', input.configuration);
+ args.push(`--configuration=${input.configuration}`);
}
const builder = input.targetDefinition?.builder;
diff --git a/packages/angular/cli/src/commands/mcp/tools/run-target/unit-test-strategy_spec.ts b/packages/angular/cli/src/commands/mcp/tools/run-target/unit-test-strategy_spec.ts
index f1467f0002c9..4e63eed148a0 100644
--- a/packages/angular/cli/src/commands/mcp/tools/run-target/unit-test-strategy_spec.ts
+++ b/packages/angular/cli/src/commands/mcp/tools/run-target/unit-test-strategy_spec.ts
@@ -65,7 +65,15 @@ describe('UnitTestTargetStrategy', () => {
);
expect(mockHost.executeNgCommand).toHaveBeenCalledWith(
- ['test', 'my-app', '-c', 'ci', '--browsers', 'ChromeHeadless', '--watch', 'false'],
+ [
+ 'test',
+ 'my-app',
+ '--configuration=ci',
+ '--browsers',
+ 'ChromeHeadless',
+ '--watch',
+ 'false',
+ ],
{ cwd: '/test' },
);
});
diff --git a/packages/angular/cli/src/commands/update/cli.ts b/packages/angular/cli/src/commands/update/cli.ts
index b886c287f2ec..005df998b501 100644
--- a/packages/angular/cli/src/commands/update/cli.ts
+++ b/packages/angular/cli/src/commands/update/cli.ts
@@ -634,7 +634,7 @@ export default class UpdateCommandModule extends CommandModule/package.json` after installation,
+ * we ensure that any migration collections defined by the package are discovered and queued.
+ */
+export async function resolveFallbackMigrations(
+ workspaceRoot: string,
+ plan: UpdatePlan,
+): Promise<{ package: string; collection: string; from: string; to: string }[]> {
+ const migrations = [...plan.migrationsToRun];
+ const existingMigrationPackages = new Set(migrations.map((m) => m.package));
+
+ for (const [packageName, targetVersion] of plan.packagesToUpdate) {
+ if (existingMigrationPackages.has(packageName)) {
+ continue;
+ }
+
+ const packageJsonPath = findPackageJson(workspaceRoot, packageName);
+ if (packageJsonPath) {
+ try {
+ const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf8'));
+ const ngUpdate = packageJson?.['ng-update'];
+ if (ngUpdate && typeof ngUpdate === 'object' && typeof ngUpdate.migrations === 'string') {
+ const installedVersion = plan.packageInfoMap.get(packageName)?.installed.version;
+ if (installedVersion) {
+ migrations.push({
+ package: packageName,
+ collection: ngUpdate.migrations,
+ from: installedVersion,
+ to: targetVersion,
+ });
+ }
+ }
+ } catch {
+ // Ignore read/parse errors for optional fallback
+ }
+ }
+ }
+
+ return migrations;
+}
diff --git a/packages/angular/cli/src/commands/update/cli_spec.ts b/packages/angular/cli/src/commands/update/cli_spec.ts
new file mode 100644
index 000000000000..bae00d3dba24
--- /dev/null
+++ b/packages/angular/cli/src/commands/update/cli_spec.ts
@@ -0,0 +1,133 @@
+/**
+ * @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 assert from 'node:assert';
+import { mkdir, mkdtemp, rm, writeFile } from 'node:fs/promises';
+import path from 'path';
+import { resolveFallbackMigrations } from './cli';
+import type { PackageVersionInfo, UpdatePlan } from './update-resolver';
+
+describe('resolveFallbackMigrations', () => {
+ let tempRoot: string;
+ let pkgDir: string;
+ beforeEach(async () => {
+ const baseTmpDir = process.env['TEST_TMPDIR'];
+ assert(baseTmpDir, 'TEST_TMPDIR is not set');
+ tempRoot = await mkdtemp(path.join(baseTmpDir, 'angular-cli-update-cli-test-'));
+ pkgDir = path.join(tempRoot, 'node_modules/@company/library-name');
+ await mkdir(pkgDir, { recursive: true });
+ });
+
+ afterEach(async () => {
+ await rm(tempRoot, { recursive: true, force: true });
+ });
+
+ it('discovers migrations from installed package.json when omitted from plan.migrationsToRun', async () => {
+ await writeFile(
+ path.join(pkgDir, 'package.json'),
+ JSON.stringify({
+ name: '@company/library-name',
+ version: '21.2.0-next.1',
+ 'ng-update': {
+ migrations: './schematics/migration.json',
+ },
+ }),
+ 'utf8',
+ );
+
+ const plan: UpdatePlan = {
+ packagesToUpdate: new Map([['@company/library-name', '21.2.0-next.1']]),
+ migrationsToRun: [],
+ packageInfoMap: new Map([
+ [
+ '@company/library-name',
+ {
+ name: '@company/library-name',
+ npmPackageJson: {
+ name: '@company/library-name',
+ versions: ['21.1.0', '21.2.0-next.1'],
+ 'dist-tags': {},
+ },
+ installed: {
+ version: '21.1.0' as unknown as PackageVersionInfo['version'],
+ packageJson: { name: '@company/library-name', version: '21.1.0' },
+ updateMetadata: { packageGroup: {}, requirements: {} },
+ },
+ packageJsonRange: '^21.1.0',
+ },
+ ],
+ ]),
+ registryClient: undefined as unknown as UpdatePlan['registryClient'],
+ };
+
+ const migrations = await resolveFallbackMigrations(tempRoot, plan);
+
+ expect(migrations).toEqual([
+ {
+ package: '@company/library-name',
+ collection: './schematics/migration.json',
+ from: '21.1.0',
+ to: '21.2.0-next.1',
+ },
+ ]);
+ });
+
+ it('does not duplicate migration if package is already in plan.migrationsToRun', async () => {
+ await writeFile(
+ path.join(pkgDir, 'package.json'),
+ JSON.stringify({
+ name: '@company/library-name',
+ version: '21.2.0-next.1',
+ 'ng-update': {
+ migrations: './schematics/migration.json',
+ },
+ }),
+ 'utf8',
+ );
+
+ const plan: UpdatePlan = {
+ packagesToUpdate: new Map([['@company/library-name', '21.2.0-next.1']]),
+ migrationsToRun: [
+ {
+ package: '@company/library-name',
+ collection: './schematics/migration.json',
+ from: '21.1.0',
+ to: '21.2.0-next.1',
+ },
+ ],
+ packageInfoMap: new Map(),
+ registryClient: undefined as unknown as UpdatePlan['registryClient'],
+ };
+
+ const migrations = await resolveFallbackMigrations(tempRoot, plan);
+
+ expect(migrations).toHaveSize(1);
+ });
+
+ it('returns unchanged migrations when package has no ng-update field on disk', async () => {
+ await writeFile(
+ path.join(pkgDir, 'package.json'),
+ JSON.stringify({
+ name: '@company/library-name',
+ version: '21.2.0-next.1',
+ }),
+ 'utf8',
+ );
+
+ const plan: UpdatePlan = {
+ packagesToUpdate: new Map([['@company/library-name', '21.2.0-next.1']]),
+ migrationsToRun: [],
+ packageInfoMap: new Map(),
+ registryClient: undefined as unknown as UpdatePlan['registryClient'],
+ };
+
+ const migrations = await resolveFallbackMigrations(tempRoot, plan);
+
+ expect(migrations).toHaveSize(0);
+ });
+});
diff --git a/packages/angular/cli/src/commands/update/update-resolver.ts b/packages/angular/cli/src/commands/update/update-resolver.ts
index 7b75ab7a9e20..995762d92bc9 100644
--- a/packages/angular/cli/src/commands/update/update-resolver.ts
+++ b/packages/angular/cli/src/commands/update/update-resolver.ts
@@ -942,11 +942,7 @@ export async function resolveUserUpdatePlan(
};
if (packages.size === 0) {
- await Promise.all(
- Array.from(npmDeps.keys()).map(async (depName) => {
- await getOrFetchPackageMetadata(depName);
- }),
- );
+ await Promise.all(Array.from(npmDeps.keys(), (depName) => getOrFetchPackageMetadata(depName)));
} else {
let lastPackagesSize;
do {
@@ -999,12 +995,13 @@ export async function resolveUserUpdatePlan(
} while (packages.size > lastPackagesSize);
}
+ const isListingUpdates = packages.size === 0;
const packageInfoEntries = await Promise.all(
Array.from(npmDeps.keys(), async (depName) => {
const isUpdating = packages.has(depName);
const localPkgJson = getInstalledPackageJson(depName, workspaceRoot);
- if (isUpdating || !localPkgJson) {
+ if (isListingUpdates || isUpdating || !localPkgJson) {
const metadata = await getOrFetchPackageMetadata(depName);
if (metadata) {
const info = await _buildPackageInfo(
diff --git a/packages/angular/cli/src/commands/update/update-resolver_spec.ts b/packages/angular/cli/src/commands/update/update-resolver_spec.ts
index e18cba641016..9ced5829587e 100644
--- a/packages/angular/cli/src/commands/update/update-resolver_spec.ts
+++ b/packages/angular/cli/src/commands/update/update-resolver_spec.ts
@@ -289,6 +289,29 @@ describe('UpdateResolver', () => {
expect(plan.packagesToUpdate.size).toBe(0);
});
+ it('includes registry metadata when listing updates with locked dependency versions in package.json', async () => {
+ createMockWorkspace(
+ {
+ name: 'blah',
+ dependencies: {
+ '@angular-devkit-tests/update-base': '1.0.0',
+ },
+ },
+ {
+ '@angular-devkit-tests/update-base': { version: '1.0.0' },
+ },
+ );
+
+ const plan = await resolvePlan({
+ packages: [],
+ workspaceRoot: tempRoot,
+ });
+
+ const info = plan.packageInfoMap.get('@angular-devkit-tests/update-base');
+ expect(info?.npmPackageJson['dist-tags']?.['latest']).toBe('1.1.0');
+ expect(info?.npmPackageJson.versions).toContain('1.1.0');
+ });
+
it('should not error with yarn 2.0 protocols', async () => {
createMockWorkspace(
{
diff --git a/packages/angular/cli/src/commands/update/utilities/git.ts b/packages/angular/cli/src/commands/update/utilities/git.ts
index 0998c9c61fff..1714846117d9 100644
--- a/packages/angular/cli/src/commands/update/utilities/git.ts
+++ b/packages/angular/cli/src/commands/update/utilities/git.ts
@@ -60,7 +60,7 @@ export function checkCleanGit(root: string): boolean {
return false;
}
}
- } catch {} // eslint-disable-line no-empty
+ } catch {}
return true;
}
diff --git a/packages/angular/cli/src/package-managers/parsers.ts b/packages/angular/cli/src/package-managers/parsers.ts
index 03774a0f2478..9fa915ed9ee9 100644
--- a/packages/angular/cli/src/package-managers/parsers.ts
+++ b/packages/angular/cli/src/package-managers/parsers.ts
@@ -262,13 +262,26 @@ function isValidManifest(obj: unknown): obj is PackageManifest {
return false;
}
- const record = obj as Record;
- const name = record.name;
- const version = record.version;
+ const { name, version } = obj as Record;
return typeof name === 'string' && typeof version === 'string' && valid(version) !== null;
}
+function isValidMetadata(obj: unknown): obj is PackageMetadata {
+ if (typeof obj !== 'object' || obj === null) {
+ return false;
+ }
+
+ const { name, versions, 'dist-tags': distTags } = obj as Record;
+
+ return (
+ typeof name === 'string' &&
+ Array.isArray(versions) &&
+ typeof distTags === 'object' &&
+ distTags !== null
+ );
+}
+
/**
* Parses the output of `npm view` or a compatible command to get a package manifest.
* @param stdout The standard output of the command.
@@ -340,7 +353,28 @@ export function parseNpmLikeMetadata(stdout: string, logger?: Logger): PackageMe
return null;
}
- return JSON.parse(stdout);
+ const result = JSON.parse(stdout);
+
+ // npm 12+ `npm view --json` always returns an array of objects.
+ if (Array.isArray(result)) {
+ for (const item of result) {
+ if (isValidMetadata(item)) {
+ return item;
+ }
+ }
+
+ logger?.debug(' No valid metadata found in the array.');
+
+ return null;
+ }
+
+ if (!isValidMetadata(result)) {
+ logger?.debug(' Parsed JSON is not valid metadata (missing name, versions, or dist-tags).');
+
+ return null;
+ }
+
+ return result;
}
/**
@@ -479,9 +513,16 @@ export function parseNpmLikeError(output: string, logger?: Logger): ErrorInfo |
return null;
}
- // Attempt to parse as JSON first (common for pnpm, modern yarn, bun)
+ // Attempt to parse as JSON first (common for pnpm, modern yarn, bun, npm 12)
try {
- const jsonError = JSON.parse(output);
+ let jsonError = JSON.parse(output);
+ if (Array.isArray(jsonError)) {
+ jsonError = jsonError[0];
+ }
+ if (jsonError && typeof jsonError === 'object' && 'error' in jsonError) {
+ jsonError = jsonError.error;
+ }
+
if (
jsonError &&
typeof jsonError.code === 'string' &&
diff --git a/packages/angular/cli/src/package-managers/parsers_spec.ts b/packages/angular/cli/src/package-managers/parsers_spec.ts
index dff0adfc2726..049aeaec9129 100644
--- a/packages/angular/cli/src/package-managers/parsers_spec.ts
+++ b/packages/angular/cli/src/package-managers/parsers_spec.ts
@@ -12,6 +12,7 @@ import {
parseNpmLikeDependencies,
parseNpmLikeError,
parseNpmLikeManifest,
+ parseNpmLikeMetadata,
parsePnpmReleaseAge,
parseYarnClassicDependencies,
parseYarnClassicError,
@@ -231,6 +232,56 @@ describe('parsers', () => {
const error = parseNpmLikeError('An unexpected error occurred.');
expect(error).toBeNull();
});
+
+ it('should parse a structured JSON error wrapped in an error property (npm 12+ format)', () => {
+ const stdout = JSON.stringify({
+ error: {
+ code: 'E404',
+ summary: 'Not Found',
+ detail: 'Package not found.',
+ },
+ });
+ const error = parseNpmLikeError(stdout);
+ expect(error).toEqual({
+ code: 'E404',
+ summary: 'Not Found',
+ detail: 'Package not found.',
+ });
+ });
+
+ it('should parse a structured JSON error wrapped in an array', () => {
+ const stdout = JSON.stringify([
+ {
+ code: 'E404',
+ summary: 'Not Found',
+ detail: 'Package not found.',
+ },
+ ]);
+ const error = parseNpmLikeError(stdout);
+ expect(error).toEqual({
+ code: 'E404',
+ summary: 'Not Found',
+ detail: 'Package not found.',
+ });
+ });
+
+ it('should parse a structured JSON error wrapped in both an array and an error property', () => {
+ const stdout = JSON.stringify([
+ {
+ error: {
+ code: 'E404',
+ summary: 'Not Found',
+ detail: 'Package not found.',
+ },
+ },
+ ]);
+ const error = parseNpmLikeError(stdout);
+ expect(error).toEqual({
+ code: 'E404',
+ summary: 'Not Found',
+ detail: 'Package not found.',
+ });
+ });
});
describe('parseNpmLikeManifest', () => {
@@ -295,6 +346,66 @@ describe('parsers', () => {
});
});
+ describe('parseNpmLikeMetadata', () => {
+ it('should parse a single metadata object', () => {
+ const stdout = JSON.stringify({
+ name: 'foo',
+ 'dist-tags': { latest: '1.0.0' },
+ versions: ['1.0.0'],
+ });
+ expect(parseNpmLikeMetadata(stdout)).toEqual({
+ name: 'foo',
+ 'dist-tags': { latest: '1.0.0' },
+ versions: ['1.0.0'],
+ });
+ });
+
+ it('should parse metadata from an array (npm 12+ format)', () => {
+ const stdout = JSON.stringify([
+ {
+ name: 'foo',
+ 'dist-tags': { latest: '1.0.0' },
+ versions: ['1.0.0'],
+ },
+ ]);
+ expect(parseNpmLikeMetadata(stdout)).toEqual({
+ name: 'foo',
+ 'dist-tags': { latest: '1.0.0' },
+ versions: ['1.0.0'],
+ });
+ });
+
+ it('should return the first valid metadata from an array', () => {
+ const stdout = JSON.stringify([
+ { name: 'foo' }, // Invalid (missing versions and dist-tags)
+ {
+ name: 'foo',
+ 'dist-tags': { latest: '1.0.0' },
+ versions: ['1.0.0'],
+ },
+ ]);
+ expect(parseNpmLikeMetadata(stdout)).toEqual({
+ name: 'foo',
+ 'dist-tags': { latest: '1.0.0' },
+ versions: ['1.0.0'],
+ });
+ });
+
+ it('should return null if no valid metadata is found in an array', () => {
+ const stdout = JSON.stringify([{ name: 'foo' }, { versions: ['1.0.0'] }]);
+ expect(parseNpmLikeMetadata(stdout)).toBeNull();
+ });
+
+ it('should return null for invalid single object', () => {
+ const stdout = JSON.stringify({ name: 'foo' }); // Missing versions and dist-tags
+ expect(parseNpmLikeMetadata(stdout)).toBeNull();
+ });
+
+ it('should return null for empty stdout', () => {
+ expect(parseNpmLikeMetadata('')).toBeNull();
+ });
+ });
+
describe('parseYarnClassicManifest', () => {
it('should parse a valid manifest', () => {
const stdout = JSON.stringify({
diff --git a/packages/angular/ssr/node/src/response.ts b/packages/angular/ssr/node/src/response.ts
index 56f091deed5f..d3b0cf403090 100644
--- a/packages/angular/ssr/node/src/response.ts
+++ b/packages/angular/ssr/node/src/response.ts
@@ -9,6 +9,22 @@
import type { ServerResponse } from 'node:http';
import type { Http2ServerResponse } from 'node:http2';
+/**
+ * Checks whether a Node.js `ServerResponse` or `Http2ServerResponse` is destroyed, closed, or ended.
+ *
+ * @param destination - The HTTP/1.1 or HTTP/2 server response to check.
+ * @returns `true` if the response or its underlying stream is destroyed, closed, or ended; otherwise `false`.
+ */
+function isResponseDestroyedOrClosed(destination: ServerResponse | Http2ServerResponse): boolean {
+ return (
+ destination.destroyed ||
+ destination.closed ||
+ destination.writableEnded ||
+ ('stream' in destination &&
+ (!destination.stream || destination.stream.destroyed || destination.stream.closed))
+ );
+}
+
/**
* Streams a web-standard `Response` into a Node.js `ServerResponse`
* or `Http2ServerResponse`.
@@ -24,6 +40,10 @@ export async function writeResponseToNodeResponse(
source: Response,
destination: ServerResponse | Http2ServerResponse,
): Promise {
+ if (isResponseDestroyedOrClosed(destination)) {
+ return;
+ }
+
const { status, headers, body } = source;
destination.statusCode = status;
@@ -48,27 +68,52 @@ export async function writeResponseToNodeResponse(
}
if (!body) {
- destination.end();
+ if (!isResponseDestroyedOrClosed(destination)) {
+ destination.end();
+ }
return;
}
- try {
- const reader = body.getReader();
-
- destination.on('close', () => {
- reader.cancel().catch((error) => {
- // eslint-disable-next-line no-console
- console.error(
- `An error occurred while writing the response body for: ${destination.req.url}.`,
- error,
- );
- });
+ let isClosed = isResponseDestroyedOrClosed(destination);
+ const isDestroyedOrClosed = () => isClosed || isResponseDestroyedOrClosed(destination);
+
+ let readerCancelled = false;
+ const reader = body.getReader();
+ const cancelReader = (error?: unknown) => {
+ if (readerCancelled) {
+ return;
+ }
+ readerCancelled = true;
+ isClosed = true;
+ destination.off('close', cancelReader);
+ destination.off('error', cancelReader);
+ reader.cancel(error).catch((err) => {
+ // eslint-disable-next-line no-console
+ console.error(
+ `An error occurred while writing the response body for: ${destination.req.url}.`,
+ err,
+ );
});
+ };
+
+ destination.once('close', cancelReader);
+ destination.once('error', cancelReader);
+ try {
// eslint-disable-next-line no-constant-condition
while (true) {
+ if (isDestroyedOrClosed()) {
+ cancelReader();
+ break;
+ }
+
const { done, value } = await reader.read();
+ if (isDestroyedOrClosed()) {
+ cancelReader();
+ break;
+ }
+
if (done) {
destination.end();
break;
@@ -78,10 +123,39 @@ export async function writeResponseToNodeResponse(
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((resolve) => destination.once('drain', resolve));
+ await new Promise((resolve) => {
+ if (isDestroyedOrClosed()) {
+ resolve();
+
+ return;
+ }
+
+ const onDrain = () => {
+ destination.off('close', onClose);
+ destination.off('error', onClose);
+ resolve();
+ };
+
+ const onClose = () => {
+ destination.off('drain', onDrain);
+ destination.off('close', onClose);
+ destination.off('error', onClose);
+ cancelReader();
+ resolve();
+ };
+
+ destination.once('drain', onDrain);
+ destination.once('close', onClose);
+ destination.once('error', onClose);
+ });
}
}
} catch {
- destination.end('Internal server error.');
+ if (!isDestroyedOrClosed()) {
+ destination.end('Internal server error.');
+ }
+ } finally {
+ destination.off('close', cancelReader);
+ destination.off('error', cancelReader);
}
}
diff --git a/packages/angular/ssr/node/test/response_http1_spec.ts b/packages/angular/ssr/node/test/response_http1_spec.ts
index 8deae2b7e3b4..c7648f03a627 100644
--- a/packages/angular/ssr/node/test/response_http1_spec.ts
+++ b/packages/angular/ssr/node/test/response_http1_spec.ts
@@ -107,4 +107,48 @@ describe('writeResponseToNodeResponse (HTTP/1.1)', () => {
expect(response.headers['set-cookie']).toEqual(cookieValue);
});
+
+ it('should resolve and cancel reader when client disconnects while response is backpressured', async () => {
+ let writePromise!: Promise;
+ let readerCancelled = false;
+ const largeChunk = 'x'.repeat(1024 * 1024 * 4); // 4MB to ensure backpressure
+ const stream = new ReadableStream({
+ start(controller) {
+ controller.enqueue(largeChunk);
+ controller.enqueue(largeChunk);
+ },
+ cancel() {
+ readerCancelled = true;
+ },
+ });
+
+ server.once('request', (_, nodeResponse) => {
+ writePromise = writeResponseToNodeResponse(new Response(stream), nodeResponse);
+ });
+
+ await new Promise((resolve) => {
+ const { port } = server.address() as AddressInfo;
+ const clientRequest = requestCb(
+ {
+ host: 'localhost',
+ port,
+ },
+ (response) => {
+ response.once('data', () => {
+ clientRequest.destroy();
+ resolve();
+ });
+ },
+ );
+
+ clientRequest.on('error', () => {
+ // Expected when destroying the socket
+ });
+
+ clientRequest.end();
+ });
+
+ await writePromise;
+ expect(readerCancelled).toBeTrue();
+ });
});
diff --git a/packages/angular/ssr/node/test/response_http2_spec.ts b/packages/angular/ssr/node/test/response_http2_spec.ts
index c2de8e977561..431bc9de0c38 100644
--- a/packages/angular/ssr/node/test/response_http2_spec.ts
+++ b/packages/angular/ssr/node/test/response_http2_spec.ts
@@ -116,4 +116,48 @@ describe('writeResponseToNodeResponse (HTTP/2)', () => {
expect(resHeaders['set-cookie']).toEqual(cookieValue);
});
+
+ it('should resolve and cancel reader when client disconnects while response is backpressured', async () => {
+ let writePromise!: Promise;
+ let readerCancelled = false;
+ const largeChunk = 'x'.repeat(1024 * 1024); // 1MB to exceed HTTP/2 flow control window
+ const stream = new ReadableStream({
+ start(controller) {
+ controller.enqueue(largeChunk);
+ controller.enqueue(largeChunk);
+ },
+ cancel() {
+ readerCancelled = true;
+ },
+ });
+
+ server.once('request', (_, nodeResponse) => {
+ writePromise = writeResponseToNodeResponse(new Response(stream), nodeResponse);
+ });
+
+ await new Promise((resolve) => {
+ const { port } = server.address() as AddressInfo;
+ const client = connect(`http://localhost:${port}`);
+ const req = client.request({
+ ':path': '/',
+ });
+
+ req.once('response', () => {
+ req.once('data', () => {
+ req.destroy();
+ client.destroy();
+ resolve();
+ });
+ });
+
+ req.on('error', () => {
+ // Expected when destroying/closing the stream
+ });
+
+ req.end();
+ });
+
+ await writePromise;
+ expect(readerCancelled).toBeTrue();
+ });
});
diff --git a/packages/angular/ssr/package.json b/packages/angular/ssr/package.json
index 3ffa71cd9fe5..0a6ecd62b886 100644
--- a/packages/angular/ssr/package.json
+++ b/packages/angular/ssr/package.json
@@ -37,12 +37,12 @@
},
"devDependencies": {
"@angular-devkit/schematics": "workspace:*",
- "@angular/common": "22.1.0-rc.0",
- "@angular/compiler": "22.1.0-rc.0",
- "@angular/core": "22.1.0-rc.0",
- "@angular/platform-browser": "22.1.0-rc.0",
- "@angular/platform-server": "22.1.0-rc.0",
- "@angular/router": "22.1.0-rc.0",
+ "@angular/common": "22.1.1",
+ "@angular/compiler": "22.1.1",
+ "@angular/core": "22.1.1",
+ "@angular/platform-browser": "22.1.1",
+ "@angular/platform-server": "22.1.1",
+ "@angular/router": "22.1.1",
"@schematics/angular": "workspace:*",
"beasties": "0.4.3"
},
diff --git a/packages/angular/ssr/src/app.ts b/packages/angular/ssr/src/app.ts
index a9ca7dd05fe3..3e0f33be8ba7 100644
--- a/packages/angular/ssr/src/app.ts
+++ b/packages/angular/ssr/src/app.ts
@@ -366,10 +366,18 @@ export class AngularServerApp {
// Use a stream to send the response before finishing rendering and inling critical CSS, improving performance via header flushing.
const stream = new ReadableStream({
start: async (controller) => {
- const renderedHtml = await result.content();
- const finalHtml = await this.inlineCriticalCssWithCache(renderedHtml, url);
- controller.enqueue(finalHtml);
- controller.close();
+ try {
+ const renderedHtml = await result.content();
+ const finalHtml = await this.inlineCriticalCssWithCache(renderedHtml, url);
+ controller.enqueue(finalHtml);
+ controller.close();
+ } catch (error) {
+ result.destroy();
+ controller.error(error);
+ }
+ },
+ cancel: () => {
+ result.destroy();
},
});
diff --git a/packages/angular/ssr/src/utils/ng.ts b/packages/angular/ssr/src/utils/ng.ts
index 55d054bd2387..4ae3a7f4ed0f 100644
--- a/packages/angular/ssr/src/utils/ng.ts
+++ b/packages/angular/ssr/src/utils/ng.ts
@@ -34,8 +34,7 @@ import { addTrailingSlash, joinUrlParts, stripIndexHtmlFromURL, stripTrailingSla
* - A function that returns a `Promise`, which resolves with the root application reference.
*/
export type AngularBootstrap =
- | Type
- | ((context: BootstrapContext) => Promise);
+ Type | ((context: BootstrapContext) => Promise);
/**
* Renders an Angular application or module to an HTML string.
@@ -60,7 +59,12 @@ export async function renderAngular(
serverContext: string,
): Promise<
| { hasNavigationError: true }
- | { hasNavigationError: boolean; redirectTo?: string; content: () => Promise }
+ | {
+ hasNavigationError: boolean;
+ redirectTo?: string;
+ content: () => Promise;
+ destroy: () => void;
+ }
> {
// A request to `http://www.example.com/page/index.html` will render the Angular route corresponding to `http://www.example.com/page`.
const urlToRender = stripIndexHtmlFromURL(url);
@@ -134,6 +138,7 @@ export async function renderAngular(
}
return {
+ destroy: () => void asyncDestroyPlatform(platformRef),
hasNavigationError,
redirectTo,
content: () =>
@@ -177,6 +182,10 @@ export function isNgModule(value: AngularBootstrap): value is Type {
* @param platformRef - The platform reference to be destroyed.
*/
function asyncDestroyPlatform(platformRef: PlatformRef): Promise {
+ if (platformRef.destroyed) {
+ return Promise.resolve();
+ }
+
return new Promise((resolve) => {
setTimeout(() => {
if (!platformRef.destroyed) {
diff --git a/packages/angular/ssr/src/utils/validation.ts b/packages/angular/ssr/src/utils/validation.ts
index 714042b52f76..73e6c712d80b 100644
--- a/packages/angular/ssr/src/utils/validation.ts
+++ b/packages/angular/ssr/src/utils/validation.ts
@@ -88,7 +88,7 @@ export function validateUrl(url: URL, allowedHosts: ReadonlySet): void {
/**
* Sanitizes the proxy headers of a request by removing unallowed `X-Forwarded-*` headers.
- * If no headers need to be removed, the original request is returned without cloning.
+ * If no headers need to be removed, the original request is returned unchanged.
*
* @param request - The incoming `Request` object to sanitize.
* @param trustProxyHeaders - A set of allowed proxy headers.
@@ -117,8 +117,7 @@ export function sanitizeRequestHeaders(
}
return headersDeleted
- ? new Request(request.clone(), {
- signal: request.signal,
+ ? new Request(request, {
headers,
})
: request;
diff --git a/packages/angular/ssr/test/app_spec.ts b/packages/angular/ssr/test/app_spec.ts
index de4b1bcb988e..1e3d40d3ede8 100644
--- a/packages/angular/ssr/test/app_spec.ts
+++ b/packages/angular/ssr/test/app_spec.ts
@@ -14,6 +14,7 @@ import '@angular/compiler';
import { APP_BASE_HREF } from '@angular/common';
import { Component, PlatformRef, REQUEST, RESPONSE_INIT, inject } from '@angular/core';
import { ActivatedRoute, CanActivateFn, Router } from '@angular/router';
+import { setTimeout } from 'node:timers/promises';
import { AngularServerApp } from '../src/app';
import { RenderMode } from '../src/routes/route-config';
import { setAngularAppTestingManifest } from './testing-utils';
@@ -365,6 +366,16 @@ describe('AngularServerApp', () => {
expect(await response?.text()).toContain('Home works');
});
+ it('should destroy the platform when the response stream is cancelled', async () => {
+ const destroySpy = spyOn(PlatformRef.prototype, 'destroy').and.callThrough();
+ const response = await app.handle(new Request('http://localhost/home'));
+ expect(response?.body).toBeInstanceOf(ReadableStream);
+ await response?.body?.cancel();
+ // Wait for the macrotask queue to clear since destroy is called asynchronously
+ await setTimeout(0);
+ expect(destroySpy).toHaveBeenCalled();
+ });
+
describe('APP_BASE_HREF / X-Forwarded-Prefix', () => {
const headers = new Headers({ 'X-Forwarded-Prefix': '/base/' });
diff --git a/packages/angular/ssr/test/utils/validation_spec.ts b/packages/angular/ssr/test/utils/validation_spec.ts
index 0f44f8067aeb..c9986a9bd73a 100644
--- a/packages/angular/ssr/test/utils/validation_spec.ts
+++ b/packages/angular/ssr/test/utils/validation_spec.ts
@@ -493,5 +493,40 @@ describe('Validation Utils', () => {
expect(secured.headers.get('host')).toBe('example.com');
expect(secured.headers.get('forwarded')).toBe('host=proxy.com;proto=https');
});
+
+ it('should transfer request body without teeing when removing unallowed headers', async () => {
+ const req = new Request('http://example.com', {
+ method: 'POST',
+ body: 'test body',
+ headers: {
+ 'host': 'example.com',
+ 'x-forwarded-host': 'evil.com',
+ },
+ });
+
+ const secured = sanitizeRequestHeaders(req, normalizeTrustProxyHeaders(undefined));
+
+ // In the Fetch specification, calling `request.clone()` tees the body stream and leaves
+ // `req.bodyUsed` as `false`. Passing `req` directly to `new Request(req, ...)` transfers the
+ // underlying stream without teeing, immediately marking `req.bodyUsed` as `true`.
+ expect(req.bodyUsed).toBeTrue();
+ expect(await secured.text()).toBe('test body');
+ });
+
+ it('should preserve abort signal when removing unallowed headers', () => {
+ const controller = new AbortController();
+ const req = new Request('http://example.com', {
+ signal: controller.signal,
+ headers: {
+ 'host': 'example.com',
+ 'x-forwarded-host': 'evil.com',
+ },
+ });
+
+ const secured = sanitizeRequestHeaders(req, normalizeTrustProxyHeaders(undefined));
+
+ controller.abort();
+ expect(secured.signal.aborted).toBeTrue();
+ });
});
});
diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json
index 73dc6012ad22..758a5fb5f7bd 100644
--- a/packages/angular_devkit/build_angular/package.json
+++ b/packages/angular_devkit/build_angular/package.json
@@ -28,7 +28,7 @@
"browserslist": "^4.26.0",
"copy-webpack-plugin": "14.0.0",
"css-loader": "7.1.4",
- "esbuild-wasm": "0.28.1",
+ "esbuild-wasm": "0.28.2",
"http-proxy-middleware": "4.2.0",
"istanbul-lib-instrument": "6.0.3",
"jsonc-parser": "3.3.1",
@@ -42,7 +42,7 @@
"ora": "9.4.1",
"picomatch": "4.0.5",
"piscina": "5.2.0",
- "postcss": "8.5.19",
+ "postcss": "8.5.25",
"postcss-loader": "8.2.1",
"resolve-url-loader": "5.0.0",
"rxjs": "7.8.2",
@@ -54,19 +54,19 @@
"terser": "5.49.0",
"tinyglobby": "0.2.17",
"tslib": "2.8.1",
- "webpack": "5.108.4",
+ "webpack": "5.109.2",
"webpack-dev-middleware": "8.0.3",
"webpack-dev-server": "5.2.6",
"webpack-merge": "6.0.1",
"webpack-subresource-integrity": "5.1.0"
},
"optionalDependencies": {
- "esbuild": "0.28.1"
+ "esbuild": "0.28.2"
},
"devDependencies": {
"@angular/ssr": "workspace:*",
"browser-sync": "3.0.4",
- "ng-packagr": "22.1.0-next.3",
+ "ng-packagr": "22.1.1",
"undici": "8.7.0"
},
"peerDependencies": {
diff --git a/packages/angular_devkit/build_webpack/package.json b/packages/angular_devkit/build_webpack/package.json
index 67cebb40bf7c..33fc2ad137b2 100644
--- a/packages/angular_devkit/build_webpack/package.json
+++ b/packages/angular_devkit/build_webpack/package.json
@@ -22,7 +22,7 @@
"devDependencies": {
"@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER",
"@ngtools/webpack": "workspace:0.0.0-PLACEHOLDER",
- "webpack": "5.108.4",
+ "webpack": "5.109.2",
"webpack-dev-server": "5.2.6"
},
"peerDependencies": {
diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json
index 52995d53d86b..5943aa5d1659 100644
--- a/packages/ngtools/webpack/package.json
+++ b/packages/ngtools/webpack/package.json
@@ -17,9 +17,9 @@
},
"devDependencies": {
"@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER",
- "@angular/compiler": "22.1.0-rc.0",
- "@angular/compiler-cli": "22.1.0-rc.0",
+ "@angular/compiler": "22.1.1",
+ "@angular/compiler-cli": "22.1.1",
"typescript": "6.0.3",
- "webpack": "5.108.4"
+ "webpack": "5.109.2"
}
}
diff --git a/packages/schematics/angular/BUILD.bazel b/packages/schematics/angular/BUILD.bazel
index b4fc4e885c30..34d730f2aa6d 100644
--- a/packages/schematics/angular/BUILD.bazel
+++ b/packages/schematics/angular/BUILD.bazel
@@ -3,7 +3,6 @@
# 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:copy_file.bzl", "copy_file")
load("@npm//:defs.bzl", "npm_link_all_packages")
load("//tools:defaults.bzl", "copy_to_bin", "jasmine_test", "npm_package", "ts_project")
load("//tools:ts_json_schema.bzl", "ts_json_schema")
@@ -46,10 +45,11 @@ copy_to_bin(
srcs = glob(["**/schema.json"]),
)
-copy_file(
+genrule(
name = "angular_best_practices",
- src = "//:node_modules/@angular/core/resources/best-practices.md",
- out = "ai-config/files/__bestPracticesName__.template",
+ srcs = ["//:node_modules/@angular/core/dir"],
+ outs = ["ai-config/files/__bestPracticesName__.template"],
+ cmd = "cp $(execpath //:node_modules/@angular/core/dir)/resources/best-practices.md $@",
)
RUNTIME_ASSETS = [
diff --git a/packages/schematics/angular/ai-config/index.ts b/packages/schematics/angular/ai-config/index.ts
index 7dab2fccbdef..6da0214f5f36 100644
--- a/packages/schematics/angular/ai-config/index.ts
+++ b/packages/schematics/angular/ai-config/index.ts
@@ -19,7 +19,11 @@ const AGENTS_MD_CFG: ContextFileInfo = {
const AI_TOOLS: { [key in Exclude]: ContextFileInfo[] } = {
['claude-code']: [
- AGENTS_MD_CFG,
+ {
+ type: ContextFileType.BestPracticesMd,
+ name: 'CLAUDE.md',
+ directory: '.',
+ },
{
type: ContextFileType.McpConfig,
name: '.mcp.json',
diff --git a/packages/schematics/angular/ai-config/index_spec.ts b/packages/schematics/angular/ai-config/index_spec.ts
index f4408e96444c..b2eae216246f 100644
--- a/packages/schematics/angular/ai-config/index_spec.ts
+++ b/packages/schematics/angular/ai-config/index_spec.ts
@@ -32,9 +32,9 @@ describe('AI Config Schematic', () => {
workspaceTree = await schematicRunner.runSchematic('workspace', workspaceOptions);
});
- it('should create Angular MCP server config and AGENTS.md for Claude Code', async () => {
+ it('should create Angular MCP server config and CLAUDE.md for Claude Code', async () => {
const tree = await runAiConfigSchematic([ConfigTool.ClaudeCode]);
- expect(tree.exists('AGENTS.md')).toBeTruthy();
+ expect(tree.exists('CLAUDE.md')).toBeTruthy();
expect(tree.exists('.mcp.json')).toBeTruthy();
});
@@ -89,7 +89,7 @@ describe('AI Config Schematic', () => {
it('should omit best practices creation, if the file already exists', async () => {
const customContent = 'custom user content';
- workspaceTree.create('AGENTS.md', customContent);
+ workspaceTree.create('CLAUDE.md', customContent);
const messages: string[] = [];
const loggerSubscription = schematicRunner.logger.subscribe((x) => messages.push(x.message));
@@ -97,9 +97,9 @@ describe('AI Config Schematic', () => {
try {
const tree = await runAiConfigSchematic([ConfigTool.ClaudeCode]);
- expect(tree.readContent('AGENTS.md')).toBe(customContent);
+ expect(tree.readContent('CLAUDE.md')).toBe(customContent);
expect(messages).toContain(
- `Skipping configuration file for 'ClaudeCode' at './AGENTS.md' because it already exists.\n` +
+ `Skipping configuration file for 'ClaudeCode' at './CLAUDE.md' because it already exists.\n` +
'This is to prevent overwriting a potentially customized file. ' +
'If you want to regenerate it with Angular recommended defaults, please delete the existing file and re-run the command.\n' +
'You can review the latest recommendations at https://angular.dev/ai/develop-with-ai.\n',
diff --git a/packages/schematics/angular/ai-config/schema.json b/packages/schematics/angular/ai-config/schema.json
index 4cb63468ae53..66818095d68d 100644
--- a/packages/schematics/angular/ai-config/schema.json
+++ b/packages/schematics/angular/ai-config/schema.json
@@ -4,7 +4,7 @@
"title": "Angular AI Config File Options Schema",
"type": "object",
"additionalProperties": false,
- "description": "Generates AI configuration files for Angular projects. This schematic creates AGENTS.md file and Angular MCP server configuration, improving the quality of AI-generated code and suggestions.",
+ "description": "Generates AI configuration files for Angular projects. This schematic creates instruction files (e.g. AGENTS.md, CLAUDE.md) and Angular MCP server configuration, improving the quality of AI-generated code and suggestions.",
"properties": {
"tool": {
"type": "array",
@@ -20,7 +20,7 @@
},
{
"value": "claude-code",
- "label": "Claude Code [ `AGENTS.md` + Angular MCP server config ]"
+ "label": "Claude Code [ `CLAUDE.md` + Angular MCP server config ]"
},
{
"value": "cursor",
@@ -40,7 +40,7 @@
}
]
},
- "description": "Specifies which AI tools to generate configuration files (AGENTS.md, MCP server config) for.",
+ "description": "Specifies which AI tools to generate configuration files (AGENTS.md, CLAUDE.md, MCP server config) for.",
"items": {
"type": "string",
"enum": ["none", "claude-code", "cursor", "gemini-cli", "open-ai-codex", "vscode"]
diff --git a/packages/schematics/angular/guard/index.ts b/packages/schematics/angular/guard/index.ts
index 467fe6198935..8e8d5c75610c 100644
--- a/packages/schematics/angular/guard/index.ts
+++ b/packages/schematics/angular/guard/index.ts
@@ -34,7 +34,7 @@ export default function (options: GuardOptions): Rule {
const routerNamedImports: string[] = [...options.implements, 'MaybeAsync', 'GuardResult'];
if (options.implements.includes(GuardInterface.CanMatch)) {
- routerNamedImports.push('Route', 'subPath');
+ routerNamedImports.push('Route', 'UrlSegment');
if (options.implements.length > 1) {
routerNamedImports.push(...commonRouterNameImports);
diff --git a/packages/schematics/angular/guard/index_spec.ts b/packages/schematics/angular/guard/index_spec.ts
index 3b0c0da2059b..79689f8c71f8 100644
--- a/packages/schematics/angular/guard/index_spec.ts
+++ b/packages/schematics/angular/guard/index_spec.ts
@@ -165,7 +165,7 @@ describe('Guard Schematic', () => {
const options = { ...defaultOptions, implements: implementationOptions, functional: false };
const tree = await schematicRunner.runSchematic('guard', options, appTree);
const fileString = tree.readContent('/projects/bar/src/app/foo-guard.ts');
- const expectedImports = `import { CanMatch, GuardResult, MaybeAsync, Route, subPath } from '@angular/router';`;
+ const expectedImports = `import { CanMatch, GuardResult, MaybeAsync, Route, UrlSegment } from '@angular/router';`;
expect(fileString).toContain(expectedImports);
});
@@ -198,7 +198,7 @@ describe('Guard Schematic', () => {
const fileString = tree.readContent('/projects/bar/src/app/foo-guard.ts');
const expectedImports =
`import { ActivatedRouteSnapshot, CanActivate, CanActivateChild, CanMatch, GuardResult, ` +
- `MaybeAsync, Route, RouterStateSnapshot, subPath } from '@angular/router';`;
+ `MaybeAsync, Route, RouterStateSnapshot, UrlSegment } from '@angular/router';`;
expect(fileString).toContain(expectedImports);
});
diff --git a/packages/schematics/angular/ng-new/index_spec.ts b/packages/schematics/angular/ng-new/index_spec.ts
index a9a6b4a1b6b2..8023c9b08531 100644
--- a/packages/schematics/angular/ng-new/index_spec.ts
+++ b/packages/schematics/angular/ng-new/index_spec.ts
@@ -109,7 +109,7 @@ describe('Ng New Schematic', () => {
const tree = await schematicRunner.runSchematic('ng-new', options);
const files = tree.files;
- expect(files).toContain('/bar/AGENTS.md');
+ expect(files).toContain('/bar/CLAUDE.md');
expect(files).toContain('/bar/.mcp.json');
expect(files).toContain('/bar/.gemini/GEMINI.md');
expect(files).toContain('/bar/.gemini/settings.json');
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a4a7dbe23065..153bc3cb9309 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -14,8 +14,8 @@ importers:
.:
dependencies:
'@angular/compiler-cli':
- specifier: 22.1.0-rc.0
- version: 22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(typescript@6.0.3)
+ specifier: 22.1.1
+ version: 22.1.1(@angular/compiler@22.1.1)(typescript@6.0.3)
typescript:
specifier: 6.0.3
version: 6.0.3
@@ -26,44 +26,44 @@ importers:
built: true
devDependencies:
'@angular/animations':
- specifier: 22.1.0-rc.0
- version: 22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))
+ specifier: 22.1.1
+ version: 22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))
'@angular/cdk':
- specifier: 22.1.0-next.4
- version: 22.1.0-next.4(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0-rc.0(@angular/animations@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)
+ specifier: 22.1.1
+ version: 22.1.1(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.1(@angular/animations@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)
'@angular/common':
- specifier: 22.1.0-rc.0
- version: 22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
+ specifier: 22.1.1
+ version: 22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
'@angular/compiler':
- specifier: 22.1.0-rc.0
- version: 22.1.0-rc.0
+ specifier: 22.1.1
+ version: 22.1.1
'@angular/core':
- specifier: 22.1.0-rc.0
- version: 22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)
+ specifier: 22.1.1
+ version: 22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)
'@angular/forms':
- specifier: 22.1.0-rc.0
- version: 22.1.0-rc.0(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0-rc.0(@angular/animations@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)
+ specifier: 22.1.1
+ version: 22.1.1(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.1(@angular/animations@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)
'@angular/localize':
- specifier: 22.1.0-rc.0
- version: 22.1.0-rc.0(@angular/compiler-cli@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(typescript@6.0.3))(@angular/compiler@22.1.0-rc.0)
+ specifier: 22.1.1
+ version: 22.1.1(@angular/compiler-cli@22.1.1(@angular/compiler@22.1.1)(typescript@6.0.3))(@angular/compiler@22.1.1)
'@angular/material':
- specifier: 22.1.0-next.4
- version: 22.1.0-next.4(4ff7080c77e2fe320ac430b9737f79ee)
+ specifier: 22.1.1
+ version: 22.1.1(b9b71bdc0d04c1d399a4036adad75253)
'@angular/ng-dev':
- specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#7a67d5221a9efec2b69b102759d04223a3fc8552
- version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/7a67d5221a9efec2b69b102759d04223a3fc8552(@modelcontextprotocol/sdk@1.29.0(supports-color@10.2.2)(zod@4.4.3))
+ specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#c71d9b6af7560faa3d002534d416a8045111adae
+ version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/c71d9b6af7560faa3d002534d416a8045111adae(@modelcontextprotocol/sdk@1.30.0(supports-color@11.0.0)(zod@4.4.3))
'@angular/platform-browser':
- specifier: 22.1.0-rc.0
- version: 22.1.0-rc.0(@angular/animations@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))
+ specifier: 22.1.1
+ version: 22.1.1(@angular/animations@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))
'@angular/platform-server':
- specifier: 22.1.0-rc.0
- version: 22.1.0-rc.0(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.1.0-rc.0)(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0-rc.0(@angular/animations@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)
+ specifier: 22.1.1
+ version: 22.1.1(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.1.1)(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.1(@angular/animations@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)
'@angular/router':
- specifier: 22.1.0-rc.0
- version: 22.1.0-rc.0(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0-rc.0(@angular/animations@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)
+ specifier: 22.1.1
+ version: 22.1.1(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.1(@angular/animations@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)
'@angular/service-worker':
- specifier: 22.1.0-rc.0
- version: 22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
+ specifier: 22.1.1
+ version: 22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
'@babel/core':
specifier: 8.0.1
version: 8.0.1
@@ -78,13 +78,13 @@ importers:
version: 0.28.0
'@eslint/compat':
specifier: 2.1.0
- version: 2.1.0(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))
+ version: 2.1.0(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))
'@eslint/eslintrc':
specifier: 3.3.6
- version: 3.3.6(supports-color@10.2.2)
+ version: 3.3.6(supports-color@11.0.0)
'@eslint/js':
specifier: 10.0.1
- version: 10.0.1(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))
+ version: 10.0.1(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))
'@rollup/plugin-alias':
specifier: ^6.0.0
version: 6.0.0(rollup@4.62.2)
@@ -102,10 +102,10 @@ importers:
version: 4.62.2
'@stylistic/eslint-plugin':
specifier: ^5.0.0
- version: 5.10.0(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))
+ version: 5.10.0(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))
'@tony.ganchev/eslint-plugin-header':
specifier: ~3.4.0
- version: 3.4.4(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))
+ version: 3.4.4(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))
'@types/babel__core':
specifier: 7.20.5
version: 7.20.5
@@ -129,16 +129,16 @@ importers:
version: 2.5.3
'@types/karma':
specifier: ^6.3.0
- version: 6.3.9(supports-color@10.2.2)
+ version: 6.3.9(supports-color@11.0.0)
'@types/less':
specifier: ^3.0.3
version: 3.0.8
'@types/loader-utils':
specifier: ^3.0.0
- version: 3.0.0(esbuild@0.28.1)
+ version: 3.0.0(esbuild@0.28.2)
'@types/lodash':
specifier: ^4.17.0
- version: 4.17.24
+ version: 4.17.25
'@types/node':
specifier: ^22.12.0
version: 22.20.1
@@ -153,7 +153,7 @@ importers:
version: 2.0.7
'@types/semver':
specifier: ^7.3.12
- version: 7.7.1
+ version: 7.8.0
'@types/watchpack':
specifier: ^2.4.4
version: 2.4.5
@@ -165,10 +165,10 @@ importers:
version: 21.0.3
'@typescript-eslint/eslint-plugin':
specifier: 8.64.0
- version: 8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)
+ version: 8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0)(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0)(typescript@6.0.3)
'@typescript-eslint/parser':
specifier: 8.64.0
- version: 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)
+ version: 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0)(typescript@6.0.3)
ajv:
specifier: 8.20.0
version: 8.20.0
@@ -176,23 +176,23 @@ importers:
specifier: 6.0.3
version: 6.0.3
esbuild:
- specifier: 0.28.1
- version: 0.28.1
+ specifier: 0.28.2
+ version: 0.28.2
esbuild-wasm:
- specifier: 0.28.1
- version: 0.28.1
+ specifier: 0.28.2
+ version: 0.28.2
eslint:
specifier: 10.7.0
- version: 10.7.0(jiti@2.7.0)(supports-color@10.2.2)
+ version: 10.7.0(jiti@2.7.0)(supports-color@11.0.0)
eslint-config-prettier:
specifier: 10.1.8
- version: 10.1.8(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))
+ version: 10.1.8(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))
eslint-plugin-import:
specifier: 2.32.0
- version: 2.32.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)
+ version: 2.32.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0)(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0)
express:
specifier: 5.2.1
- version: 5.2.1(supports-color@10.2.2)
+ version: 5.2.1(supports-color@11.0.0)
fast-glob:
specifier: 3.3.3
version: 3.3.3
@@ -201,10 +201,10 @@ importers:
version: 17.7.0
http-proxy:
specifier: ^1.18.1
- version: 1.18.1(debug@4.4.3(supports-color@10.2.2))
+ version: 1.18.1(debug@4.4.3(supports-color@11.0.0))
http-proxy-middleware:
specifier: 4.2.0
- version: 4.2.0(supports-color@10.2.2)
+ version: 4.2.0(supports-color@11.0.0)
husky:
specifier: 9.1.7
version: 9.1.7
@@ -222,19 +222,19 @@ importers:
version: 7.0.0
karma:
specifier: ~6.4.0
- version: 6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(utf-8-validate@6.0.6)
+ version: 6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@11.0.0))(supports-color@11.0.0)(utf-8-validate@6.0.6)
karma-chrome-launcher:
specifier: ~3.2.0
version: 3.2.0
karma-coverage:
specifier: ~2.2.0
- version: 2.2.1(supports-color@10.2.2)
+ version: 2.2.1(supports-color@11.0.0)
karma-jasmine:
specifier: ~5.1.0
- version: 5.1.0(karma@6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(utf-8-validate@6.0.6))
+ version: 5.1.0(karma@6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@11.0.0))(supports-color@11.0.0)(utf-8-validate@6.0.6))
karma-jasmine-html-reporter:
specifier: ~2.2.0
- version: 2.2.0(jasmine-core@6.3.0)(karma-jasmine@5.1.0(karma@6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(utf-8-validate@6.0.6)))(karma@6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(utf-8-validate@6.0.6))
+ version: 2.2.0(jasmine-core@6.3.0)(karma-jasmine@5.1.0(karma@6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@11.0.0))(supports-color@11.0.0)(utf-8-validate@6.0.6)))(karma@6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@11.0.0))(supports-color@11.0.0)(utf-8-validate@6.0.6))
karma-source-map-support:
specifier: 1.4.0
version: 1.4.0
@@ -282,10 +282,10 @@ importers:
version: 1.10.0
verdaccio:
specifier: 6.8.0
- version: 6.8.0(encoding@0.1.13)(supports-color@10.2.2)
+ version: 6.8.0(encoding@0.1.13)(supports-color@11.0.0)
verdaccio-auth-memory:
specifier: ^13.0.0
- version: 13.0.3(supports-color@10.2.2)
+ version: 13.1.1(supports-color@11.0.0)
zone.js:
specifier: ^0.16.0
version: 0.16.2
@@ -309,22 +309,22 @@ importers:
version: 4.1.10(vitest@4.1.10)
browser-sync:
specifier: 3.0.4
- version: 3.0.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(utf-8-validate@6.0.6)
+ version: 3.0.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@11.0.0))(supports-color@11.0.0)(utf-8-validate@6.0.6)
istanbul-lib-instrument:
specifier: 6.0.3
- version: 6.0.3(supports-color@10.2.2)
+ version: 6.0.3(supports-color@11.0.0)
jsdom:
specifier: 29.1.1
version: 29.1.1
ng-packagr:
- specifier: 22.1.0-next.3
- version: 22.1.0-next.3(@angular/compiler-cli@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3)
+ specifier: 22.1.1
+ version: 22.1.1(@angular/compiler-cli@22.1.1(@angular/compiler@22.1.1)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3)
rxjs:
specifier: 7.8.2
version: 7.8.2
vitest:
specifier: 4.1.10
- version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/coverage-v8@4.1.10)(esbuild@0.28.1)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)
+ version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.20.1)(@vitest/coverage-v8@4.1.10)(esbuild@0.28.2)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.7)(yaml@2.9.0)
packages/angular/build:
dependencies:
@@ -345,22 +345,22 @@ importers:
version: 7.24.7
'@inquirer/confirm':
specifier: 6.1.1
- version: 6.1.1(@types/node@24.13.3)
+ version: 6.1.1(@types/node@22.20.1)
'@vitejs/plugin-basic-ssl':
specifier: 2.3.0
- version: 2.3.0(vite@8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))
+ version: 2.3.0(vite@8.1.5(@types/node@22.20.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.7)(yaml@2.9.0))
beasties:
specifier: 0.4.3
version: 0.4.3
browserslist:
specifier: ^4.26.0
- version: 4.28.7
+ version: 4.28.8
esbuild:
- specifier: 0.28.1
- version: 0.28.1
+ specifier: 0.28.2
+ version: 0.28.2
https-proxy-agent:
specifier: 9.1.0
- version: 9.1.0(supports-color@10.2.2)
+ version: 9.1.0(supports-color@11.0.0)
jsonc-parser:
specifier: 3.3.1
version: 3.3.1
@@ -374,8 +374,8 @@ importers:
specifier: 2.0.1
version: 2.0.1
oxc-parser:
- specifier: 0.140.0
- version: 0.140.0
+ specifier: 0.142.0
+ version: 0.142.0
parse5-html-rewriting-stream:
specifier: 8.0.1
version: 8.0.1
@@ -402,7 +402,7 @@ importers:
version: 0.2.17
vite:
specifier: 8.1.5
- version: 8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)
+ version: 8.1.5(@types/node@22.20.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.7)(yaml@2.9.0)
watchpack:
specifier: 2.5.2
version: 2.5.2
@@ -418,7 +418,7 @@ importers:
version: 0.140.0
istanbul-lib-instrument:
specifier: 6.0.3
- version: 6.0.3(supports-color@10.2.2)
+ version: 6.0.3(supports-color@11.0.0)
jsdom:
specifier: 29.1.1
version: 29.1.1
@@ -426,11 +426,11 @@ importers:
specifier: 4.6.7
version: 4.6.7
ng-packagr:
- specifier: 22.1.0-next.3
- version: 22.1.0-next.3(@angular/compiler-cli@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3)
+ specifier: 22.1.1
+ version: 22.1.1(@angular/compiler-cli@22.1.1(@angular/compiler@22.1.1)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3)
postcss:
- specifier: 8.5.19
- version: 8.5.19
+ specifier: 8.5.25
+ version: 8.5.25
rollup:
specifier: 4.62.2
version: 4.62.2
@@ -439,7 +439,7 @@ importers:
version: 7.8.2
vitest:
specifier: 4.1.10
- version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/coverage-v8@4.1.10)(esbuild@0.28.1)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)
+ version: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.20.1)(@vitest/coverage-v8@4.1.10)(esbuild@0.28.2)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.7)(yaml@2.9.0)
optionalDependencies:
lmdb:
specifier: 3.5.6
@@ -458,13 +458,13 @@ importers:
version: link:../../angular_devkit/schematics
'@inquirer/prompts':
specifier: 8.5.2
- version: 8.5.2(@types/node@24.13.3)
+ version: 8.5.2(@types/node@22.20.1)
'@listr2/prompt-adapter-inquirer':
specifier: 4.2.4
- version: 4.2.4(@inquirer/prompts@8.5.2(@types/node@24.13.3))(@types/node@24.13.3)(listr2@10.2.2)
+ version: 4.2.4(@inquirer/prompts@8.5.2(@types/node@22.20.1))(@types/node@22.20.1)(listr2@10.2.2)
'@modelcontextprotocol/sdk':
- specifier: 1.29.0
- version: 1.29.0(supports-color@10.2.2)(zod@4.4.3)
+ specifier: 1.30.0
+ version: 1.30.0(supports-color@11.0.0)(zod@4.4.3)
'@schematics/angular':
specifier: workspace:0.0.0-PLACEHOLDER
version: link:../../schematics/angular
@@ -484,8 +484,8 @@ importers:
specifier: 7.8.5
version: 7.8.5
yargs:
- specifier: 18.0.0
- version: 18.0.0
+ specifier: 18.1.0
+ version: 18.1.0
zod:
specifier: 4.4.3
version: 4.4.3
@@ -512,23 +512,23 @@ importers:
specifier: workspace:*
version: link:../../angular_devkit/schematics
'@angular/common':
- specifier: 22.1.0-rc.0
- version: 22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
+ specifier: 22.1.1
+ version: 22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
'@angular/compiler':
- specifier: 22.1.0-rc.0
- version: 22.1.0-rc.0
+ specifier: 22.1.1
+ version: 22.1.1
'@angular/core':
- specifier: 22.1.0-rc.0
- version: 22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)
+ specifier: 22.1.1
+ version: 22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)
'@angular/platform-browser':
- specifier: 22.1.0-rc.0
- version: 22.1.0-rc.0(@angular/animations@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))
+ specifier: 22.1.1
+ version: 22.1.1(@angular/animations@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))
'@angular/platform-server':
- specifier: 22.1.0-rc.0
- version: 22.1.0-rc.0(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.1.0-rc.0)(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0-rc.0(@angular/animations@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)
+ specifier: 22.1.1
+ version: 22.1.1(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.1.1)(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.1(@angular/animations@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)
'@angular/router':
- specifier: 22.1.0-rc.0
- version: 22.1.0-rc.0(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0-rc.0(@angular/animations@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)
+ specifier: 22.1.1
+ version: 22.1.1(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.1(@angular/animations@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)
'@schematics/angular':
specifier: workspace:*
version: link:../../schematics/angular
@@ -600,28 +600,28 @@ importers:
version: 4.1.3
autoprefixer:
specifier: 10.5.4
- version: 10.5.4(postcss@8.5.19)
+ version: 10.5.4(postcss@8.5.25)
babel-loader:
specifier: 10.1.1
- version: 10.1.1(@babel/core@8.0.1)(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3))
+ version: 10.1.1(@babel/core@8.0.1)(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))
browserslist:
specifier: ^4.26.0
- version: 4.28.7
+ version: 4.28.8
copy-webpack-plugin:
specifier: 14.0.0
- version: 14.0.0(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3))
+ version: 14.0.0(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))
css-loader:
specifier: 7.1.4
- version: 7.1.4(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3))
+ version: 7.1.4(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))
esbuild-wasm:
- specifier: 0.28.1
- version: 0.28.1
+ specifier: 0.28.2
+ version: 0.28.2
http-proxy-middleware:
specifier: 4.2.0
- version: 4.2.0(supports-color@10.2.2)
+ version: 4.2.0(supports-color@11.0.0)
istanbul-lib-instrument:
specifier: 6.0.3
- version: 6.0.3(supports-color@10.2.2)
+ version: 6.0.3(supports-color@11.0.0)
jsonc-parser:
specifier: 3.3.1
version: 3.3.1
@@ -633,16 +633,16 @@ importers:
version: 4.6.7
less-loader:
specifier: 13.0.0
- version: 13.0.0(less@4.6.7)(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3))
+ version: 13.0.0(less@4.6.7)(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))
license-webpack-plugin:
specifier: 4.0.2
- version: 4.0.2(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3))
+ version: 4.0.2(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))
loader-utils:
specifier: 3.3.1
version: 3.3.1
mini-css-extract-plugin:
specifier: 2.10.2
- version: 2.10.2(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3))
+ version: 2.10.2(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))
open:
specifier: 11.0.0
version: 11.0.0
@@ -656,11 +656,11 @@ importers:
specifier: 5.2.0
version: 5.2.0
postcss:
- specifier: 8.5.19
- version: 8.5.19
+ specifier: 8.5.25
+ version: 8.5.25
postcss-loader:
specifier: 8.2.1
- version: 8.2.1(postcss@8.5.19)(typescript@6.0.3)(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3))
+ version: 8.2.1(postcss@8.5.25)(typescript@6.0.3)(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))
resolve-url-loader:
specifier: 5.0.0
version: 5.0.0
@@ -672,13 +672,13 @@ importers:
version: 1.101.0
sass-loader:
specifier: 17.0.0
- version: 17.0.0(sass@1.101.0)(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3))
+ version: 17.0.0(sass@1.101.0)(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))
semver:
specifier: 7.8.5
version: 7.8.5
source-map-loader:
specifier: 5.0.0
- version: 5.0.0(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3))
+ version: 5.0.0(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))
source-map-support:
specifier: 0.5.21
version: 0.5.21
@@ -692,37 +692,37 @@ importers:
specifier: 2.8.1
version: 2.8.1
webpack:
- specifier: 5.108.4
- version: 5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)
+ specifier: 5.109.2
+ version: 5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)
webpack-dev-middleware:
specifier: 8.0.3
- version: 8.0.3(tslib@2.8.1)(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3))
+ version: 8.0.3(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))
webpack-dev-server:
specifier: 5.2.6
- version: 5.2.6(bufferutil@4.1.0)(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3))
+ version: 5.2.6(bufferutil@4.1.0)(debug@4.4.3(supports-color@11.0.0))(supports-color@11.0.0)(utf-8-validate@6.0.6)(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))
webpack-merge:
specifier: 6.0.1
version: 6.0.1
webpack-subresource-integrity:
specifier: 5.1.0
- version: 5.1.0(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3))
+ version: 5.1.0(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))
devDependencies:
'@angular/ssr':
specifier: workspace:*
version: link:../../angular/ssr
browser-sync:
specifier: 3.0.4
- version: 3.0.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(utf-8-validate@6.0.6)
+ version: 3.0.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@11.0.0))(supports-color@11.0.0)(utf-8-validate@6.0.6)
ng-packagr:
- specifier: 22.1.0-next.3
- version: 22.1.0-next.3(@angular/compiler-cli@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3)
+ specifier: 22.1.1
+ version: 22.1.1(@angular/compiler-cli@22.1.1(@angular/compiler@22.1.1)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3)
undici:
specifier: 8.7.0
version: 8.7.0
optionalDependencies:
esbuild:
- specifier: 0.28.1
- version: 0.28.1
+ specifier: 0.28.2
+ version: 0.28.2
packages/angular_devkit/build_webpack:
dependencies:
@@ -740,11 +740,11 @@ importers:
specifier: workspace:0.0.0-PLACEHOLDER
version: link:../../ngtools/webpack
webpack:
- specifier: 5.108.4
- version: 5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)
+ specifier: 5.109.2
+ version: 5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)
webpack-dev-server:
specifier: 5.2.6
- version: 5.2.6(bufferutil@4.1.0)(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3))
+ version: 5.2.6(bufferutil@4.1.0)(debug@4.4.3(supports-color@11.0.0))(supports-color@11.0.0)(utf-8-validate@6.0.6)(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))
packages/angular_devkit/core:
dependencies:
@@ -799,7 +799,7 @@ importers:
version: link:../schematics
'@inquirer/prompts':
specifier: 8.5.2
- version: 8.5.2(@types/node@24.13.3)
+ version: 8.5.2(@types/node@22.20.1)
packages/ngtools/webpack:
devDependencies:
@@ -807,17 +807,17 @@ importers:
specifier: workspace:0.0.0-PLACEHOLDER
version: link:../../angular_devkit/core
'@angular/compiler':
- specifier: 22.1.0-rc.0
- version: 22.1.0-rc.0
+ specifier: 22.1.1
+ version: 22.1.1
'@angular/compiler-cli':
- specifier: 22.1.0-rc.0
- version: 22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(typescript@6.0.3)
+ specifier: 22.1.1
+ version: 22.1.1(@angular/compiler@22.1.1)(typescript@6.0.3)
typescript:
specifier: 6.0.3
version: 6.0.3
webpack:
- specifier: 5.108.4
- version: 5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)
+ specifier: 5.109.2
+ version: 5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)
packages/schematics/angular:
dependencies:
@@ -864,48 +864,48 @@ packages:
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
- '@angular/animations@22.1.0-rc.0':
- resolution: {integrity: sha512-marmWKKbvY5Y7epi2THZnIdeW9fkgimgoWOs/Ld5tKnCDTjN0NiyykjYzSQGu47hSJjAIfkk8a0sdaW1XGF7Kg==}
+ '@angular/animations@22.1.1':
+ resolution: {integrity: sha512-97+EXulzVZ7+5pFqS7mooiZxNKu7eh/vv4BIWaatjLBg2Ctpv2nHotXcWMMfD4gpX6skCdJWluSnmDP1iPc2ig==}
engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0}
deprecated: '@angular/animations is deprecated. Use `animate.enter` and `animate.leave` instead. For more information see: https://v22.angular.dev/guide/animations.'
peerDependencies:
- '@angular/core': 22.1.0-rc.0
+ '@angular/core': 22.1.1
- '@angular/cdk@22.1.0-next.4':
- resolution: {integrity: sha512-lWsn9LIWr1E7R7DoMoorxnLjLUc5tQ47QI6Zn1TNNWoPvKa7Hh89mMwLwvUo0sDvu/rhCw6mwENQCyLbl0kP/g==}
+ '@angular/cdk@22.1.1':
+ resolution: {integrity: sha512-P8YuW/r5MS8aeKF0NruktKGHQShOMctvhs3H/51BOwJrMZi5qtWJ40t1yqTrNnewSJIKI0/AroUEmEOqA9Ml9Q==}
peerDependencies:
- '@angular/common': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0
- '@angular/core': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0
- '@angular/platform-browser': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0
+ '@angular/common': ^22.0.0 || ^23.0.0
+ '@angular/core': ^22.0.0 || ^23.0.0
+ '@angular/platform-browser': ^22.0.0 || ^23.0.0
rxjs: ^6.5.3 || ^7.4.0
- '@angular/common@22.1.0-rc.0':
- resolution: {integrity: sha512-UWNaHg3tlFkHvsj5SedcsKVSoRO9RHN6tHaKvW2XTFLoDUlKvgKE1VciKbuut5LzKtSzu622Ag1bxD77MN4QWA==}
+ '@angular/common@22.1.1':
+ resolution: {integrity: sha512-5iiyPWqO3acpOPMcJWYtVbXF5z9wy43MFQQdd7wZPHfYOIC7c3KRnziWrRpELae+SkEB4srAYr6XIu9rQ743nw==}
engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0}
peerDependencies:
- '@angular/core': 22.1.0-rc.0
+ '@angular/core': 22.1.1
rxjs: ^6.5.3 || ^7.4.0
- '@angular/compiler-cli@22.1.0-rc.0':
- resolution: {integrity: sha512-DfNHPjLxBS7mNqSUZVEjYWHHGaQ1ItjRty4WfcD+7R9hrfSCK3L9nSoQQa9okfBg+6edcR1Q8Dl7M7syfh3swA==}
+ '@angular/compiler-cli@22.1.1':
+ resolution: {integrity: sha512-GLcwWqUg4i2eru3nKy989Me7483+ZPofnwgw9aMc96MWl8y8CD9CTrSff+fwh2/crUsQIqGg/uehIZRjISMD0A==}
engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0}
hasBin: true
peerDependencies:
- '@angular/compiler': 22.1.0-rc.0
+ '@angular/compiler': 22.1.1
typescript: '>=6.0 <6.1'
peerDependenciesMeta:
typescript:
optional: true
- '@angular/compiler@22.1.0-rc.0':
- resolution: {integrity: sha512-wzQo9qMsw85QXi6IauJPKNcbRHuTXQCW/BeMF+UkqXbUrTIez9YdV2Ly+XMZI5r3JUgkly0Z/8t3Rci6CdvybA==}
+ '@angular/compiler@22.1.1':
+ resolution: {integrity: sha512-UfQZALwewk+WyE5fqrXT3CK0sxWXre4XojAvUdFQSZsVHTZEM1QD4FncuePa44I6BQMhfqQUvYNlqFnev4WOQg==}
engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0}
- '@angular/core@22.1.0-rc.0':
- resolution: {integrity: sha512-gXH8srb4B1VshzwYxJrTFO/z+RpydlWf/kVXtFfY7eID0bWqpHwTKvIXyEtpUgUmqTN4MIr0w9vUdaHB3LJmwg==}
+ '@angular/core@22.1.1':
+ resolution: {integrity: sha512-QFZNFzyFw9l1B1D7NCEU3YiLLBnMSejyp9mzJrzZ9vzc70BsewikcLFwuj+qqleqFmi5VW3f9GFNgwUq8dWGAg==}
engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0}
peerDependencies:
- '@angular/compiler': 22.1.0-rc.0
+ '@angular/compiler': 22.1.1
rxjs: ^6.5.3 || ^7.4.0
zone.js: ~0.15.0 || ~0.16.0
peerDependenciesMeta:
@@ -914,74 +914,74 @@ packages:
zone.js:
optional: true
- '@angular/forms@22.1.0-rc.0':
- resolution: {integrity: sha512-f7Rb5idCYw5pliQumI0o3PUA0NBUpNArq1hesNcdkMux2foKKKDOmXHCnbIt3VvRqOyBknKugXRT8UUA+fCJzA==}
+ '@angular/forms@22.1.1':
+ resolution: {integrity: sha512-6c5IJaCw6hAsBYl+LeQARwV4eGxfHwHTlTWfCB5dOYjMSgCCjaivkNTCUepYXFo5Fkdvw1qDiWIpAfgusAxmww==}
engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0}
peerDependencies:
- '@angular/common': 22.1.0-rc.0
- '@angular/core': 22.1.0-rc.0
- '@angular/platform-browser': 22.1.0-rc.0
+ '@angular/common': 22.1.1
+ '@angular/core': 22.1.1
+ '@angular/platform-browser': 22.1.1
rxjs: ^6.5.3 || ^7.4.0
- '@angular/localize@22.1.0-rc.0':
- resolution: {integrity: sha512-FXOGYRqnv/7cyVPFTNbd5XSxE75vtncyypuaB6zH3sAgpHfBU8x/EWf3IDS8piOE0DG1zmw6fsc0e7hX2n8IYQ==}
+ '@angular/localize@22.1.1':
+ resolution: {integrity: sha512-bE6h8HUHHJDKzN9NyKooaJBnaHgqMx5j3XXKzt+FJp7u9AweLTRKdMLx9k2ZG6noNSkFdSeQ+ej9x8cL89BQaA==}
engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0}
hasBin: true
peerDependencies:
- '@angular/compiler': 22.1.0-rc.0
- '@angular/compiler-cli': 22.1.0-rc.0
+ '@angular/compiler': 22.1.1
+ '@angular/compiler-cli': 22.1.1
- '@angular/material@22.1.0-next.4':
- resolution: {integrity: sha512-DFbQUTYF6ur0QgyHyOi9YuPQKwGYKXyWU6CEVREgwKZJVW+1PJ1BIoAtdiCA13ymMoqIuum7EAu2BwkXOHKZ3A==}
+ '@angular/material@22.1.1':
+ resolution: {integrity: sha512-wXNNstkLrUJwmP/cZl+C64chL5qH0WbnHIeYbiXrPwgriAD10prbVBoSq2CWbBrAhQ691pDdFKVSLG5tC224jg==}
peerDependencies:
- '@angular/cdk': 22.1.0-next.4
- '@angular/common': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0
- '@angular/core': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0
- '@angular/forms': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0
- '@angular/platform-browser': ^22.0.0-0 || ^22.1.0-0 || ^22.2.0-0 || ^22.3.0-0 || ^23.0.0-0
+ '@angular/cdk': 22.1.1
+ '@angular/common': ^22.0.0 || ^23.0.0
+ '@angular/core': ^22.0.0 || ^23.0.0
+ '@angular/forms': ^22.0.0 || ^23.0.0
+ '@angular/platform-browser': ^22.0.0 || ^23.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/7a67d5221a9efec2b69b102759d04223a3fc8552':
- resolution: {gitHosted: true, integrity: sha512-DQnETQLANEERiT5UIcBj1D4S1WYlYVOuwtog4JpslthLq0JqSkKXCp7o+1roasNfBrFLaOYMD7wqZiRhsxbNSw==, tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/7a67d5221a9efec2b69b102759d04223a3fc8552}
- version: 0.0.0-7365173626bd7f475d30ba010bfb0e485233b199
+ '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/c71d9b6af7560faa3d002534d416a8045111adae':
+ resolution: {gitHosted: true, integrity: sha512-/32ipAQZed8P+Sgp4Hqk++iJpQVcwwvaCgRCD2fVJi1q17t9qUP+F66uthOE+MTQktgdTXg1Ayi3YWwJWBapnw==, tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/c71d9b6af7560faa3d002534d416a8045111adae}
+ version: 0.0.0-92c6b596e59e320c9edbc6d6490c1047264c4a0d
hasBin: true
- '@angular/platform-browser@22.1.0-rc.0':
- resolution: {integrity: sha512-HHtTB6vJ8jtIq+pN3zOpwA2R7KItVpjpK0AxLEk1E+6Yg8jyuQdtGBpbet61V9ndOyqFh4XyBWMx02+g2DrVcg==}
+ '@angular/platform-browser@22.1.1':
+ resolution: {integrity: sha512-u1HMINw++YTUzMbJB9zVhqch1iEiEl5vA88HjZYzoDagBcnIev30GRWI+QEy4Dy9GRg64hrCOl9Fke78dLQgYQ==}
engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0}
peerDependencies:
- '@angular/animations': 22.1.0-rc.0
- '@angular/common': 22.1.0-rc.0
- '@angular/core': 22.1.0-rc.0
+ '@angular/animations': 22.1.1
+ '@angular/common': 22.1.1
+ '@angular/core': 22.1.1
peerDependenciesMeta:
'@angular/animations':
optional: true
- '@angular/platform-server@22.1.0-rc.0':
- resolution: {integrity: sha512-yE5H9GLBZ0n9VDzvEMixtMz9RDUHwAMgyWRAzHj7gVmj/bbFrJ3waw3Pc2sJY9hhY+asA4q4FdYDchXcxgZXqA==}
+ '@angular/platform-server@22.1.1':
+ resolution: {integrity: sha512-SgPS7Dq0yxseJQ/FuhMv9JACoUX98t4fturYffDxoqGZ9ph0Of1aptJFLX7Q7jJU7l/cG//CgCenXiYC65udIA==}
engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0}
peerDependencies:
- '@angular/common': 22.1.0-rc.0
- '@angular/compiler': 22.1.0-rc.0
- '@angular/core': 22.1.0-rc.0
- '@angular/platform-browser': 22.1.0-rc.0
+ '@angular/common': 22.1.1
+ '@angular/compiler': 22.1.1
+ '@angular/core': 22.1.1
+ '@angular/platform-browser': 22.1.1
rxjs: ^6.5.3 || ^7.4.0
- '@angular/router@22.1.0-rc.0':
- resolution: {integrity: sha512-nJRUfPqhYbUygYlpFtrGW2ymotpSNojkPNIVNnIMLmbQHl498jOEuYKK6ZpD10mDihBqNiuxBB0yUQNNTlp1fA==}
+ '@angular/router@22.1.1':
+ resolution: {integrity: sha512-sD+dN+UOAhdrqnOp3OWuR+O50msXFt+16OGL6RrM9af40iATkUbEAgU62N4KITKl4ACDisg8yhyb9J3dwCEyzQ==}
engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0}
peerDependencies:
- '@angular/common': 22.1.0-rc.0
- '@angular/core': 22.1.0-rc.0
- '@angular/platform-browser': 22.1.0-rc.0
+ '@angular/common': 22.1.1
+ '@angular/core': 22.1.1
+ '@angular/platform-browser': 22.1.1
rxjs: ^6.5.3 || ^7.4.0
- '@angular/service-worker@22.1.0-rc.0':
- resolution: {integrity: sha512-TOgMekeFEk6MSA5oIW33b6SAxZeas+1FoGtYVRbTuQdLbzpO77Xugt3LixRq2MP88oJg1Z+nYLKkmKj0HjYsyQ==}
+ '@angular/service-worker@22.1.1':
+ resolution: {integrity: sha512-REsVCYEJNsxqxdy6pOY2KVBWFhjM2FeC2z+D8Ct7CbeKmJHo5bS/SuDJ7F5nMKclpxPMjtrzmFUSGRHp9xjrLQ==}
engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0}
hasBin: true
peerDependencies:
- '@angular/core': 22.1.0-rc.0
+ '@angular/core': 22.1.1
rxjs: ^6.5.3 || ^7.4.0
'@asamuzakjp/css-color@5.1.11':
@@ -1023,8 +1023,8 @@ packages:
resolution: {integrity: sha512-5FgxM4dLQpMJHSiVATk8foW263dVHQHBVpXYiimNECVWG01f4nFyEbQixeT6Mwvg7TayREJ2gpKl3o2RoMdnqw==}
engines: {node: ^22.18.0 || >=24.11.0}
- '@babel/generator@7.29.7':
- resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==}
+ '@babel/generator@7.29.8':
+ resolution: {integrity: sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==}
engines: {node: '>=6.9.0'}
'@babel/generator@8.0.0':
@@ -1159,8 +1159,8 @@ packages:
resolution: {integrity: sha512-wfbi91pM3py96oIiJEz7qIpyXDytgr9zQC1HEWwlGNVRAEmItuU/0a41ZUKu1sJGyhhOIpc4t5vk4PYzt8wpsg==}
engines: {node: ^22.18.0 || >=24.11.0}
- '@babel/parser@7.29.7':
- resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==}
+ '@babel/parser@7.29.8':
+ resolution: {integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==}
engines: {node: '>=6.0.0'}
hasBin: true
@@ -1539,16 +1539,16 @@ packages:
resolution: {integrity: sha512-eAD0QW/AlbamBbw0FeGiwasbCVPq5ncW0HNVyLP3B9czqLyh4gvw+5JTSNt6le9+ziAU7mqDZsKTHf3jTb4chQ==}
engines: {node: ^22.18.0 || >=24.11.0}
- '@babel/traverse@7.29.7':
- resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==}
+ '@babel/traverse@7.29.8':
+ resolution: {integrity: sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==}
engines: {node: '>=6.9.0'}
'@babel/traverse@8.0.4':
resolution: {integrity: sha512-bZnmqzGG8UZneG1lLxBoWIH0G6Gr1D846Yu4/3XnY6FhCndMR49u26nTY08u/dAxWmLWF9vGQOuC+84FfIUoeg==}
engines: {node: ^22.18.0 || >=24.11.0}
- '@babel/types@7.29.7':
- resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==}
+ '@babel/types@7.29.8':
+ resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==}
engines: {node: '>=6.9.0'}
'@babel/types@8.0.4':
@@ -1595,15 +1595,15 @@ packages:
resolution: {integrity: sha512-064IFJdjTfUqnjpCVpMOdbr8FLQBhinbZj6yRv2An2E41O/pLEXqfFRWqGq/SxlE5PEUYTlvWsG2r8MswAVvkg==}
engines: {node: '>=20.19.0'}
- '@csstools/css-calc@3.2.1':
- resolution: {integrity: sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==}
+ '@csstools/css-calc@3.3.0':
+ resolution: {integrity: sha512-c5ihYsPkdG6JCkU2zTMm4+k6r7RXuGxtWYhu5DHMIiF1FHzrfmHL5so11AoFpUv/tu61xfcmT4AmKoFfMPoqdQ==}
engines: {node: '>=20.19.0'}
peerDependencies:
'@csstools/css-parser-algorithms': ^4.0.0
'@csstools/css-tokenizer': ^4.0.0
- '@csstools/css-color-parser@4.1.9':
- resolution: {integrity: sha512-paQcIaOO53Rk5+YrBaBjm/SgrV4INImjo2BT1DtQRYr+XeTRbeAYlS+jxXp9drqvKmtFnWRJKIalDLhZZDu42A==}
+ '@csstools/css-color-parser@4.1.10':
+ resolution: {integrity: sha512-UZhQLIUyJaaMepqehrCODwCg2KW25vFvLWBmqYFaPclYvvxzj/sG8LBOhBFCp11i9uE7t1EyS+RAoV9tztPFyw==}
engines: {node: '>=20.19.0'}
peerDependencies:
'@csstools/css-parser-algorithms': ^4.0.0
@@ -1615,8 +1615,8 @@ packages:
peerDependencies:
'@csstools/css-tokenizer': ^4.0.0
- '@csstools/css-syntax-patches-for-csstree@1.1.6':
- resolution: {integrity: sha512-TcJCWFbXLPpJYq6z7bfOyjWYJDiDg2/I4gyUC9pqPNqHFRIey0EB0q0L5cSnQDfWJg8Jd6VadakxdIez/3zkqQ==}
+ '@csstools/css-syntax-patches-for-csstree@1.1.7':
+ resolution: {integrity: sha512-fQ+05118eQS1cofO3aJpB5efgpBZMvIzwr/sbC8kDLVA5XLG8q1kJV5yzrUAI1f7lvhPnm8fgIjzFB8/O/5Dig==}
peerDependencies:
css-tree: ^3.2.1
peerDependenciesMeta:
@@ -1650,158 +1650,158 @@ packages:
'@emnapi/wasi-threads@1.2.2':
resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==}
- '@esbuild/aix-ppc64@0.28.1':
- resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==}
+ '@esbuild/aix-ppc64@0.28.2':
+ resolution: {integrity: sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
- '@esbuild/android-arm64@0.28.1':
- resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==}
+ '@esbuild/android-arm64@0.28.2':
+ resolution: {integrity: sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
- '@esbuild/android-arm@0.28.1':
- resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==}
+ '@esbuild/android-arm@0.28.2':
+ resolution: {integrity: sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
- '@esbuild/android-x64@0.28.1':
- resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==}
+ '@esbuild/android-x64@0.28.2':
+ resolution: {integrity: sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
- '@esbuild/darwin-arm64@0.28.1':
- resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==}
+ '@esbuild/darwin-arm64@0.28.2':
+ resolution: {integrity: sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-x64@0.28.1':
- resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==}
+ '@esbuild/darwin-x64@0.28.2':
+ resolution: {integrity: sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
- '@esbuild/freebsd-arm64@0.28.1':
- resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==}
+ '@esbuild/freebsd-arm64@0.28.2':
+ resolution: {integrity: sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.28.1':
- resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==}
+ '@esbuild/freebsd-x64@0.28.2':
+ resolution: {integrity: sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
- '@esbuild/linux-arm64@0.28.1':
- resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==}
+ '@esbuild/linux-arm64@0.28.2':
+ resolution: {integrity: sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm@0.28.1':
- resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==}
+ '@esbuild/linux-arm@0.28.2':
+ resolution: {integrity: sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
- '@esbuild/linux-ia32@0.28.1':
- resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==}
+ '@esbuild/linux-ia32@0.28.2':
+ resolution: {integrity: sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
- '@esbuild/linux-loong64@0.28.1':
- resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==}
+ '@esbuild/linux-loong64@0.28.2':
+ resolution: {integrity: sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
- '@esbuild/linux-mips64el@0.28.1':
- resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==}
+ '@esbuild/linux-mips64el@0.28.2':
+ resolution: {integrity: sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-ppc64@0.28.1':
- resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==}
+ '@esbuild/linux-ppc64@0.28.2':
+ resolution: {integrity: sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-riscv64@0.28.1':
- resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==}
+ '@esbuild/linux-riscv64@0.28.2':
+ resolution: {integrity: sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-s390x@0.28.1':
- resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==}
+ '@esbuild/linux-s390x@0.28.2':
+ resolution: {integrity: sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
- '@esbuild/linux-x64@0.28.1':
- resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==}
+ '@esbuild/linux-x64@0.28.2':
+ resolution: {integrity: sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
- '@esbuild/netbsd-arm64@0.28.1':
- resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==}
+ '@esbuild/netbsd-arm64@0.28.2':
+ resolution: {integrity: sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.28.1':
- resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==}
+ '@esbuild/netbsd-x64@0.28.2':
+ resolution: {integrity: sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
- '@esbuild/openbsd-arm64@0.28.1':
- resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==}
+ '@esbuild/openbsd-arm64@0.28.2':
+ resolution: {integrity: sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.28.1':
- resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==}
+ '@esbuild/openbsd-x64@0.28.2':
+ resolution: {integrity: sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
- '@esbuild/openharmony-arm64@0.28.1':
- resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==}
+ '@esbuild/openharmony-arm64@0.28.2':
+ resolution: {integrity: sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openharmony]
- '@esbuild/sunos-x64@0.28.1':
- resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==}
+ '@esbuild/sunos-x64@0.28.2':
+ resolution: {integrity: sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
- '@esbuild/win32-arm64@0.28.1':
- resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==}
+ '@esbuild/win32-arm64@0.28.2':
+ resolution: {integrity: sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
- '@esbuild/win32-ia32@0.28.1':
- resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==}
+ '@esbuild/win32-ia32@0.28.2':
+ resolution: {integrity: sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
- '@esbuild/win32-x64@0.28.1':
- resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==}
+ '@esbuild/win32-x64@0.28.2':
+ resolution: {integrity: sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
@@ -1867,30 +1867,32 @@ packages:
'@noble/hashes':
optional: true
- '@firebase/ai@2.13.1':
- resolution: {integrity: sha512-RhT/VViTPBSplhQSuEp62HhLvfsV+LowMh8ZUo5MMRDzG7oFtSget4Kmg5oHP50hDVyWQuQj6to9iPFEZk08Tw==}
+ '@firebase/ai@2.14.0':
+ resolution: {integrity: sha512-TYEQqCQUTyVHuG/HVi9vau6F9kvEaS49o/hmdn/yUuN6ZXQkwIml2nNJTIBfjNl/r9LOxwUNILgcOY16nxObug==}
engines: {node: '>=20.0.0'}
peerDependencies:
'@firebase/app': 0.x
'@firebase/app-types': 0.x
- '@firebase/analytics-compat@0.2.28':
- resolution: {integrity: sha512-lIAlqUUbBu93FJMlQfslryQtBwwzdzvp23ePC6FNgymXk6Ook5v4Uvc0vdutvoIeqmyA3LfP0ZeRFK8+11kOOQ==}
+ '@firebase/analytics-compat@0.2.29':
+ resolution: {integrity: sha512-allztvCvCUlItZzD97TiRAtGoFJzR1FQFmLxbaLc6PvgscqD9cl5NdKPTtka6keShVYXvCZJpzWcRoH4TME8rw==}
peerDependencies:
+ '@firebase/app': 0.x
'@firebase/app-compat': 0.x
'@firebase/analytics-types@0.8.4':
resolution: {integrity: sha512-zQ+XTgkwH6CY/eUSHJRP7e4LxM30RCxlCmob5sy2axs25GE3Ny0XdgpDscMTHHQIGqWkxPXad4w2Mw9sCgT8zQ==}
- '@firebase/analytics@0.10.22':
- resolution: {integrity: sha512-8BSaq/QRGU1+xyi8L2PTLTJU7MH9aMA72RQdIxrbhWFauOZY9OXo8f2YDN/972xA8d588tlnNVEQ2Mo69pT9Ow==}
+ '@firebase/analytics@0.10.23':
+ resolution: {integrity: sha512-34ALWXzWA6PTRUA5hipZmsm1RKzeecw5J1+qTCXsiMzwLqONC+GuTIQSdmm91MmTAEA+wG1Q5t0IFahcYQOqAA==}
peerDependencies:
'@firebase/app': 0.x
- '@firebase/app-check-compat@0.4.5':
- resolution: {integrity: sha512-JI17mVcZs34zO6ZeSCrw4U2iohqy+n6GIzkbmsA+TbVjmvFLkUKt3bs5M+qRBteQm/0IWzqSHYFzEQLzDTQebg==}
+ '@firebase/app-check-compat@0.4.6':
+ resolution: {integrity: sha512-2pzNEZEkX84jSqy6TH6FI1HSLA1lc7kakRUybBbKjg9YhIttPlW/XX3N9CDtChji2PTTPWVPZiWhB10exHfA+A==}
engines: {node: '>=20.0.0'}
peerDependencies:
+ '@firebase/app': 0.x
'@firebase/app-compat': 0.x
'@firebase/app-check-interop-types@0.3.4':
@@ -1899,27 +1901,28 @@ packages:
'@firebase/app-check-types@0.5.4':
resolution: {integrity: sha512-xV7JsIyzVr15aA7f3Pi0rB9gdBuVubs89FGA8VkRYA4g0l78poADgdfrScgf7NndSg9mm7cR7PJyY0+t22KaGw==}
- '@firebase/app-check@0.12.0':
- resolution: {integrity: sha512-wMeT6HLWRAuW7Cp/5UjWBGKgjPNxWNOoNf4PRIv0weljoGMZVeqbUY7wNBWTI2/31cX1NlXx8gQruDLsUShB3Q==}
+ '@firebase/app-check@0.13.0':
+ resolution: {integrity: sha512-AbMttBKazQvGVXBZhQdVAdPzRhwHyJAY3Ghu5y2C7IZKIDIppzNYz0shTZ1mP4FBJa+28BuC4t+5h1Q6pT3Asg==}
engines: {node: '>=20.0.0'}
peerDependencies:
'@firebase/app': 0.x
- '@firebase/app-compat@0.5.15':
- resolution: {integrity: sha512-HaiSM9TwbGIR4b7F6+UncHWlqdH89eeY7VUskaOGOlI2PxHS5Z+6hHsYGvNLy0SHDE6zyXO+3QSA6a4aqQxsqA==}
+ '@firebase/app-compat@0.5.16':
+ resolution: {integrity: sha512-shQq37O8qELDzvsVwYPlDXwD1zlcrZ0m2bpBF5ov2HSbY8x+AHsnL5TtJ2e1JAfkQN05qHao1AfabS69PN6GiA==}
engines: {node: '>=20.0.0'}
'@firebase/app-types@0.9.5':
resolution: {integrity: sha512-YevqTjvo7Iujsa9Dwowmd6dSoElhzmD63ZSrq6bzjvQ6POjYgNjOFHLmNIgJs48eNO093NCERibuFnxbfOvU7A==}
- '@firebase/app@0.15.1':
- resolution: {integrity: sha512-iD9+Z5HcPo0Uop5f72/VYMeXwKucBhW7iFrISkJFvQ+lSZikTNgTz0FgAtaaTkAG0pEZSnCymA2Fu49n0rcufQ==}
+ '@firebase/app@0.16.0':
+ resolution: {integrity: sha512-G+ZGEyVP8YTb3ay6A+XpcYgFH3sTESHcnHU/EyTktodqhz2BHkLq+QEP7IVwjiMX0cxYwpVKip0/wC0KZcn9vQ==}
engines: {node: '>=20.0.0'}
- '@firebase/auth-compat@0.6.8':
- resolution: {integrity: sha512-llcBREUC4iSNKZ6rvwud7Oz9Q7aAWU6KuQLa6pdu7Q+QAQsy4JLw6yFgxwtmzabsgznHmmcsX2UjHLLzqUxi3Q==}
+ '@firebase/auth-compat@0.6.9':
+ resolution: {integrity: sha512-/hHeTBmQ61+N5J1RECls+WfskZTY78JXr7aO5EMOfUpqJvDqvoS+568k0rp6Ss/4UWwBjadILs+H+SGy1zCS3A==}
engines: {node: '>=20.0.0'}
peerDependencies:
+ '@firebase/app': 0.x
'@firebase/app-compat': 0.x
'@firebase/auth-interop-types@0.2.5':
@@ -1931,8 +1934,8 @@ packages:
'@firebase/app-types': 0.x
'@firebase/util': 1.x
- '@firebase/auth@1.13.3':
- resolution: {integrity: sha512-bqiq4uubDN2YyQkdvSWPQeJyXAv2O76ImF41En9b6UhV5JuBVYDoHYrrrE3NzIuGkpFMKagfhMRP4Vz6t+yQSQ==}
+ '@firebase/auth@1.13.4':
+ resolution: {integrity: sha512-s+NS1aV0DDyyfoIMeSz53HXnVTv7ufJjJfrP63XyaWHweJ5vOoxKWrTm5tO7S7PDqvyOa/Wi3oP0dgAo6JTMMA==}
engines: {node: '>=20.0.0'}
peerDependencies:
'@firebase/app': 0.x
@@ -1941,30 +1944,39 @@ packages:
'@react-native-async-storage/async-storage':
optional: true
- '@firebase/component@0.7.3':
- resolution: {integrity: sha512-wFofIaa2879ogD/WvkjYXJxRmfnL0scen6ORgaC3na1FNOR9ASIUANQdhqQcmWu/h77/pVHY7ch5flewa5Bcew==}
+ '@firebase/component@0.7.4':
+ resolution: {integrity: sha512-tLpOaaCol9ugUIYp2R3CbWPPA8Ajg/papX/XHEy8U52b/QXH3BbX8tTJX9aShDCjp+9sMAxMLD94i7lresdugQ==}
engines: {node: '>=20.0.0'}
- '@firebase/data-connect@0.7.1':
- resolution: {integrity: sha512-2LbUU8mmSA63HknxQMmWHjpzuNLBKflvVwQc2tpoVKg0biWleNEJX031ELks0vzFs+dDjOUkCJR72RP6mQHFOg==}
+ '@firebase/data-connect@0.7.3':
+ resolution: {integrity: sha512-nHBFk3Ntl+NZCRIUG2d5j7I69P0otjyQ/duhVKLbw4+5cNke/F6RK1pdE5Jnf831/QOTs2Bd00LlxlZ+jNsb9w==}
peerDependencies:
'@firebase/app': 0.x
- '@firebase/database-compat@2.1.4':
- resolution: {integrity: sha512-3pK35F1MAgmqFJQlf2nhQl44vtAXQO1uaCaQOEUI9kCRtLFqi7N+QRKR7lFZPg+xIZIyubgxQaxY69YgfZRZWg==}
+ '@firebase/database-compat@2.1.6':
+ resolution: {integrity: sha512-mu7S/75UIajB1A5M9Vfojk69LttW55uABp9nHEtWrV/mIaSEwvoaIe9GySsEzS2EKFK5/3f5okcAuUbihhYeJg==}
engines: {node: '>=20.0.0'}
+ peerDependencies:
+ '@firebase/app': 0.x
+ '@firebase/app-compat': 0.x
+ peerDependenciesMeta:
+ '@firebase/app':
+ optional: true
+ '@firebase/app-compat':
+ optional: true
- '@firebase/database-types@1.0.20':
- resolution: {integrity: sha512-kegbOk/w8iU64pr0q6k2ItyNGjnQBMHFhwS7ohdWI4W+pc0/zhhdGXTdFj6X1oxItRjPoYOsSQmERgBkn/ihxw==}
+ '@firebase/database-types@1.0.21':
+ resolution: {integrity: sha512-SX1jUqhttKgg/m9dYRTvqU9QvucBooziWfA986r4cpsbi4zlsvewe424j3Vpduwd6DG1MSAMfBVT2VqA61FnkA==}
- '@firebase/database@1.1.3':
- resolution: {integrity: sha512-XwWCa+E4TvNGpGwXrycLRNfdogADwFcvuhyow6wDWma9W54roaQIhe+4PM0KiLsIftBdSCGI7OKCXrdSRHbIhw==}
+ '@firebase/database@1.1.4':
+ resolution: {integrity: sha512-D+j4+8uhGtNd1tVD+X+c8JrC4ppStGJKyujSQt2NPwdN26QcCk0BeIxue+UqspHkHiFHyQOimwlzjLewGq6S+A==}
engines: {node: '>=20.0.0'}
- '@firebase/firestore-compat@0.4.11':
- resolution: {integrity: sha512-W7o1WdwWq5aABK5Up2ncSvTQs/QGLR/fy7cVpFBNqhsXtxoMtflHf2xBIG6+aoptcuGAobddq4g2Sq27wqHaYw==}
+ '@firebase/firestore-compat@0.4.12':
+ resolution: {integrity: sha512-k2uX81Ao/S0jnFcWGPOQpKK1cPlJHvD9WIqh/RE1XBDP2yg5zhE4rHhSg1rtB11k39q3nKon9XLNDDrPjGclag==}
engines: {node: '>=20.0.0'}
peerDependencies:
+ '@firebase/app': 0.x
'@firebase/app-compat': 0.x
'@firebase/firestore-types@3.0.4':
@@ -1973,30 +1985,32 @@ packages:
'@firebase/app-types': 0.x
'@firebase/util': 1.x
- '@firebase/firestore@4.16.0':
- resolution: {integrity: sha512-qdHMHMvMr0nRMuZyWNR/ArWa0YlPE3C4eAbmxTASJMYXAesKPL0Y54p70moggrNPzaK7MSIIq5RDJJyntQyIYA==}
+ '@firebase/firestore@4.17.0':
+ resolution: {integrity: sha512-P9tof6pyO1bnLlMWbux+5O7WFJqlb7OTPMKxxOiXKYiQl7mxykAvxr1BFCgWeEXUU7DZxQncyJ040B0IhFVZCg==}
engines: {node: '>=20.0.0'}
peerDependencies:
'@firebase/app': 0.x
- '@firebase/functions-compat@0.4.5':
- resolution: {integrity: sha512-10qlUXGY25G5/1g9UihqksPp2po+ZqSE7LEizsrdUP7vrTmkysXxGSZCDyojSEp6mQe/ecRDdDDI+z4XRdb4wQ==}
+ '@firebase/functions-compat@0.4.6':
+ resolution: {integrity: sha512-dj9sOet+FIU91jeU4A3vGJoXHty7NqkSfjRLCwLgJXPDk1m72KFuxD3nlFgw/yXx/Fr7UjqzbxZ0LrIOdpx7+w==}
engines: {node: '>=20.0.0'}
peerDependencies:
+ '@firebase/app': 0.x
'@firebase/app-compat': 0.x
'@firebase/functions-types@0.6.4':
resolution: {integrity: sha512-zV6kgqtduR4rUAdC/ilS7kmb93XD7bEZoJDlVBZqlOw2uGGGCNBQBuleww2rr0Ulr3L9o2TDjumEt68/l1f9DQ==}
- '@firebase/functions@0.13.5':
- resolution: {integrity: sha512-bWCx713f4kE/uFV7gdFOLBS7lDoiZj48MRkbAqe35gkXcCeWF4QjRNO07Jhmve7EJIoQOBczL29y2r8VRuN1kw==}
+ '@firebase/functions@0.13.6':
+ resolution: {integrity: sha512-9obLnzeQUivK5lmtGFOU2ucQ38BjTp+jpPtbfFp/mDsdVCvEpRqdWNvMMQ6aQwR4vcVc/utsvngm5BRkXbc7ZA==}
engines: {node: '>=20.0.0'}
peerDependencies:
'@firebase/app': 0.x
- '@firebase/installations-compat@0.2.22':
- resolution: {integrity: sha512-C/zpAuTP5S9OgKSPvXRupw3hoY/JZSlA1wFjD/Sb7LIQE0FNbcMdO8Y4KXVEkjVzma/DDDDIAzxEXqKMAzc88w==}
+ '@firebase/installations-compat@0.2.23':
+ resolution: {integrity: sha512-isaXmjb9roM83eVeXAe+ZRNKYNsSo2s0aNM+cy04AAGEyVL/d8Aa11GwEXovRFeYjl9+1yRAOxRDTOukZRwTxA==}
peerDependencies:
+ '@firebase/app': 0.x
'@firebase/app-compat': 0.x
'@firebase/installations-types@0.5.4':
@@ -2004,8 +2018,8 @@ packages:
peerDependencies:
'@firebase/app-types': 0.x
- '@firebase/installations@0.6.22':
- resolution: {integrity: sha512-ef6nn3GGQTdReCfotRMG77PJZu8CqEbiK5pEoBnM0gTu/Z9v0i/az2p3HABsa/1beQmmyh1OsOjf7P5+pgwdZw==}
+ '@firebase/installations@0.6.23':
+ resolution: {integrity: sha512-MBkbcQfd+3qHjW+slsH4s7jH5qTdGlYpwqmxEZ7QcIpgDxu1SKyU0f+mCZhCt1BCacLNiOWF5L0R06N0LtlfMg==}
peerDependencies:
'@firebase/app': 0.x
@@ -2013,49 +2027,53 @@ packages:
resolution: {integrity: sha512-vZKLsqE1ABOy8OjQiE7cUTFn4gvaqlk88yp8N94Pk/sDpq61YqZGqmVFZTvOyflTwuYFcWirBdYGoJgbDaXKYQ==}
engines: {node: '>=20.0.0'}
- '@firebase/messaging-compat@0.2.27':
- resolution: {integrity: sha512-JNOiu1PPgdHzEPEtoFiNxQuu0x9bm4bfETSQCpGfcTlgWkhlSK7uh7nlsjC10TQLUNgYetLmuutaYTh8aeYLVA==}
+ '@firebase/messaging-compat@0.2.28':
+ resolution: {integrity: sha512-/AmMqHRnSQhPsdeED3ocs+s30/tpFvZDiiwIYY2uXFRvLujo1fnbPOeCFoe4Y+dRy1LCSjpvJf+dy5ZTsxi1yg==}
peerDependencies:
+ '@firebase/app': 0.x
'@firebase/app-compat': 0.x
'@firebase/messaging-interop-types@0.2.5':
resolution: {integrity: sha512-tUEKnaAP2Y/MNIqgnriPpV6e5l13Vs/+p2yrd6NGlncPJT9O3a8muYZtdnWe+IJ4fgKLHJVC79n/asxk/N5Msw==}
- '@firebase/messaging@0.13.0':
- resolution: {integrity: sha512-GZoo0uGRvEbszo83xcgbjJp4FpkmBEr4l8Z4hi8gl+P1Spn/MTK3HapanMzSX4yUHuTEiF5hasWRxOaz+o5sxQ==}
+ '@firebase/messaging@0.13.1':
+ resolution: {integrity: sha512-kL8fdjbNBI7hprlXJrUjktDWosrpT4JtfwXtVVevImPF/rBRAsC+LS/jIs+kgQVuotnvMhaBCgAFipBoY9YU9g==}
peerDependencies:
'@firebase/app': 0.x
- '@firebase/performance-compat@0.2.25':
- resolution: {integrity: sha512-q6NjTXpIPoFuUmCmMN/maCdTgzT6aExs9xZo+PxfVLj6uLVGvpyAD6XWjmcrb7jChsFBYbq7E5dyNDF7Zhy9kA==}
+ '@firebase/performance-compat@0.2.26':
+ resolution: {integrity: sha512-jgoocXLN6ao26xWQ8pzosmzQ33uLzGBJQPNK0NTbVy1XvIHr5pfgBf9hWLOxsWe+R7sJq5bjD+8ybXprmt61mA==}
peerDependencies:
+ '@firebase/app': 0.x
'@firebase/app-compat': 0.x
'@firebase/performance-types@0.2.4':
resolution: {integrity: sha512-kJSEk7b0uhpcPRyL4SQ/GPujLqk52XNKcXlnsKDbWGAb9vugcLvOU3u6zfEdwd+d8hWJb5S5ZizV1JFFI0nkKg==}
- '@firebase/performance@0.7.12':
- resolution: {integrity: sha512-fe7nV8teUU3OBHlMUZ9Lw4gLhCW2k4m5Uc3pfWGV+fl8uwJQBGp9Q3lqsJ+HSrFu3Q2pJyLAgrClPGSKyDeYgQ==}
+ '@firebase/performance@0.7.13':
+ resolution: {integrity: sha512-1u6fuXP9cj0s+lkTFAspr/ttfPebPbEdpx+5Wdr4mPZbp8qH2KCMxOddEAR1ZMRa5GI0E7hDYSnolEmbqOFOAg==}
peerDependencies:
'@firebase/app': 0.x
- '@firebase/remote-config-compat@0.2.27':
- resolution: {integrity: sha512-FYwYWwSbUdza/pRX4NpSBm/Pimntum3jEIBpnDn5Ey1jHNWgjxrE8Z5SB4mCHd5wGCoYd3koJzxARl/VWIEx0Q==}
+ '@firebase/remote-config-compat@0.2.28':
+ resolution: {integrity: sha512-kEO9Gn6fbmVj7eNUtZ6d59mLgUDUD0qo7aCicGOWNfuRWTaUv3CF9DMYychO61zaEQ3cfA+CEny4V1E8A1gRGA==}
peerDependencies:
+ '@firebase/app': 0.x
'@firebase/app-compat': 0.x
'@firebase/remote-config-types@0.5.1':
resolution: {integrity: sha512-cX/1LT6KQwkXzck2eSzeKnuvXZCyr8qaPpDcikoJs7jmI+oBOXixpDLeDtWj1U6GNMkIoXrEDNoyT2Ypcyp5/A==}
- '@firebase/remote-config@0.9.0':
- resolution: {integrity: sha512-aNn6/eJhsSC+gXSToiXiYPv3ypLP9lFtzl+/q9kSOBPB7D6rae0Rt2uENZZLXGYbEgHYKQblOhijJAXGbbJjtQ==}
+ '@firebase/remote-config@0.9.1':
+ resolution: {integrity: sha512-nzQUSJnk1zAZEl2Q5O3I7Z61cYLK5JI4H6wyyOiHkVZ+bmgy1YXNNMptNbVjixMQ/eCzgA6nZRaC+1eBcJGUFA==}
peerDependencies:
'@firebase/app': 0.x
- '@firebase/storage-compat@0.4.3':
- resolution: {integrity: sha512-gruVqjtUGX8tEoeNbaWXZm0Zfcfcb7fvmDmBxV8yPAbWvExRnZYLO2+qw9idxNE7BvPXt5csyjSYHy//dAizxw==}
+ '@firebase/storage-compat@0.4.4':
+ resolution: {integrity: sha512-qSRgCB9f2R/nCp8t/8OC101cIFBFeUazlRInOMdzbnLzvrQBzEfx19SrR4pvdj/0+M+P/y8AK/a2s+3EB+B1Pw==}
engines: {node: '>=20.0.0'}
peerDependencies:
+ '@firebase/app': 0.x
'@firebase/app-compat': 0.x
'@firebase/storage-types@0.8.4':
@@ -2064,14 +2082,14 @@ packages:
'@firebase/app-types': 0.x
'@firebase/util': 1.x
- '@firebase/storage@0.14.3':
- resolution: {integrity: sha512-YX4/YL6P6/fufSSeGnVhjWddcIXbFq2cWIhMKFTZo1E/Rtcl2mJj/BYUQTwJfcE1Tl8un1FOya4L05jcSLN/Eg==}
+ '@firebase/storage@0.14.4':
+ resolution: {integrity: sha512-jfzEWZb3Fpsq3FwAB2ifoc8mcSh935qXdDou3TpyjDWa45hhNcZUv8/w28/10njByhfK7snbakKN30nwnzQ3/w==}
engines: {node: '>=20.0.0'}
peerDependencies:
'@firebase/app': 0.x
- '@firebase/util@1.15.1':
- resolution: {integrity: sha512-LUdM4Wg7YM9Pq/49nGYySJA0CSQEKnGffFzWV8+6gXN7mGxn+FL1IqvFbuZUtAQcfZgHYDwCE1wwlK7rB7gl2g==}
+ '@firebase/util@1.15.2':
+ resolution: {integrity: sha512-974pWIZVLDMc5GW5YAsj8y0XxULxIy/sPUy7tsxmWbF93KRIyh9xpuHlh0zDL+shUcf5nHDjFOg9YLiQ763eiA==}
engines: {node: '>=20.0.0'}
'@firebase/webchannel-wrapper@1.0.6':
@@ -2080,20 +2098,20 @@ packages:
'@glideapps/ts-necessities@2.2.3':
resolution: {integrity: sha512-gXi0awOZLHk3TbW55GZLCPP6O+y/b5X1pBXKBVckFONSwF1z1E5ND2BGJsghQFah+pW7pkkyFb2VhUQI2qhL5w==}
- '@google-cloud/common@6.0.1':
- resolution: {integrity: sha512-1uvKzbmAWUdchIYRsg0f4rUmezOamWuVBSWAPAhnYoUE5OiPEx6v6JOxFIdr3MsrqV+6fyLV3EI1vMPlHoeRvw==}
+ '@google-cloud/common@6.1.0':
+ resolution: {integrity: sha512-Ohjxjvusr65+SiEVBrilpyn1ir9CM8ZqWjcf7bA8ph1GCunxI6bbwtcl7iGl67A7Lr4Nz7WpNzITNETwggc7pw==}
engines: {node: '>=18'}
- '@google-cloud/precise-date@5.1.0':
- resolution: {integrity: sha512-Z9RVpJUZR+aMF9gPel07xbLURjdT+G4HV6x7jJhreNarQGcT/ZYn1IIfo55rd+tncGvJ4qZDfZnaF6PzqgsQkw==}
+ '@google-cloud/precise-date@5.2.0':
+ resolution: {integrity: sha512-ckZ1elVT/JXbO4kxltiT8tumYnTXGIY7OFrDMAJyVWAte/rUYiCuH1YbaKLQrZpYDp522xgTfPqqW/VxfXFdgA==}
engines: {node: '>=18'}
'@google-cloud/projectify@4.0.0':
resolution: {integrity: sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==}
engines: {node: '>=14.0.0'}
- '@google-cloud/projectify@5.1.0':
- resolution: {integrity: sha512-61RXiUnoPBjeIXTzG+WgGLdJlnE3lS7p63rbePw0CEC0tjMGpODKHEr8vFUmuD+iEl7sUWYKbu/ZTk/N2dXw6w==}
+ '@google-cloud/projectify@5.2.0':
+ resolution: {integrity: sha512-u4lTO+UI9bwyd/qaVkhVpp57jVH0Pc7wkHE0snZkpQyoKheHDJwmfStao8cWXSF03DmrQltLLSoDjM2CGBpFJA==}
engines: {node: '>=18'}
'@google-cloud/promisify@4.1.0':
@@ -2108,8 +2126,8 @@ packages:
resolution: {integrity: sha512-IJn+8A3QZJfe7FUtWqHVNo3xJs7KFpurCWGWCiCz3oEh+BkRymKZ1QxfAbU2yGMDzTytLGQ2IV6T2r3cuo75/w==}
engines: {node: '>=18'}
- '@google/genai@2.12.0':
- resolution: {integrity: sha512-LUr972DZosqPUhf9Mb3CIVu/B99woD3QW6ZJV1T9aNgxaoimAZARmo+IyyDsxIL+zouFiYSdA4hzfEWXc9oNIQ==}
+ '@google/genai@2.15.0':
+ resolution: {integrity: sha512-Q41TvqwBQ9NcmWdh6qxY5qrpg+0FaVHD7febQoH007pykxzco4ohScBUP4BBBy+Q8j5D8euIBSRIBDfWuNVCKA==}
engines: {node: '>=20.0.0'}
peerDependencies:
'@modelcontextprotocol/sdk': ^1.25.2
@@ -2138,9 +2156,9 @@ packages:
'@harperfast/extended-iterable@1.0.3':
resolution: {integrity: sha512-sSAYhQca3rDWtQUHSAPeO7axFIUJOI6hn1gjRC5APVE1a90tuyT8f5WIgRsFhhWA7htNkju2veB9eWL6YHi/Lw==}
- '@hono/node-server@1.19.14':
- resolution: {integrity: sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==}
- engines: {node: '>=18.14.1'}
+ '@hono/node-server@2.1.0':
+ resolution: {integrity: sha512-XovyyCCnBzW+zKu+z/zq8hwNs4KOR5rEMAOxo2f40Q5xoOI37IMm6MIg2COOUtUApo0i6850MTBKH2u4QLGIqg==}
+ engines: {node: '>=20'}
peerDependencies:
hono: ^4
@@ -2367,50 +2385,50 @@ packages:
peerDependencies:
tslib: '2'
- '@jsonjoy.com/fs-core@4.64.0':
- resolution: {integrity: sha512-zs2TAq7Six5jgMuoMNjpspAvOP3mhtgq/k1UyQodEzCtQi/N83y2/y+zcvnZSGp/Rxq96DBN+bValOBQAyn/ew==}
+ '@jsonjoy.com/fs-core@4.68.0':
+ resolution: {integrity: sha512-OAioDU3UGV34ECVTB4pt641OfUzuyDuyUmgrlVM+Fp9g4YyavZrB4xxWuupYrU66+81+um9D0DAzYhjXto5ysQ==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
- '@jsonjoy.com/fs-fsa@4.64.0':
- resolution: {integrity: sha512-nMWOVbkLFyEgmXZih3wyvxA9XpgyyqyfrINMHvEFqhi7uqfRl7c9ERJt6yX7vgMPrB9Uo+OJO+Spa0cFzPD01w==}
+ '@jsonjoy.com/fs-fsa@4.68.0':
+ resolution: {integrity: sha512-dC6VeW8uqXMF9Hkqb7qYST/t165XCHG+bNwwMzRetoNZRxJC8anr5XCJSAk5B+YLHGn6SP+noNltU6OFg/oa7A==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
- '@jsonjoy.com/fs-node-builtins@4.64.0':
- resolution: {integrity: sha512-/o7WRFhUWaM/fOrslwLZGnzn4RmRILykn+lAL+mNObqqRNw+CQSiij6hpCeZ+C7buhdoVo7go/OYqzaSUfDYmA==}
+ '@jsonjoy.com/fs-node-builtins@4.68.0':
+ resolution: {integrity: sha512-j3bb+k4NuqpqXQzinCLeagS7LGLCUvPqA6TnpaBkBqhnPjbzETYiQFpD7pWaV8cGOhhZcAv9dmpzk5mxNb1qsg==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
- '@jsonjoy.com/fs-node-to-fsa@4.64.0':
- resolution: {integrity: sha512-WDD9WVs0hb7UAEKTgZW2f66WDrbj7gIIWwpP3spbLyXa0rghtUaFTB8L4gdR3ZCWwiKIsj38/CNijpVmpnuPUw==}
+ '@jsonjoy.com/fs-node-to-fsa@4.68.0':
+ resolution: {integrity: sha512-dtLpmLQxw3IBcGxoK9tVvftwmQLl9qmQyivt8DZpeEwDUcQkxk2CLMZERXtmOlF1mWXfT9CqtjjMiswkb03rKw==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
- '@jsonjoy.com/fs-node-utils@4.64.0':
- resolution: {integrity: sha512-k5Indsx9hWW9xSF7Y6oSKKwtCUNhzZxadub3owhIlitc+iMRVlPPdX2duTKQWBL3qNWpXya8jykgaaWpheeS4w==}
+ '@jsonjoy.com/fs-node-utils@4.68.0':
+ resolution: {integrity: sha512-Q84pogSfRaz0WNrBBy+HzBmhNu4m6tWoM0po8bLwW4pKvrwrSadOgFpm1sku08sfg0QAtUubkWuZEBDpNI3toQ==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
- '@jsonjoy.com/fs-node@4.64.0':
- resolution: {integrity: sha512-dO+NNkODbUli4uV42bcNrrLvq5rE7SNpdZ5TNd0dtbLsAaNK3MDiIC9lUi+brboGoIjW6vd2fB1qao60nrk5xA==}
+ '@jsonjoy.com/fs-node@4.68.0':
+ resolution: {integrity: sha512-xYDlpSk3UDHjcI0kiz6kNJ/oVTEzlS7kUzAoAsgJh2/+yOtYV/eZW7M8O9Fj+ED3BDONYKt7+8OiPlWl6xpFeA==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
- '@jsonjoy.com/fs-print@4.64.0':
- resolution: {integrity: sha512-PHZFccchvkhWrwPWHjmVAhbC3vSHCtyZvlZfJJ3ho2bnzl450hXri6/8e6pbkWdH+SkmLXNml0sV8e5HDAfxKw==}
+ '@jsonjoy.com/fs-print@4.68.0':
+ resolution: {integrity: sha512-sdy9F6N9QEcyAcU8OxEQmB91mlgiyuMphTFeijQ+qFgigCOeT16lW3X1dCWNzD7wwKLOKXnnYqsFyeq4LWSlYQ==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
- '@jsonjoy.com/fs-snapshot@4.64.0':
- resolution: {integrity: sha512-oM7UDeL83q6NBzzsfKAsYKXKVXlykKFqqOLh4xZZKAzzROTlInkPbc6LTDGThEOnPiFiUzA7tYziHG9xavd76Q==}
+ '@jsonjoy.com/fs-snapshot@4.68.0':
+ resolution: {integrity: sha512-eV44t9KY9LH47aPR1a4Nv4xYxM1vQ+OKEw9Mx/3zkuxGOILwmtFddlh5HakdMFpFHwuFNPw1s+NGq2eVYFpQRA==}
engines: {node: '>=10.0'}
peerDependencies:
tslib: '2'
@@ -2496,8 +2514,8 @@ packages:
cpu: [x64]
os: [win32]
- '@modelcontextprotocol/sdk@1.29.0':
- resolution: {integrity: sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==}
+ '@modelcontextprotocol/sdk@1.30.0':
+ resolution: {integrity: sha512-xKd8OIzlqNzcqcNumGAa6g+PW2kjD5vrpcKOnfldAUPP3j7lnqMPwlTXQm8gF+UwH72z0lqaRbjr9hqGz0eITA==}
engines: {node: '>=18'}
peerDependencies:
'@cfworker/json-schema': ^4.1.1
@@ -2653,11 +2671,12 @@ packages:
resolution: {integrity: sha512-xJIPs+bYuc9ASBl+cvGsKbGrJmS6fAKaSZCnT0lhahT5rhA2VVy9/EcIgd2JhtEuFOJNx7UHNn/qiTPTY4nrQw==}
engines: {node: '>= 10'}
- '@napi-rs/wasm-runtime@1.1.6':
- resolution: {integrity: sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==}
+ '@napi-rs/wasm-runtime@1.2.2':
+ resolution: {integrity: sha512-JfB4kuJQjaoHuCTseIINHtHWeJnvgEcxjwA5t/Y00ZgaOO1Crz3fjT/p8kT28zA/Caz7oiUMn3d6H2yOVCVwuw==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0}
peerDependencies:
- '@emnapi/core': ^1.7.1
- '@emnapi/runtime': ^1.7.1
+ '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.3
+ '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.3
'@noble/hashes@1.4.0':
resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==}
@@ -2675,58 +2694,67 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
- '@octokit/auth-app@8.2.0':
- resolution: {integrity: sha512-vVjdtQQwomrZ4V46B9LaCsxsySxGoHsyw6IYBov/TqJVROrlYdyNgw5q6tQbB7KZt53v1l1W53RiqTvpzL907g==}
+ '@octokit/auth-app@8.3.0':
+ resolution: {integrity: sha512-/UaKmJCsOc5XBZwhnFiGNdLH/FkDF8lYtBn1QlKxtX7IpgaRB/XOXjixFtERAknyUZHxp3oDuoiG0En4VptJSg==}
engines: {node: '>= 20'}
- '@octokit/auth-oauth-app@9.0.3':
- resolution: {integrity: sha512-+yoFQquaF8OxJSxTb7rnytBIC2ZLbLqA/yb71I4ZXT9+Slw4TziV9j/kyGhUFRRTF2+7WlnIWsePZCWHs+OGjg==}
+ '@octokit/auth-oauth-app@9.0.4':
+ resolution: {integrity: sha512-Pe3du5LrC6dlv10b0RbarBlJtIT1Urq8BFoQklK8WmBw8YKnGgrANn7cQmHiA1v8AVihgi7YutV8MncP57I4og==}
engines: {node: '>= 20'}
- '@octokit/auth-oauth-device@8.0.3':
- resolution: {integrity: sha512-zh2W0mKKMh/VWZhSqlaCzY7qFyrgd9oTWmTmHaXnHNeQRCZr/CXy2jCgHo4e4dJVTiuxP5dLa0YM5p5QVhJHbw==}
+ '@octokit/auth-oauth-device@8.0.4':
+ resolution: {integrity: sha512-M/+34rmkxMvUnnTo/uqNeVRCXJoJ+5N34eNTbL1KMtIyJpedCTsu/iFL1cWdL+w5hQMlYt6xzXoyux2gn0OVnw==}
engines: {node: '>= 20'}
- '@octokit/auth-oauth-user@6.0.2':
- resolution: {integrity: sha512-qLoPPc6E6GJoz3XeDG/pnDhJpTkODTGG4kY0/Py154i/I003O9NazkrwJwRuzgCalhzyIeWQ+6MDvkUmKXjg/A==}
+ '@octokit/auth-oauth-user@6.0.3':
+ resolution: {integrity: sha512-t4OKUhrI5britmpRiSzPAz1TJPyUN/Hw1HEE3Hz/uElxcmnf/YCRSKtFRNc5gy4yJFTlXgk34H1lvxiotQJQvQ==}
engines: {node: '>= 20'}
'@octokit/auth-token@6.0.0':
resolution: {integrity: sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==}
engines: {node: '>= 20'}
- '@octokit/core@7.0.6':
- resolution: {integrity: sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==}
+ '@octokit/core@7.0.7':
+ resolution: {integrity: sha512-DcB0M3KFgr9ECI328lhBMVsyFT2DnmNucSBTqEN3exyNKUzkkpUSCHmTRcunF41Eou2TIQKW4seewri8ON9bSA==}
engines: {node: '>= 20'}
- '@octokit/endpoint@11.0.3':
- resolution: {integrity: sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag==}
+ '@octokit/endpoint@11.0.4':
+ resolution: {integrity: sha512-f1cOWoHPmxryJFknxbtDdjODWfV8A9tc8Aae6ermXPNgHFZ/x91AtHIz4gicEjL8hkJiip+u21QHJORfBv/qiA==}
engines: {node: '>= 20'}
'@octokit/graphql-schema@15.26.1':
resolution: {integrity: sha512-RFDC2MpRBd4AxSRvUeBIVeBU7ojN/SxDfALUd7iVYOSeEK3gZaqR2MGOysj4Zh2xj2RY5fQAUT+Oqq7hWTraMA==}
- '@octokit/graphql@9.0.3':
- resolution: {integrity: sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==}
+ '@octokit/graphql@9.0.4':
+ resolution: {integrity: sha512-5s15CCiY8XXQ+FG+b1YQcl6Z2FA++nwAz/tg2VUrTmnMncP+2nnGUEYANImdnxsA2Fnq+Mbl7hDjUTw7cFAwcg==}
engines: {node: '>= 20'}
'@octokit/oauth-authorization-url@8.0.0':
resolution: {integrity: sha512-7QoLPRh/ssEA/HuHBHdVdSgF8xNLz/Bc5m9fZkArJE5bb6NmVkDm3anKxXPmN1zh6b5WKZPRr3697xKT/yM3qQ==}
engines: {node: '>= 20'}
- '@octokit/oauth-methods@6.0.2':
- resolution: {integrity: sha512-HiNOO3MqLxlt5Da5bZbLV8Zarnphi4y9XehrbaFMkcoJ+FL7sMxH/UlUsCVxpddVu4qvNDrBdaTVE2o4ITK8ng==}
+ '@octokit/oauth-methods@6.0.4':
+ resolution: {integrity: sha512-96RsnxS7Hk/BQhUA1Qo2pmcYP6LWQRWMdo7bVbNE7ZCkFLhSUYBXVUj9tVnvhl4jzbwHYt/dcIG+ioY427b2sg==}
engines: {node: '>= 20'}
'@octokit/openapi-types@27.0.0':
resolution: {integrity: sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==}
+ '@octokit/openapi-types@28.0.0':
+ resolution: {integrity: sha512-0rFyLuyHvIj6uuZWuDslxkowFYdPXoNIkeAv4b27dzm2Tf4vGWXnPsMcxs7d65kLdMERgP3wc1AEPlqMz8e1cQ==}
+
'@octokit/plugin-paginate-rest@14.0.0':
resolution: {integrity: sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==}
engines: {node: '>= 20'}
peerDependencies:
'@octokit/core': '>=6'
+ '@octokit/plugin-paginate-rest@15.0.0':
+ resolution: {integrity: sha512-lw9A9YL5s4VPj+VEx8uMxaxQm2YTgrPDkrLEuZuu18R8TK3oPcXF4K6t52nx6xn1RcogZC9i188sAr/4XYJaQQ==}
+ engines: {node: '>= 20'}
+ peerDependencies:
+ '@octokit/core': '>=6'
+
'@octokit/plugin-request-log@6.0.0':
resolution: {integrity: sha512-UkOzeEN3W91/eBq9sPZNQ7sUBvYCqYbrrD8gTbBuGtHEuycE4/awMXcYvx6sVYo7LypPhmQwwpUe4Yyu4QZN5Q==}
engines: {node: '>= 20'}
@@ -2739,12 +2767,18 @@ packages:
peerDependencies:
'@octokit/core': '>=6'
- '@octokit/request-error@7.1.0':
- resolution: {integrity: sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==}
+ '@octokit/plugin-rest-endpoint-methods@18.0.0':
+ resolution: {integrity: sha512-1wM02pQTHEarWYij0Bb4gu8X8fBy2FJdI4HMTSFDxtYLbOkJErGVx5ywmM6jeS8tOmC0iCiRLrn6YsSIecUeOQ==}
+ engines: {node: '>= 20'}
+ peerDependencies:
+ '@octokit/core': '>=6'
+
+ '@octokit/request-error@7.1.1':
+ resolution: {integrity: sha512-+eaY7G2VVpSf2pc5Gn1+mph837V/d/TYTJAgWL9Tb0ogGYcpN3IlAVFgjL+Vv93F/sevrxkvsYCedtpLdcFLzA==}
engines: {node: '>= 20'}
- '@octokit/request@10.0.11':
- resolution: {integrity: sha512-+s7HUxjfFqOMS9VlIwDffq0MikjSAK0gSpG73W+meAvVAvX4MBrHYTK5Bj3Uot55qFT4gzUtfzE4mGWY4Br8/Q==}
+ '@octokit/request@10.0.13':
+ resolution: {integrity: sha512-v2269YxL9Yf+x3d+gRI63FP0vFQEiWgLyBzxe/Y+0yFDg2B/Tzf5dhh9VNfccVAQnfcfwQWyk/y6Bn7rUXXs7A==}
engines: {node: '>= 20'}
'@octokit/rest@22.0.1':
@@ -2754,6 +2788,9 @@ packages:
'@octokit/types@16.0.0':
resolution: {integrity: sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==}
+ '@octokit/types@17.0.0':
+ resolution: {integrity: sha512-ByP1v7YL5SMveFPP7+sj0/ZuWCOOg/Chs4NafOMpq6WNIM/hdGY0S7C0TCGDBWu1aGmOxmUIhMx3cO+IdwYZ1Q==}
+
'@open-draft/deferred-promise@2.2.0':
resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==}
@@ -2783,129 +2820,129 @@ packages:
resolution: {integrity: sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg==}
engines: {node: '>=14'}
- '@oxc-parser/binding-android-arm-eabi@0.140.0':
- resolution: {integrity: sha512-ZfjDZ422mo7eo3b3VltqNsV9kmv1qt/sPEAMSl64iOSwhVfd0eIZ9LB79Mbs1xYXJnk7WSROwzBCKDIiVxPTvQ==}
+ '@oxc-parser/binding-android-arm-eabi@0.142.0':
+ resolution: {integrity: sha512-ZiRGDutGsv1G6bL/ozy/koC0Sv39T1DqyoC4KD1DOy9ZoACm1O5UWhEK2c02Qdk+4lfLVkvFa/mQ0fm/4h1BtQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [android]
- '@oxc-parser/binding-android-arm64@0.140.0':
- resolution: {integrity: sha512-Ia8jSvikUX6Sf+Ht+KOCUF/k1HpR0VlmqIYymubmWDebOEGtsyliHDR6JxsZ4IX3/c/GbrB1uh09aVGQv/LQmQ==}
+ '@oxc-parser/binding-android-arm64@0.142.0':
+ resolution: {integrity: sha512-WZkvGRLNQTz8lR9zP5nLjUdlroRCopBu3g9zF1p/laE6DzT1UbQo8Rdz5MWhaJUPYg/6gp+jo7HUgsyKaN1FtQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [android]
- '@oxc-parser/binding-darwin-arm64@0.140.0':
- resolution: {integrity: sha512-G6VK0nK61pH0d0mBjUqSZbVxGqqO5uzeginLDQj+gOO6ObfJjXRwgkD/ol0w1INcnFeAb6YGGO7qc3ueGHaycQ==}
+ '@oxc-parser/binding-darwin-arm64@0.142.0':
+ resolution: {integrity: sha512-l4khS8LQOOVYsGRVARo1gSaCT/aBSceUVXgtovWc2+drnxVuDr082WA3OCHVdVzIz5JIrP/y9CWsSKxBDNmYGg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [darwin]
- '@oxc-parser/binding-darwin-x64@0.140.0':
- resolution: {integrity: sha512-HazBOuZzd2pO1C2uMmp8Gv7mhzMHqKSKDS1OZfcLEvpIcgA+48J92HEtNanVHDIzRD9PRPCV6aS6fkZIWOVl8Q==}
+ '@oxc-parser/binding-darwin-x64@0.142.0':
+ resolution: {integrity: sha512-QBsNF3nqlXmcH2B1YOPqQYmCJoy4HuIjUxGbBO/k5JAJUl68ghU2psRY2zPk+RyBaWqKP/qfL4oaFgEMCdwskA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [darwin]
- '@oxc-parser/binding-freebsd-x64@0.140.0':
- resolution: {integrity: sha512-9hSUU+HmTUyOe4JzMHxNGgLWNY7rrO+6ShicZwImNJacEAACDMIkuEQQkvXSL+WJN50jaNtLYJv8s4OcBdpyUQ==}
+ '@oxc-parser/binding-freebsd-x64@0.142.0':
+ resolution: {integrity: sha512-b7Q7m4Cqc6XqNhri3R+QhU+GVy646Pn+bkdhrDdWym/Fdi0ZUa+d73H9dm5H91JtbtAQ/z1d8XKMW3oOV8a4tQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [freebsd]
- '@oxc-parser/binding-linux-arm-gnueabihf@0.140.0':
- resolution: {integrity: sha512-RAEuQsYtS0KcDFqN0ABTjyyNlokS91JeuDuoW9tEbG0JTbRNXnpQUdbYc/16JoA6Z/2ALbNrE3KmxtqDiuIjCQ==}
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.142.0':
+ resolution: {integrity: sha512-3riVS5IhdH3uCZj1Y9ftDQlR0dvLsIlw/edrRqk8JhgNd5K0XSs+UBtgh50N13CAlW9/TXj6sVGXaKNBocd0Yg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
- '@oxc-parser/binding-linux-arm-musleabihf@0.140.0':
- resolution: {integrity: sha512-c4CkHvPvqfojouredJ0w3e6+jiBq0SbFyhH61kr/zPb/7XsaYTNKQ54vmlSsopfdQbNDX40ZeK9Abs2Qet6wcw==}
+ '@oxc-parser/binding-linux-arm-musleabihf@0.142.0':
+ resolution: {integrity: sha512-NmXUOpgpTSkhl795TiXmWppTwmSJ92RC1qvD6e4XOF+slgmo3e6Ah+kEu+6AN8s7NAOEwqGmir58MgSQSWmBSA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm]
os: [linux]
- '@oxc-parser/binding-linux-arm64-gnu@0.140.0':
- resolution: {integrity: sha512-yrjmLj8ixPB25yqvPGr28meGjb+keed7m1GqqY/0uqkhZIoT4t9zmfwUgFEtC33C7dtE+UQ7TU0IaVxf97SWJg==}
+ '@oxc-parser/binding-linux-arm64-gnu@0.142.0':
+ resolution: {integrity: sha512-gc0EXsKtXgerujmU2Bql3u1L1HsSQ2774R83idq/FoNMPVV/RY/1ErFsvnit7KoiP/sLvzQixeUo4Ut0ic0wmw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [glibc]
- '@oxc-parser/binding-linux-arm64-musl@0.140.0':
- resolution: {integrity: sha512-ggGMQTN8Agwxp2WiLMpdY671dt0qTDJWiWlJeig3HnUwTnerRl0J2JdGVghWBeDcss2D9S2V2Js6dZHEiVabVA==}
+ '@oxc-parser/binding-linux-arm64-musl@0.142.0':
+ resolution: {integrity: sha512-F2XvmWSE0uWpie+jHKKIFgdVOe9ypGhkEZxKx5DuW215K6cbAC274yYaPkcM7EqY4Df3Weyhpcz3lsURyH2LVg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [linux]
libc: [musl]
- '@oxc-parser/binding-linux-ppc64-gnu@0.140.0':
- resolution: {integrity: sha512-IgTs8xYAFgAUGNmR65tIqjlJ8vKgrfXzC515e9goSdfMyKQV4aJpd2pUUudU4u51G64H0/DSEJEXKOraxm9ZCA==}
+ '@oxc-parser/binding-linux-ppc64-gnu@0.142.0':
+ resolution: {integrity: sha512-wLMbT21U/QxknQsk+VvNF0b9D2/aGWhcaQQQ+VYlE8FwD5+GoWZIPPXNzyHmkYyhm0KB3itL+TBavjMatqNnYA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ppc64]
os: [linux]
libc: [glibc]
- '@oxc-parser/binding-linux-riscv64-gnu@0.140.0':
- resolution: {integrity: sha512-A1x+PMWZmSGaFVOx2YeNTFau8uD+QO14/vLP4GrcuvUPs3+nBkUOjy9Lus86ftHsDojjYMbvBelmKc3F7Rv08g==}
+ '@oxc-parser/binding-linux-riscv64-gnu@0.142.0':
+ resolution: {integrity: sha512-+G8F/4ckwT7FCJV4H2bt09xEzJbjNCfuL4Sp1AYNaFtFMVtgIGMuJlteT82U+K0UIZ/DzAR/LDlMFnEuajG7Kw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
libc: [glibc]
- '@oxc-parser/binding-linux-riscv64-musl@0.140.0':
- resolution: {integrity: sha512-zBqpfRo2myWPrPo5xUjeZqlnPXPXsX8BcWtWff66/eGRQdbPjhzPgXa/F+AtxT2afUViPxbuDlwscMKzQ5tg+g==}
+ '@oxc-parser/binding-linux-riscv64-musl@0.142.0':
+ resolution: {integrity: sha512-hTsHtTLxMAfCo+rpF5K3qZJKW2NpPN/CHd4mYB3y7XlSdspHkd2gehDIofP64AacA9nWQw2tY3O7wR6UY8IVOA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [riscv64]
os: [linux]
libc: [musl]
- '@oxc-parser/binding-linux-s390x-gnu@0.140.0':
- resolution: {integrity: sha512-2M1DPm/8w9I//YzFlFC9qXw+r2tJFh5CYwRlYTq2vUJQS7qoQftEDeCZ8EnN7KHtvSiXvYj8mZI5pR7DpXmcEw==}
+ '@oxc-parser/binding-linux-s390x-gnu@0.142.0':
+ resolution: {integrity: sha512-6y7qYY3TCUDYjqswImdTGl92y+KA/80twALegQPN27kfY+bG7Ib1+L3jbmrCZQx6wrVnai9IPsEZp07I0hx7JQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [s390x]
os: [linux]
libc: [glibc]
- '@oxc-parser/binding-linux-x64-gnu@0.140.0':
- resolution: {integrity: sha512-8aRDbZ/U/jO8N7go1MO72jtbpb4uswV8d7vOkMvt/BPgZiyEYvl1VIWK4ESxZZhnJ4tqwVldgX7dNiP/eB1Jdg==}
+ '@oxc-parser/binding-linux-x64-gnu@0.142.0':
+ resolution: {integrity: sha512-i69kAWU+2LgoH5bR+zWiiu+UzAw7Oxkwv7COeJTeY19pn4e70nKQcr9Pm6cL2Z0Z54d+gl9qADlK/0yyuCPiBA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [glibc]
- '@oxc-parser/binding-linux-x64-musl@0.140.0':
- resolution: {integrity: sha512-xRqpeI8U2sQQS1W5BMWRyMTxtagkuLG2dEWruet5lFsWHTvBth11/TpSaJatHdqVVwHN0q3uuoS9zRsGinq8hg==}
+ '@oxc-parser/binding-linux-x64-musl@0.142.0':
+ resolution: {integrity: sha512-4SQs678MmjYVrmhAgCWD4o0vpaFszXw9xLX5p2Z9MMFcltxiLkA88wQjh80YHjPrXtpyZ2CWI5m+1yNKM0m2Pw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [linux]
libc: [musl]
- '@oxc-parser/binding-openharmony-arm64@0.140.0':
- resolution: {integrity: sha512-GbGRe26MqAKciFRvXeHNQJ6VAHYs9R4miP89sEAncysM3n+f4lnyLWgsa9kklJNpfnxdq2yRoNYHFqwBckVimw==}
+ '@oxc-parser/binding-openharmony-arm64@0.142.0':
+ resolution: {integrity: sha512-YHpx9N7Ln3a++Tc8rv+H7mrK1zyJQOAwCFg8LZ3lTs1T5afGWeZrLPhPT9HLnIwSjCyJqPWVMIrMxbjcmBr2oQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [openharmony]
- '@oxc-parser/binding-wasm32-wasi@0.140.0':
- resolution: {integrity: sha512-vFiC1hqys+hkX1GnQkIoiTQJNiUm43Z0lO35ETKXTw0YtpW7+cN58YRRXFAQQ+TgpkIi3lrhcxdlnqz+Oi3ptQ==}
+ '@oxc-parser/binding-wasm32-wasi@0.142.0':
+ resolution: {integrity: sha512-3pLDyY3+oogW73RM5uehNgAiR/Xfb7fvO2Q1Z1gIqZ2+50XDVQmBVlRkHXZTU4gKnQHpwETNsYQVsJ3joVB2iA==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [wasm32]
- '@oxc-parser/binding-win32-arm64-msvc@0.140.0':
- resolution: {integrity: sha512-fGSQldwEYKhM+H8uLt76Op8hh5+FYaR6lvvQ1Txw3Mhn86DyQXLcI0fi1EkFlTK7F+46OCk/j0AJMzZQm6g5Xg==}
+ '@oxc-parser/binding-win32-arm64-msvc@0.142.0':
+ resolution: {integrity: sha512-Had/VeVY28Oyb0K+Q4FV8KCzoBycIh93oDK6pCbya9lkzdq+ikMHMgBubsdqqlybjJmQRawCQRrnBRHyQwYvcQ==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [arm64]
os: [win32]
- '@oxc-parser/binding-win32-ia32-msvc@0.140.0':
- resolution: {integrity: sha512-sDS2Bai+g3ZWYwfZqmosiSuFDBcVnZ3Ta6pszzsiJoLMqsJEWKcxXXbGa7b7yXr++W2lQNPb3ZRJ8czseqL7RA==}
+ '@oxc-parser/binding-win32-ia32-msvc@0.142.0':
+ resolution: {integrity: sha512-GGi3+YphVHavvgs6gum2UXoNCqzHAmPt/nXkn8ZQZstV2Q1qZD1Mn8fz/nWrDkefHQtrG/+1/XrbMxsBTo6Svw==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [ia32]
os: [win32]
- '@oxc-parser/binding-win32-x64-msvc@0.140.0':
- resolution: {integrity: sha512-kHbE1zWyb5OQgJA6/5P4WjiuB01sYdQwtZnSSyE58FQEXDAMnyeeq4vj7KgN75i5SlBzOs8A5MrtlD3gOlDKqQ==}
+ '@oxc-parser/binding-win32-x64-msvc@0.142.0':
+ resolution: {integrity: sha512-Ny/Wv4Us1LGC/ljwNTp+Hx3r/pH15EFfeDF0p+n898gt+TtRd6C9SccHcuUhDiNTb8s5tt7jdeAMDRQZ4Vq6hg==}
engines: {node: ^20.19.0 || >=22.12.0}
cpu: [x64]
os: [win32]
@@ -2916,6 +2953,9 @@ packages:
'@oxc-project/types@0.140.0':
resolution: {integrity: sha512-h5LUOzGArYemnW1NMz/DuuQhBi96J6JL2Bk8zE4kvqxB5Sg3jxmCiH4uyOWHDkiKSt5vWlG4FIwCR/DbstcNRQ==}
+ '@oxc-project/types@0.142.0':
+ resolution: {integrity: sha512-7W+2q5AKQVU36fkaryontrHn3YDt1RyUYXatw9i5H8ocYe2sPKSFB6eS8WNPeRKiN1qAWWZUPm7gwFzJGrccqQ==}
+
'@parcel/watcher-android-arm64@2.6.0':
resolution: {integrity: sha512-trgpLSCKRC/huFjXX/Smh+0sWe4+YtKfktIToiMl59ghz7z+qkH6kMvNnUbLyRs9N11t8l4svSCs1+5B3rOAhA==}
engines: {node: '>= 10.0.0'}
@@ -3582,8 +3622,8 @@ packages:
'@types/express-serve-static-core@4.19.9':
resolution: {integrity: sha512-QP2ESEe/ImWY0HDwNAnK9PvEffUyhLTnWkk7KXzHfyeWAnlrDe1fN77bXl6ia8KT3wPlmA7t9/VPRpnf4Ex9sg==}
- '@types/express-serve-static-core@5.1.2':
- resolution: {integrity: sha512-d3KvEXBSo/lOAMc2u6fkyDHBvetBHeqD7wm/AcXfLpSOQwlmG9D/aQ0SFswVjv05p7ullQS7Mjohj6/VdbZuTg==}
+ '@types/express-serve-static-core@5.1.3':
+ resolution: {integrity: sha512-dPfW8NFiOF4wOHc7+N/QSxlY9cfSsenewGbAz8C8U/MULPd/YZ27LvJUIlzaXie7e6Ove9YunJGgC9tbHD2cKw==}
'@types/express@4.17.25':
resolution: {integrity: sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==}
@@ -3630,8 +3670,8 @@ packages:
'@types/loader-utils@3.0.0':
resolution: {integrity: sha512-oOi4OGpiLUbb+Q/cN9FIkkDFgOpOGZ2cUAzb5i03wrGstnG6Syx1WDMhSiB5rcP10XX7cw7Uev8mv++/aplnNg==}
- '@types/lodash@4.17.24':
- resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==}
+ '@types/lodash@4.17.25':
+ resolution: {integrity: sha512-+K1NIO8I+F9/wNulfVvu23QYd0Pe9/OCqRrim4NoYIf1VoEDL90Ve4ClzpyqBLc7NpGGWRvYNCKZ1BE/Jpf8dQ==}
'@types/micromatch@2.3.35':
resolution: {integrity: sha512-J749bHo/Zu56w0G0NI/IGHLQPiSsjx//0zJhfEVAN95K/xM5C8ZDmhkXtU3qns0sBOao7HuQzr8XV1/2o5LbXA==}
@@ -3681,8 +3721,8 @@ packages:
'@types/retry@0.12.2':
resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==}
- '@types/semver@7.7.1':
- resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==}
+ '@types/semver@7.8.0':
+ resolution: {integrity: sha512-1mAINjtQCXXeLkJ9ehXkwOcBpqtLxiVtKhpUf83DdRNdQKV0iXZpaHYqRr7nj+wvxuJzoAmAwXI+sCNMv1CzLQ==}
'@types/send@0.17.6':
resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==}
@@ -3771,8 +3811,8 @@ packages:
resolution: {integrity: sha512-qjhfuTfLXjA4IOzXvz0rTjT01BqEiIgPoUeMwiEjnaHKJMTNo8rH5pYW1a2L/0Dnux2fPC85AeyJoWaGa8WxTA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/types@8.65.0':
- resolution: {integrity: sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==}
+ '@typescript-eslint/types@8.66.0':
+ resolution: {integrity: sha512-H6gcYaSDOyvL3AD/jHUtUFo2jqGgn/F6nuyuZSu0QTesxL+cP4dQoIMrODRofuJC09g64+WgZ6tE19Y1N2YIFQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.64.0':
@@ -3804,6 +3844,10 @@ packages:
resolution: {integrity: sha512-VtpBz9R61GTFUxPiQmBhCOffQZRJZMA2EXO/FzbaoNczm/Xt2KkDJq0PPwV5qmRGeouDRxEKUQ+caJGVN0W7Ww==}
engines: {node: '>=18'}
+ '@verdaccio/core@8.2.1':
+ resolution: {integrity: sha512-fcK9lGTXSxrNncbShtt5sCfFPiP2GdsQmhXdeu4HDIH9GU8cLF5Jj/QBpLjMuz+lB+qHg6QBFlUKS0pnio20jA==}
+ engines: {node: '>=22'}
+
'@verdaccio/file-locking@13.0.1':
resolution: {integrity: sha512-SZ9uxnQKppiM+/67xTaaBP4AZ/Q+weUB22ci1gF861icYWhWFu3njA3ofYig/4yNqkYRVEKVAIwnH97BaBEYbg==}
engines: {node: '>=18'}
@@ -3985,19 +4029,13 @@ packages:
resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
engines: {node: '>= 0.6'}
- acorn-import-phases@1.0.4:
- resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==}
- engines: {node: '>=10.13.0'}
- peerDependencies:
- acorn: ^8.14.0
-
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
- acorn@8.17.0:
- resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==}
+ acorn@8.18.0:
+ resolution: {integrity: sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==}
engines: {node: '>=0.4.0'}
hasBin: true
@@ -4227,9 +4265,9 @@ packages:
bare-abort-controller:
optional: true
- bare-fs@4.7.4:
- resolution: {integrity: sha512-y1kC+ffIx/tPLdTE693uNjHfzTfr+ravR5tvWlMXe25nELbkqV400S71qHDwbkAQ1FVEZobB1NFRzFbCCcyBCQ==}
- engines: {bare: '>=1.16.0'}
+ bare-fs@4.8.0:
+ resolution: {integrity: sha512-fM+MhCvdQhZ7NV6S95a07gPSqjIYKn6mFaXfx266wN3ajZGl/+1AzH+ubkXQ0fFZvOe2nk9VHkzdYkQE5zMV3Q==}
+ engines: {bare: '>=1.28.0'}
peerDependencies:
bare-buffer: '*'
peerDependenciesMeta:
@@ -4253,8 +4291,8 @@ packages:
bare-events:
optional: true
- bare-url@2.4.6:
- resolution: {integrity: sha512-iQxPClE07hETVpbRoX7JXX3v/ZQViCxe/SYCxylRLzdEx1xJAufPptfiOqR8tqiCtmbtMDANKWszzjLu1PMAZQ==}
+ bare-url@2.5.1:
+ resolution: {integrity: sha512-cD5ciQuKlx+eumTCfqbfiL+fhQm+dHbVNB/cX4+d+I/nx4JsVop9VoFEPAs5RJ6I84QR6bZIBjpd2kjDOYeWcg==}
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
@@ -4263,8 +4301,8 @@ packages:
resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==}
engines: {node: ^4.5.0 || >= 5.9}
- baseline-browser-mapping@2.11.0:
- resolution: {integrity: sha512-oCu2wfipvX3AePSgmOuKkIywOu+8n9psz7hXYmk56ghpu3+7KzNIBopaOs4c9BrtdnTtW30unG9GTfHo7EwERQ==}
+ baseline-browser-mapping@2.11.13:
+ resolution: {integrity: sha512-k9HNuUVMlqVjQ9UHzfPjIqiDbWw7WqT1AoT7GL8VwvF3r0ZfArtgiSPAlmupyNquNgOJHTuH4CKYf8ttMTWBTQ==}
engines: {node: '>=6.0.0'}
hasBin: true
@@ -4308,21 +4346,21 @@ packages:
resolution: {integrity: sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==}
engines: {node: '>=18'}
- bonjour-service@1.4.3:
- resolution: {integrity: sha512-2Kd5UYlFUVgAKMTyuBLl6w49wqfOnbxHqmuH0oCl/n7TfAikR0zoowNOP5BU4dfXmm+Vr9JyEN370auSMx+CNg==}
+ bonjour-service@1.4.4:
+ resolution: {integrity: sha512-jCZcVv7eoc4QesRscwEZtSROBen+6LpKAmBIsQYQrsAeVHLyMXWX/t6eIV5KiRZYNUBl8eVqImEEMQ8L5+c/Kw==}
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
- brace-expansion@1.1.16:
- resolution: {integrity: sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==}
+ brace-expansion@1.1.18:
+ resolution: {integrity: sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==}
- brace-expansion@2.1.2:
- resolution: {integrity: sha512-w5JZcKgdhDOgOwm8H+KgbosopHMuGcl6qbulwjtz3SM7I7P3yW1eAjzMPLrIE+NQ9vjgANKHWeMHnrT0OXW1oA==}
+ brace-expansion@2.1.4:
+ resolution: {integrity: sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==}
- brace-expansion@5.0.7:
- resolution: {integrity: sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==}
- engines: {node: 18 || 20 || >=22}
+ brace-expansion@5.0.9:
+ resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==}
+ engines: {node: 20 || >=22}
braces@3.0.3:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
@@ -4346,8 +4384,8 @@ packages:
browserify-zlib@0.1.4:
resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==}
- browserslist@4.28.7:
- resolution: {integrity: sha512-JxV13hNrFxqjOc8alRbq9dK1MM79NEXYpma2B2J4wAtpWS5zIEIKqWPGCl7N4o7Uc7B7itylh7SuDujATRyyTw==}
+ browserslist@4.28.8:
+ resolution: {integrity: sha512-V2NpofLblG64mfOtSgDhOJESZEGogzDMBv/q+W6oc4LXWP/q75eOXoOaaOu1EOadB9U4Bwx/e0yzbvwKH8zalA==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
@@ -4403,8 +4441,8 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
- caniuse-lite@1.0.30001806:
- resolution: {integrity: sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==}
+ caniuse-lite@1.0.30001809:
+ resolution: {integrity: sha512-xxWVywk6a6Arlk+hymeycyn/VgqEfLDxupvhH/xiY5SJ/18kmi9o6MiO320DCUzypORHLtvh0I4i04tUhCNHNQ==}
caseless@0.12.0:
resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
@@ -4571,8 +4609,8 @@ packages:
resolution: {integrity: sha512-cs+LadpH7Kpw0M3k8wurk+sOVVDAENA0iK4OBOrkL94j5lEVYRJ4j3zd2bhY9qgzyrPqthdcYT3axzRN7AliMg==}
engines: {node: '>=22'}
- conventional-commits-parser@7.1.0:
- resolution: {integrity: sha512-DPp6hkUjvwIivxbkrTiLXeRswNv1A/4GFA2X6scXma0AMa9632V3TwxmrlkUIEtUktiM3Ln+RrSH2xlP3/jUTw==}
+ conventional-commits-parser@7.1.2:
+ resolution: {integrity: sha512-O+x4N2yH+ijvqWlIyTHsXTAP+algNWgGbjY2duCe8w2vUMvUB95cLRslCPfTMQyLAKlet3bhZTdu6ozn4M+QJQ==}
engines: {node: '>=22'}
hasBin: true
@@ -4603,8 +4641,9 @@ packages:
peerDependencies:
webpack: ^5.1.0
- core-js-compat@3.49.0:
- resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==}
+ core-js-compat@3.50.0:
+ resolution: {integrity: sha512-XGpFGbMLHwSt74YLTKho7Ib242qi6O8MSX+sRokV4oz7iKXvQWGYZthjIhjRGMxjzVkAubBO512dKGYcefmX3Q==}
+ engines: {node: '>=6.4.0'}
core-util-is@1.0.2:
resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==}
@@ -4867,8 +4906,8 @@ packages:
engines: {node: '>=0.12.18'}
hasBin: true
- electron-to-chromium@1.5.395:
- resolution: {integrity: sha512-7zt9Aw+SrmxLWLN0zhaTWZQiCdryLVrYTq5R7iZakLvi2UQPYMMsROYV/2qVCzMeCiSXHwKOU+sZ4zOVVlrtKA==}
+ electron-to-chromium@1.5.403:
+ resolution: {integrity: sha512-MQsYmdaLzvaCX5j+ZZBr5Fm6uCCnPQcRtlvmvRlWqrXy+BH2O4ffXIAScF+JQznQWB9brWp4lSD9Z4yNmaf2BA==}
emoji-regex@10.6.0:
resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
@@ -4912,8 +4951,8 @@ packages:
resolution: {integrity: sha512-clKkw4C7nJ22mGgoVcCg6V/W/TxdNyIOTr89k2ONZu81qqkddPFDF0LXcbAwhzPD8DjkiRCjzuiO6Y+fkpD4vg==}
engines: {node: '>=10.2.0'}
- enhanced-resolve@5.24.3:
- resolution: {integrity: sha512-PwKooW9JUzh5chmYfHM3IQl5OkK2u2Nm011MgeZrss3JmFraUx/fqrf78kk8GUMYoibx/14MdwTl/1WKkG7TpQ==}
+ enhanced-resolve@5.24.5:
+ resolution: {integrity: sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==}
engines: {node: '>=10.13.0'}
ent@2.2.2:
@@ -4987,13 +5026,13 @@ packages:
resolution: {integrity: sha512-yPDz7wqpg1/mmHLmS3tcfTfbw5f1eryXvyghYBffGdERwe+mV7ZcWzTR8LR17Kvqt3qfPurjlonmnq3MKXIOXw==}
engines: {node: '>= 0.4'}
- esbuild-wasm@0.28.1:
- resolution: {integrity: sha512-p/GD4E8oYRjg3kjdKrnMb0s4PzXgJF42e0MF4H0+ACyK/kIlFRp3e0fzOleIG+wBBm6MM3XQrbpe7soEA+vJIA==}
+ esbuild-wasm@0.28.2:
+ resolution: {integrity: sha512-GccVwhv3mmOUVQHCQm2Ox/rby8n/EqUwvZxE6Pjfikrq/lWw9g9WX/u9EykWnpot3Ko6j426DgQdea2xWKIAQA==}
engines: {node: '>=18'}
hasBin: true
- esbuild@0.28.1:
- resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==}
+ esbuild@0.28.2:
+ resolution: {integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==}
engines: {node: '>=18'}
hasBin: true
@@ -5151,8 +5190,8 @@ packages:
express-rate-limit@5.5.1:
resolution: {integrity: sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg==}
- express-rate-limit@8.6.0:
- resolution: {integrity: sha512-XKJXDsASUOo0LLtFwW5hCcQGH0N4WQc/Rn8/Pvoia+TJFOkkFPvrtW9lZOeeNcxQJspvOIERMwiRLsVFlhHEkA==}
+ express-rate-limit@8.6.2:
+ resolution: {integrity: sha512-YH4ru+eOJxQABscKFfRCy9R7x9QFGdezclVMwwgFFndzS2Xnm0uo6B0ABZsLhcpeptGv2qvuJVWlQr9gQZoC3A==}
engines: {node: '>= 16'}
peerDependencies:
express: '>= 4.11'
@@ -5198,8 +5237,8 @@ packages:
fast-string-width@3.0.2:
resolution: {integrity: sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==}
- fast-uri@3.1.4:
- resolution: {integrity: sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==}
+ fast-uri@3.1.5:
+ resolution: {integrity: sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==}
fast-wrap-ansi@0.2.2:
resolution: {integrity: sha512-7F2Fl+TjRSenLqlU3UjSH0iyqopqoZIu7eZVpEirP2g1GtWa2G/ecEmBdgz31+Mxr+ELclgg6sokpSFIQiZ02Q==}
@@ -5260,8 +5299,8 @@ packages:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
engines: {node: '>=10'}
- firebase@12.16.0:
- resolution: {integrity: sha512-CNw6hFBdONkzF8UGLDx/RDRY9gVa5VmJNHd7qi4gdmA3ZuLkuOrhmWefB2l+FN+OxFpN77Itq7aO6zlTi780ag==}
+ firebase@12.17.1:
+ resolution: {integrity: sha512-dhp41ye9jMQvhx5FwjMkf/hjDHJApl7gXmvzOZGvP0M7c/GZGUnQ4qvsvlOBkF0Pa7wAwHMdcpL0ON2pXCQ4Sw==}
flat-cache@4.0.1:
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
@@ -5271,8 +5310,8 @@ packages:
resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
hasBin: true
- flatted@3.4.2:
- resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==}
+ flatted@3.4.4:
+ resolution: {integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==}
folder-hash@4.1.3:
resolution: {integrity: sha512-94fj+fXj1XHT8zGumUy/VlyFARc/yrslKJ2+vjrP/U6ftTdL7u68+gQhvSBjz9wrwTuty6BpZ7JsbEK5OU9RNw==}
@@ -5358,16 +5397,16 @@ packages:
resolution: {integrity: sha512-YGGyuEdVIjqxkxVH1pUTMY/XtmmsApXrCVv5EU25iX6inEPbV+VakJfLealkBtJN69AQmh1eGOdCl9Sm1UP6XQ==}
engines: {node: '>=18'}
- gaxios@7.2.0:
- resolution: {integrity: sha512-CUVb4wcYe+771XevyH6HtGmXFAGGKkIC3kswAP8Z1JCe0j80JMaTPZH930DWFrvo0atjh18Arc0pEyUCWa5bfg==}
+ gaxios@7.3.0:
+ resolution: {integrity: sha512-RB5vLV+vvQeoFPCX4QMK6/hjVkbIamPp1QSUD0CiZcnj12qbpiL+pLbYtgD+oZkWl0tl9z+o2Utp+MpM3QRhBA==}
engines: {node: '>=18'}
gcp-metadata@8.1.2:
resolution: {integrity: sha512-zV/5HKTfCeKWnxG0Dmrw51hEWFGfcF2xiXqcA3+J90WDuP0SvoiSO5ORvcBsifmx/FoIjgQN3oNOGaQ5PhLFkg==}
engines: {node: '>=18'}
- gcp-metadata@8.1.3:
- resolution: {integrity: sha512-ziTrzUhhpL9Zk5k0HHzgP/KIpWDJT0VMBC/ynt/QIBvTW+UUcSivQRl6VlwTf/EilDxtSWklHoRsKy1c4k+59w==}
+ gcp-metadata@8.1.4:
+ resolution: {integrity: sha512-iJ9KMsiu+xKtNRX0PmGLSaIU3bUBAyzWTyqKemKPzNPsmmsBCQYmlNg+brEbES7IHSXtdVwzBPzx1vz3FAaipw==}
engines: {node: '>=18'}
generator-function@2.0.1:
@@ -5460,12 +5499,12 @@ packages:
resolution: {integrity: sha512-7ABviyMOlX5hIVD60YOfHw4/CxOfBhyduaYB+wbFWCWoni4N7SLcV46hrVRktuBbZjFC9ONyqamZITN7q3n32w==}
engines: {node: '>=18'}
- google-auth-library@10.9.0:
- resolution: {integrity: sha512-xtvUqvINPhTaBm7nXqlYPcrMHJPm1lCNdSovxnKKhTm+4JsvQ+KGVYJViLoH9Yxu8w+T0Qv5HubzYT9BLrppJg==}
+ google-auth-library@10.9.1:
+ resolution: {integrity: sha512-i1ydyHrqcIxXkWh/uBmVkzCvIuq5yiK2ATndIe5XxKholrG/MTYP9xGYka4sQhrbIAgGjL2B6NOE7rFaiF3fXw==}
engines: {node: '>=18'}
- google-gax@5.0.7:
- resolution: {integrity: sha512-EhiqaWWJ+9h7sCcKJTsoo6tMcjokVHhWsbSuWCnZJT4vIBP3y4mAoFLnt9SzgkVZeq24ZsFaArr06nnYYku2yA==}
+ google-gax@5.0.8:
+ resolution: {integrity: sha512-M4vpZcXQIC1gqIVGQ7eaU3jXQA6zecStyTXu514TYfThlgSurYJOxHZo9fzU6hAgwPWvuEynAVHWyaIk80VeEA==}
engines: {node: '>=18'}
google-logging-utils@1.1.3:
@@ -5540,8 +5579,8 @@ packages:
resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==}
engines: {node: '>= 0.4'}
- hono@4.12.31:
- resolution: {integrity: sha512-zJIHFrl6bq3RDd2YusFNCDlM8qUprxKswyi/OPzPyzKDdyBXDqWx8bZlZ7R+saTdSTatUmb3O7K4SspGPaEOQg==}
+ hono@4.13.1:
+ resolution: {integrity: sha512-kdJoFVv2xmayw6cY09H7AbMJMt8Jn5jdlEdXsP7AGBdF2DIptVlKlOLKXP41yPip4/a3yQPv9gVcJYI8YY04dw==}
engines: {node: '>=16.9.0'}
hosted-git-info@10.1.1:
@@ -5706,16 +5745,16 @@ packages:
resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
engines: {node: '>= 0.4'}
- ip-address@10.2.0:
- resolution: {integrity: sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==}
+ ip-address@10.5.0:
+ resolution: {integrity: sha512-R5SnVLJmgYYvf2F2ZgwSBnelz5G4q5AxIC277GDfUaNbrZKNANcBC7RHqYYePlszf4kBolVkJauG0ZjHHFh55g==}
engines: {node: '>= 12'}
ipaddr.js@1.9.1:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
engines: {node: '>= 0.10'}
- ipaddr.js@2.4.0:
- resolution: {integrity: sha512-9VGk3HGanVE6JoZXHiCpnGy5X0jYDnN4EA4lntFPj+1vIWlFhIylq2CrrCOJH9EAhc5CYhq18F2Av2tgoAPsYQ==}
+ ipaddr.js@2.5.0:
+ resolution: {integrity: sha512-aq+t5NAc+cS6rZQQVWC2x98CPqGtKKTMDd4Gaodv0wShnItdKg/51djkGJ1hqH+Oy0ivDftCbSLCQob8zso01w==}
engines: {node: '>= 10'}
is-array-buffer@3.0.5:
@@ -6003,8 +6042,8 @@ packages:
resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==}
hasBin: true
- jose@6.2.4:
- resolution: {integrity: sha512-N8acGzVsQy6M/fjFcxtysNc4Q379TcM5dM/qKkNtsHFji88yANnXTr7BLeP75iPnFwBfQzM/jg2BZ9+HZrHCZA==}
+ jose@6.2.8:
+ resolution: {integrity: sha512-Bsdjwm3Qsd/P0jR+BHDe3LytDfY7WBq2HmCCLIwuVRHMuEC9ae7/R474GIUdF1NgCyZjzVo/A9DOiOBtXq8ZoQ==}
js-tokens@10.0.0:
resolution: {integrity: sha512-lM/UBzQmfJRo9ABXbPWemivdCW8V2G8FHaHdypQaIy523snUjog0W71ayWXTjiR+ixeMyVHN2XcpnTd/liPg/Q==}
@@ -6016,8 +6055,8 @@ packages:
resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
hasBin: true
- js-yaml@4.3.0:
- resolution: {integrity: sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==}
+ js-yaml@4.3.1:
+ resolution: {integrity: sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==}
hasBin: true
jsbn@0.1.1:
@@ -6263,10 +6302,6 @@ packages:
resolution: {integrity: sha512-j3uE8ReKNyUWDjhfEFSJqE/1DLtfTR5Z8yFzVHvBjAk37wNg7HdScjcv8ttPHRvrdgPQMPWxFFI0SsdBzI5lBw==}
hasBin: true
- loader-runner@4.3.2:
- resolution: {integrity: sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==}
- engines: {node: '>=6.11.5'}
-
loader-utils@2.0.4:
resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==}
engines: {node: '>=8.9.0'}
@@ -6361,8 +6396,8 @@ packages:
magic-string@1.0.0:
resolution: {integrity: sha512-CGvjzMN08iv6w1mm4/x3Gh1hLb4VnyRUA15FFpl6CsCIGGoe36k7kY5KNz9QDbSBN5I/fWHM6ZlIkUTa5xdUEA==}
- magicast@0.5.3:
- resolution: {integrity: sha512-pVKE4UdSQ7DvHzivsCIFx2BJn1mHG6KsyrFcaxFx6tONdneEuThrDx0Cj3AMg58KyN4pzYT+LHOotxDQDjNvkw==}
+ magicast@0.5.4:
+ resolution: {integrity: sha512-llBEhWm1SacoRwgHUoQJYtwp4PBLF4faQi5TCpIGyGs9n4y5+juI0tDgyKIfpqxckRHaHzouUEph3THklWh03w==}
make-dir@4.0.0:
resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
@@ -6383,14 +6418,12 @@ packages:
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
engines: {node: '>= 0.6'}
- media-typer@1.1.0:
- resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==}
+ media-typer@1.1.1:
+ resolution: {integrity: sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==}
engines: {node: '>= 0.8'}
- memfs@4.64.0:
- resolution: {integrity: sha512-Kw72fgY7Wn+sD8KmtNWSafl1dz0UvAsE/PHs3YVfLiaZuA3HxNm9sRLqAu0ATiBGJvME1PxZXbBZPv5GycDeAw==}
- peerDependencies:
- tslib: '2'
+ memfs@4.68.0:
+ resolution: {integrity: sha512-qlU8XrIfXUuZcmXk/GODL47KXXnhSbbaWtW5z+L7cLFfIQbgAOWzL5lqUYn39kfJh+BHLaD/siaM94/UTweGow==}
merge-descriptors@1.0.3:
resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
@@ -6470,6 +6503,10 @@ packages:
resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==}
engines: {node: 18 || 20 || >=22}
+ minimatch@10.2.6:
+ resolution: {integrity: sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==}
+ engines: {node: 18 || 20 || >=22}
+
minimatch@3.1.5:
resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==}
@@ -6579,8 +6616,8 @@ packages:
resolution: {integrity: sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==}
engines: {node: ^20.17.0 || >=22.9.0}
- nanoid@3.3.16:
- resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==}
+ nanoid@3.3.18:
+ resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
@@ -6607,12 +6644,12 @@ packages:
neo-async@2.6.2:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
- ng-packagr@22.1.0-next.3:
- resolution: {integrity: sha512-wl36HBl2TCU2O4JOl4iGeKALBtkX1yaiW/GEnzYiTLuQQqlNSuhUWFFl9Y/nzrcnjKlcJkg2CoKdF+PSu8amfg==}
+ ng-packagr@22.1.1:
+ resolution: {integrity: sha512-jZzpQckw2SFvuYI3aWfYMefSVKKG/04E+vrX2KD6coMx7ciLBotVWuLc0331Fjb6XNmAVcsmgQ5NY/Lf+9Himw==}
engines: {node: ^22.22.3 || ^24.15.0 || >=26.0.0}
hasBin: true
peerDependencies:
- '@angular/compiler-cli': ^22.1.0-next
+ '@angular/compiler-cli': ^22.0.0 || ^22.1.0-next || ^22.2.0-next
tailwindcss: ^2.0.0 || ^3.0.0 || ^4.0.0
tslib: ^2.3.0
typescript: '>=6.0 <6.1'
@@ -6620,8 +6657,8 @@ packages:
tailwindcss:
optional: true
- nock@14.0.16:
- resolution: {integrity: sha512-8r4KEc6nT1D/fdLD/R1BO1CPaVEL8o40u/guFRJlXabN7vr3RmMqyjsY5Krt0nMwhsOAwXQ/mtN5vy5Jh3aErg==}
+ nock@14.0.17:
+ resolution: {integrity: sha512-EjRr1weMa4ALQX35AgZTEnP+weJJjlW1KGDiNM2IQC2069YDHas4f4B4UUYR+TTLyKWxJvOz2wObDKQs/LNreA==}
engines: {node: '>=18.20.0 <20 || >=20.12.1'}
node-addon-api@6.1.0:
@@ -6663,8 +6700,8 @@ packages:
resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
hasBin: true
- node-releases@2.0.51:
- resolution: {integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==}
+ node-releases@2.0.53:
+ resolution: {integrity: sha512-D9UOmYG3UH1V+ENW56t5QXBwJw1YEY18ruVeus89Rw+SyIgjPkCO84bRzO3uNIYosJbNwiabWVn48o3uJLjxFQ==}
engines: {node: '>=18'}
normalize-path@3.0.0:
@@ -6778,8 +6815,8 @@ packages:
resolution: {integrity: sha512-19YVAg7T+WTrxggPukVq7DjTv6+PJ867TmhCvBsYwmbFCsZd344rq2Ld1p0wo8f8Qrrhgp82c6FJRqdXWtSEhg==}
engines: {node: '>= 0.4'}
- oxc-parser@0.140.0:
- resolution: {integrity: sha512-h6QFWd6lBMfjESqgQ27GjzrSDb0qbznp7VDQqp2zvgsrWut4vcchyMIzOVXvGQ2GMZgKw9RWrFNWv9WqGL0p7Q==}
+ oxc-parser@0.142.0:
+ resolution: {integrity: sha512-kKR+jPiRJYJDexVoziIg/FVGvr1fT1FZSSJOk6tVoMKKSlsf1Cso+cgGCJkOEDWOP174vRntCPFKg+AS7InWvw==}
engines: {node: ^20.19.0 || >=22.12.0}
p-cancelable@2.1.1:
@@ -6992,15 +7029,15 @@ packages:
peerDependencies:
postcss: ^8.4.31
- postcss-selector-parser@7.1.4:
- resolution: {integrity: sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==}
+ postcss-selector-parser@7.1.5:
+ resolution: {integrity: sha512-KvvtD7SrlBP7dlgkBghEE3r84CABm5SmV2aNcG4oCA+qDnJ/tvKonFVvwWAyyWUEwxuNawdfEAZKP9zM3oZ2Uw==}
engines: {node: '>=4'}
postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
- postcss@8.5.19:
- resolution: {integrity: sha512-Mz8SaolMd8nB+G13WkORcxQKHZ/NE4xXevtkJHVuG+guo9/wYKlIMTKAqGdEmYOXR2ijPjTYNHssizdaVSUNdQ==}
+ postcss@8.5.25:
+ resolution: {integrity: sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==}
engines: {node: ^10 || ^12 || >=14}
powershell-utils@0.1.0:
@@ -7026,8 +7063,8 @@ packages:
process-warning@1.0.0:
resolution: {integrity: sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==}
- process-warning@5.0.0:
- resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==}
+ process-warning@5.1.0:
+ resolution: {integrity: sha512-jQSaVHsPgtyw60e1rQ/A+/ArPEj/S8pS/vFnyGa/gYFXrKk/6RuDkoqVDQ5NI5MmS01698ltlAk0NoDBNLujRw==}
process@0.11.10:
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
@@ -7089,8 +7126,8 @@ packages:
pvtsutils@1.3.6:
resolution: {integrity: sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==}
- pvutils@1.1.5:
- resolution: {integrity: sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==}
+ pvutils@1.2.0:
+ resolution: {integrity: sha512-BbubeCEyTuQjVMakvJQ/Sxbc93F2pwmbsxONT/ZRrwU7Ua38d8unYTwXpTVLAKJ4BDuH9IGztCjQcd/N/39Dvg==}
engines: {node: '>=16.0.0'}
qjobs@1.2.0:
@@ -7135,8 +7172,9 @@ packages:
resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==}
engines: {node: '>= 0.10'}
- re2js@0.4.3:
- resolution: {integrity: sha512-EuNmh7jurhHEE8Ge/lBo9JuMLb3qf866Xjjfyovw3wPc7+hlqDkZq4LwhrCQMEI+ARWfrKrHozEndzlpNT0WDg==}
+ re2js@2.8.6:
+ resolution: {integrity: sha512-xLgQil4kIUCrAzVk9fRSkxkFNwmygLFjVxXrLc65aE1F0+Zsb8rxumFBy4XKyvgMCTL6kilDq3EZ0piE2dP/Dg==}
+ engines: {node: '>=18.0.0'}
readable-stream@2.3.8:
resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
@@ -7157,8 +7195,8 @@ packages:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
- readdirp@5.0.0:
- resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==}
+ readdirp@5.1.1:
+ resolution: {integrity: sha512-Kko+Y5XQ6fM+Ce3dq3m9YGxnacYZYl9cA1wZjaF3Vbry2L3i1qVg8+CAgNPsXRArPMUMCaOR7oa9Nqntc43JKA==}
engines: {node: '>= 20.19.0'}
real-require@0.2.0:
@@ -7240,8 +7278,8 @@ packages:
resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
engines: {node: '>=18'}
- retry-request@8.0.3:
- resolution: {integrity: sha512-qqoc4kkGgP9cmQDWELlOpAmfgJOg0Yi7MT82ZjiPWu451ayju4itwomjM4/dBEliify8C1b3tSaeCOldugtwPQ==}
+ retry-request@8.0.4:
+ resolution: {integrity: sha512-pI6/7eabUYkZxamkOq0g0uMxKLLGnjzhefY+vL8bVXag5rto4OU2YBTPytWLuHH7aEKD6fn7kJycQfid0Mwnkw==}
engines: {node: '>=18'}
retry@0.13.1:
@@ -7368,8 +7406,8 @@ packages:
engines: {node: '>=20.19.0'}
hasBin: true
- sax@1.6.0:
- resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==}
+ sax@1.6.1:
+ resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==}
engines: {node: '>=11.0.0'}
saxes@6.0.0:
@@ -7409,8 +7447,8 @@ packages:
resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==}
engines: {node: '>= 18'}
- serialize-javascript@7.0.7:
- resolution: {integrity: sha512-YAy8Od6KV+uuwUuU50np8fGB/Aues6Y0nAhA9y/hId74PlKUcme4pXcBD46NWKr1Q4osN/iseZ17YqO1XfmI8g==}
+ serialize-javascript@7.1.0:
+ resolution: {integrity: sha512-RNEqWOyhhUQYN9V1GfHwu9AR/g+NTciH6Z5u3/no6X3/w+04J2lVDL+svFQVXgXrEGBMG2puMVN3gq2SNGuTGw==}
engines: {node: '>=20.0.0'}
serve-index@1.9.2:
@@ -7686,9 +7724,9 @@ packages:
stubs@3.0.0:
resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==}
- supports-color@10.2.2:
- resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==}
- engines: {node: '>=18'}
+ supports-color@11.0.0:
+ resolution: {integrity: sha512-/zyImLdxhdygBIaVX0xTlQhKaCDLCrm665aqHk8xqK/Pa6k61fL6gwQGQq1k31yNyz6x55PppQgF2DMyPQa5xw==}
+ engines: {node: '>=22'}
supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
@@ -7715,8 +7753,8 @@ packages:
tar-stream@3.2.0:
resolution: {integrity: sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==}
- teeny-request@10.1.3:
- resolution: {integrity: sha512-5yDliI1uWkYPo7W+Zvrxg6YmoWuj5iC5EydewqrRTvc68nyMTZhlPPlLg6cptUGfbQAb+N9XDPDPzF6N081lug==}
+ teeny-request@10.1.4:
+ resolution: {integrity: sha512-R1Cg4Vu0UULeDfHL/kjABLaTW++9yD/B6n2g48y5dJ04hsEaxcfmAqbNDzNsbqAYJyIpZafjklLG9YxRu9uzOg==}
engines: {node: '>=18'}
teex@1.0.1:
@@ -7730,8 +7768,8 @@ packages:
text-decoder@1.2.7:
resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==}
- thingies@2.6.0:
- resolution: {integrity: sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg==}
+ thingies@2.6.1:
+ resolution: {integrity: sha512-cV/CMGTK3M4MlnJ/0At6ismOw/A0EEniDNScajjz/Br3c1sqE72YD01rGpPTKwd27wAxI5Pr+6+0w8yofzFRYw==}
engines: {node: '>=10.18'}
peerDependencies:
tslib: ^2
@@ -7757,30 +7795,30 @@ packages:
tinybench@2.9.0:
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
- tinyexec@1.2.4:
- resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==}
+ tinyexec@1.3.0:
+ resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==}
engines: {node: '>=18'}
tinyglobby@0.2.17:
resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
engines: {node: '>=12.0.0'}
- tinyrainbow@3.1.0:
- resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==}
+ tinyrainbow@3.1.1:
+ resolution: {integrity: sha512-yau8yJdTt989Mm0Bd/236QnzEiPf2xLLTqUZRUJOo/3CB078LSwzei343DgtJVmfJKJE3TMINY1u42SQsP6mXw==}
engines: {node: '>=14.0.0'}
tldts-core@6.1.86:
resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==}
- tldts-core@7.4.9:
- resolution: {integrity: sha512-DxKfPBI52p2msTEu7MPhdpdDTBhhVQg1a/8PjQckeyAvO13eMYElX545grIp6nnTGIMZlRvFZPvFhvI/WIz2Vg==}
+ tldts-core@7.4.10:
+ resolution: {integrity: sha512-KnQjp53ZekKgm/r3l+u8kJGGzYgrWdP8+Mql7a4vijh2WE0IrZWspQj/TpTxDho/YxO+AnOZnIjQcCD+q6iJsw==}
tldts@6.1.86:
resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==}
hasBin: true
- tldts@7.4.9:
- resolution: {integrity: sha512-3kZ8wQQ/k5DrChD4X4FVvr2D7E5uoRgAqkPyLpSCGUvqOvqu+JEdr3mwMUaVWb+vMHZaKhF5fp2PBigKsui7hA==}
+ tldts@7.4.10:
+ resolution: {integrity: sha512-GgouD1B+sWwvkaEq8vXC15DjQitxbvs12oIXELpconwm+Tg3zfcEv4jgzq3vtKverDXsg3VI8aRgNL2Nra0Iog==}
hasBin: true
tmp@0.2.7:
@@ -7838,8 +7876,8 @@ packages:
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
- tsx@4.23.1:
- resolution: {integrity: sha512-GQHnkIfxyx1wYCOS/wonik5MVRZU9hi1TEZmzGZSCJB1y9YgoZ8H6itNE/u4suE+yLmOzuE4E5S4TZ/ZX2wcWQ==}
+ tsx@4.23.7:
+ resolution: {integrity: sha512-3f/u/+UDCNQ7iwUZW9FCMnNGIHzElGJYh0S/yy8IvWSsn5O7fEO/897FaG7FA2W8yryiRyuwXZ1PYLAKYaqSuQ==}
engines: {node: '>=18.0.0'}
hasBin: true
@@ -7925,12 +7963,12 @@ packages:
undici-types@7.18.2:
resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==}
- undici@6.27.0:
- resolution: {integrity: sha512-YmfV3YnEDzXRC5lZ2jWtWWHKGUm1zIt8AhesR1tens+HTNv+YZlN/dp6G727LOvMJ8xjP9Be7Y2Sdr96LDm+pg==}
+ undici@6.28.0:
+ resolution: {integrity: sha512-LIY910g9TI13YS95lrMFrs8Rm/u/irgHeTWoKCoteeJ04CUJ92eEfj0rVn+7VKMPBpUPiUoBKfhNyLI23EE/KA==}
engines: {node: '>=18.17'}
- undici@7.28.0:
- resolution: {integrity: sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==}
+ undici@7.29.0:
+ resolution: {integrity: sha512-IDxfleLmmbSskfWSUATiN1nfn2rDuvnMOqb5CWR92iIfojA0Ud+ulOAAEQ57LPr9rWmsreUyf5lwyao+7GNNVw==}
engines: {node: '>=20.18.1'}
undici@8.7.0:
@@ -7979,8 +8017,8 @@ packages:
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
engines: {node: '>= 0.8'}
- update-browserslist-db@1.2.3:
- resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
+ update-browserslist-db@1.3.0:
+ resolution: {integrity: sha512-x/M6q3w4Ybp91CNaS4S69UnliqR3BzRpOT6LWbksjth0S/+jhfaPJsWjt/TewpT8j9eLIojUf5jr29WextHroA==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
@@ -8026,9 +8064,9 @@ packages:
resolution: {integrity: sha512-n5VYOooGpXr3ZE2DjNx6lJPkCFd2sORDVMmbs0o7Mqx6g0kOHTkfkY5DygZAwOvGtFy0CecufRrl49RzAD9Jkg==}
engines: {node: '>=18'}
- verdaccio-auth-memory@13.0.3:
- resolution: {integrity: sha512-EXzDLxTfpm7/B0TEAUKHgi/ygWqjNAyQ+O2rGAF9WONMZY99LVPmf7IpGoKMWCarf2L+nuKVxJ9hbyQeFbyysQ==}
- engines: {node: '>=18'}
+ verdaccio-auth-memory@13.1.1:
+ resolution: {integrity: sha512-Oo3CsyIGaM2S0qCXMN0Coi1uVyvIplT5DAEqwYK22z9XTHAZQf3oUgiVPxEwpFGcqxYsIAq1kxH5COST3xxR6g==}
+ engines: {node: '>=22'}
verdaccio-htpasswd@13.0.3:
resolution: {integrity: sha512-xh0VO4zRfcbIR2bpH2SwW4kLHzCEKFYg9lykpuEENJ9OIcoc12mGXH5DTuOuJ9po8Y0mGTzFh3JUZIwXJlmOSw==}
@@ -8210,8 +8248,8 @@ packages:
html-webpack-plugin:
optional: true
- webpack@5.108.4:
- resolution: {integrity: sha512-yur8LyJoeiWh47dErD+Ok7vlbmDsJ3UbbRPAoxbGJ54WpE2y5yVo5G/inUzujnYgw3tPmBRdn+G7PoxXaYC33w==}
+ webpack@5.109.2:
+ resolution: {integrity: sha512-U9/cvLzxObKNEZ9+TtdqrHM5/9z3lgl2c+c4BzbqGxFQvQvBAq87yql5A8pQ+rrMbS496MZJeF5enVBndIy2hw==}
engines: {node: '>=10.13.0'}
hasBin: true
peerDependencies:
@@ -8303,8 +8341,8 @@ packages:
wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
- ws@8.21.1:
- resolution: {integrity: sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==}
+ ws@8.21.3:
+ resolution: {integrity: sha512-201TZ/kPWxoPr/OKWjquZR1SWKXcvxdH+e1xrx89b3YbmzLMFCLfnaG1HFIgWzJOEWZ7MvpK++odZufgYR50Rw==}
engines: {node: '>=10.0.0'}
peerDependencies:
bufferutil: ^4.0.1
@@ -8378,12 +8416,16 @@ packages:
resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==}
engines: {node: ^20.19.0 || ^22.12.0 || >=23}
+ yargs@18.1.0:
+ resolution: {integrity: sha512-2rAgRKu54VsHkqI0/tYkmluGXHD4KW7yZoycuqDQ15QOTnc2VVfy0nN/1eMhnQLO00A+dwtK20xuCnc1YGeUyg==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=23}
+
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
- yoctocolors@2.1.2:
- resolution: {integrity: sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==}
+ yoctocolors@2.2.0:
+ resolution: {integrity: sha512-xYqdZFUK/VYazNl/oCDYN+3WloWQwMfZxBoiNt6qNyk+xfOdi598muWE42rNZFp1kNOiqW936q5RhUdnpqElSg==}
engines: {node: '>=18'}
zod-to-json-schema@3.25.2:
@@ -8414,7 +8456,7 @@ snapshots:
'@actions/http-client@4.0.1':
dependencies:
tunnel: 0.0.6
- undici: 6.27.0
+ undici: 6.28.0
'@actions/io@3.0.2': {}
@@ -8423,29 +8465,29 @@ snapshots:
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
- '@angular/animations@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))':
+ '@angular/animations@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))':
dependencies:
- '@angular/core': 22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)
+ '@angular/core': 22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)
tslib: 2.8.1
- '@angular/cdk@22.1.0-next.4(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0-rc.0(@angular/animations@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)':
+ '@angular/cdk@22.1.1(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.1(@angular/animations@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)':
dependencies:
- '@angular/common': 22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
- '@angular/core': 22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)
- '@angular/platform-browser': 22.1.0-rc.0(@angular/animations@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))
+ '@angular/common': 22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
+ '@angular/core': 22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)
+ '@angular/platform-browser': 22.1.1(@angular/animations@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))
parse5: 8.0.1
rxjs: 7.8.2
tslib: 2.8.1
- '@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)':
+ '@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)':
dependencies:
- '@angular/core': 22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)
+ '@angular/core': 22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)
rxjs: 7.8.2
tslib: 2.8.1
- '@angular/compiler-cli@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(typescript@6.0.3)':
+ '@angular/compiler-cli@22.1.1(@angular/compiler@22.1.1)(typescript@6.0.3)':
dependencies:
- '@angular/compiler': 22.1.0-rc.0
+ '@angular/compiler': 22.1.1
'@babel/core': 8.0.1
'@jridgewell/sourcemap-codec': 1.5.5
chokidar: 5.0.0
@@ -8457,64 +8499,64 @@ snapshots:
optionalDependencies:
typescript: 6.0.3
- '@angular/compiler@22.1.0-rc.0':
+ '@angular/compiler@22.1.1':
dependencies:
tslib: 2.8.1
- '@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)':
+ '@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)':
dependencies:
rxjs: 7.8.2
tslib: 2.8.1
optionalDependencies:
- '@angular/compiler': 22.1.0-rc.0
+ '@angular/compiler': 22.1.1
zone.js: 0.16.2
- '@angular/forms@22.1.0-rc.0(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0-rc.0(@angular/animations@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)':
+ '@angular/forms@22.1.1(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.1(@angular/animations@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)':
dependencies:
- '@angular/common': 22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
- '@angular/core': 22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)
- '@angular/platform-browser': 22.1.0-rc.0(@angular/animations@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))
+ '@angular/common': 22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
+ '@angular/core': 22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)
+ '@angular/platform-browser': 22.1.1(@angular/animations@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))
'@standard-schema/spec': 1.1.0
rxjs: 7.8.2
tslib: 2.8.1
zod: 4.4.3
- '@angular/localize@22.1.0-rc.0(@angular/compiler-cli@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(typescript@6.0.3))(@angular/compiler@22.1.0-rc.0)':
+ '@angular/localize@22.1.1(@angular/compiler-cli@22.1.1(@angular/compiler@22.1.1)(typescript@6.0.3))(@angular/compiler@22.1.1)':
dependencies:
- '@angular/compiler': 22.1.0-rc.0
- '@angular/compiler-cli': 22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(typescript@6.0.3)
+ '@angular/compiler': 22.1.1
+ '@angular/compiler-cli': 22.1.1(@angular/compiler@22.1.1)(typescript@6.0.3)
'@babel/core': 8.0.1
tinyglobby: 0.2.17
yargs: 18.0.0
- '@angular/material@22.1.0-next.4(4ff7080c77e2fe320ac430b9737f79ee)':
+ '@angular/material@22.1.1(b9b71bdc0d04c1d399a4036adad75253)':
dependencies:
- '@angular/cdk': 22.1.0-next.4(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0-rc.0(@angular/animations@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)
- '@angular/common': 22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
- '@angular/core': 22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)
- '@angular/forms': 22.1.0-rc.0(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0-rc.0(@angular/animations@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)
- '@angular/platform-browser': 22.1.0-rc.0(@angular/animations@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))
+ '@angular/cdk': 22.1.1(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.1(@angular/animations@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)
+ '@angular/common': 22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
+ '@angular/core': 22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)
+ '@angular/forms': 22.1.1(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.1(@angular/animations@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)
+ '@angular/platform-browser': 22.1.1(@angular/animations@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))
rxjs: 7.8.2
tslib: 2.8.1
- '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/7a67d5221a9efec2b69b102759d04223a3fc8552(@modelcontextprotocol/sdk@1.29.0(supports-color@10.2.2)(zod@4.4.3))':
+ '@angular/ng-dev@https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/c71d9b6af7560faa3d002534d416a8045111adae(@modelcontextprotocol/sdk@1.30.0(supports-color@11.0.0)(zod@4.4.3))':
dependencies:
'@actions/core': 3.0.1
- '@conventional-changelog/git-client': 3.1.0(conventional-commits-filter@6.0.1)(conventional-commits-parser@7.1.0)
- '@google-cloud/spanner': 8.0.0(supports-color@10.2.2)
- '@google/genai': 2.12.0(@modelcontextprotocol/sdk@1.29.0(supports-color@10.2.2)(zod@4.4.3))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)
+ '@conventional-changelog/git-client': 3.1.0(conventional-commits-filter@6.0.1)(conventional-commits-parser@7.1.2)
+ '@google-cloud/spanner': 8.0.0(supports-color@11.0.0)
+ '@google/genai': 2.15.0(@modelcontextprotocol/sdk@1.30.0(supports-color@11.0.0)(zod@4.4.3))(bufferutil@4.1.0)(supports-color@11.0.0)(utf-8-validate@6.0.6)
'@inquirer/prompts': 8.5.2(@types/node@24.13.3)
'@inquirer/type': 4.0.7(@types/node@24.13.3)
- '@octokit/auth-app': 8.2.0
- '@octokit/core': 7.0.6
- '@octokit/graphql': 9.0.3
+ '@octokit/auth-app': 8.3.0
+ '@octokit/core': 7.0.7
+ '@octokit/graphql': 9.0.4
'@octokit/graphql-schema': 15.26.1
- '@octokit/openapi-types': 27.0.0
- '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.6)
- '@octokit/plugin-rest-endpoint-methods': 17.0.0(@octokit/core@7.0.6)
- '@octokit/request-error': 7.1.0
+ '@octokit/openapi-types': 28.0.0
+ '@octokit/plugin-paginate-rest': 15.0.0(@octokit/core@7.0.7)
+ '@octokit/plugin-rest-endpoint-methods': 18.0.0(@octokit/core@7.0.7)
+ '@octokit/request-error': 7.1.1
'@octokit/rest': 22.0.1
- '@octokit/types': 16.0.0
+ '@octokit/types': 17.0.0
'@pnpm/dependency-path': 1001.1.10
'@types/cli-progress': 3.11.6
'@types/ejs': 3.1.5
@@ -8522,7 +8564,7 @@ snapshots:
'@types/folder-hash': 4.0.4
'@types/jasmine': 6.0.0
'@types/node': 24.13.3
- '@types/semver': 7.7.1
+ '@types/semver': 7.8.0
'@types/which': 3.0.4
'@types/yargs': 17.0.35
'@types/yarnpkg__lockfile': 1.1.9
@@ -8530,70 +8572,70 @@ snapshots:
bufferutil: 4.1.0
cli-progress: 3.12.0
conventional-commits-filter: 6.0.1
- conventional-commits-parser: 7.1.0
+ conventional-commits-parser: 7.1.2
ejs: 6.0.1
encoding: 0.1.13
fast-glob: 3.3.3
- firebase: 12.16.0
- folder-hash: 4.1.3(supports-color@10.2.2)
+ firebase: 12.17.1
+ folder-hash: 4.1.3(supports-color@11.0.0)
jasmine: 6.3.0
jasmine-core: 6.3.0
jasmine-reporters: 2.5.2
jsonc-parser: 3.3.1
- minimatch: 10.2.5
+ minimatch: 10.2.6
multimatch: 8.0.0
- nock: 14.0.16
+ nock: 14.0.17
semver: 7.8.5
- supports-color: 10.2.2
- tsx: 4.23.1
+ supports-color: 11.0.0
+ tsx: 4.23.7
typed-graphqlify: 3.1.6
typescript: 6.0.3
utf-8-validate: 6.0.6
which: 7.0.0
yaml: 2.9.0
- yargs: 18.0.0
+ yargs: 18.1.0
zod: 4.4.3
transitivePeerDependencies:
- '@modelcontextprotocol/sdk'
- '@react-native-async-storage/async-storage'
- '@angular/platform-browser@22.1.0-rc.0(@angular/animations@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))':
+ '@angular/platform-browser@22.1.1(@angular/animations@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))':
dependencies:
- '@angular/common': 22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
- '@angular/core': 22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)
+ '@angular/common': 22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
+ '@angular/core': 22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)
tslib: 2.8.1
optionalDependencies:
- '@angular/animations': 22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))
+ '@angular/animations': 22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))
- '@angular/platform-server@22.1.0-rc.0(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.1.0-rc.0)(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0-rc.0(@angular/animations@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)':
+ '@angular/platform-server@22.1.1(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.1.1)(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.1(@angular/animations@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)':
dependencies:
- '@angular/common': 22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
- '@angular/compiler': 22.1.0-rc.0
- '@angular/core': 22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)
- '@angular/platform-browser': 22.1.0-rc.0(@angular/animations@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))
+ '@angular/common': 22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
+ '@angular/compiler': 22.1.1
+ '@angular/core': 22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)
+ '@angular/platform-browser': 22.1.1(@angular/animations@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))
rxjs: 7.8.2
tslib: 2.8.1
xhr2: 0.2.1
- '@angular/router@22.1.0-rc.0(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0-rc.0(@angular/animations@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)':
+ '@angular/router@22.1.1(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.1(@angular/animations@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)':
dependencies:
- '@angular/common': 22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
- '@angular/core': 22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)
- '@angular/platform-browser': 22.1.0-rc.0(@angular/animations@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))
+ '@angular/common': 22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
+ '@angular/core': 22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)
+ '@angular/platform-browser': 22.1.1(@angular/animations@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))
rxjs: 7.8.2
tslib: 2.8.1
- '@angular/service-worker@22.1.0-rc.0(@angular/core@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)':
+ '@angular/service-worker@22.1.1(@angular/core@22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)':
dependencies:
- '@angular/core': 22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(rxjs@7.8.2)(zone.js@0.16.2)
+ '@angular/core': 22.1.1(@angular/compiler@22.1.1)(rxjs@7.8.2)(zone.js@0.16.2)
rxjs: 7.8.2
tslib: 2.8.1
'@asamuzakjp/css-color@5.1.11':
dependencies:
'@asamuzakjp/generational-cache': 1.0.1
- '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
- '@csstools/css-color-parser': 4.1.9(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
+ '@csstools/css-calc': 3.3.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
+ '@csstools/css-color-parser': 4.1.10(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
'@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
'@csstools/css-tokenizer': 4.0.0
@@ -8624,20 +8666,20 @@ snapshots:
'@babel/compat-data@8.0.0': {}
- '@babel/core@7.29.7(supports-color@10.2.2)':
+ '@babel/core@7.29.7(supports-color@11.0.0)':
dependencies:
'@babel/code-frame': 7.29.7
- '@babel/generator': 7.29.7
+ '@babel/generator': 7.29.8
'@babel/helper-compilation-targets': 7.29.7
- '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)
+ '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7(supports-color@11.0.0))(supports-color@11.0.0)
'@babel/helpers': 7.29.7
- '@babel/parser': 7.29.7
+ '@babel/parser': 7.29.8
'@babel/template': 7.29.7
- '@babel/traverse': 7.29.7(supports-color@10.2.2)
- '@babel/types': 7.29.7
+ '@babel/traverse': 7.29.8(supports-color@11.0.0)
+ '@babel/types': 7.29.8
'@jridgewell/remapping': 2.3.5
convert-source-map: 2.0.0
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
@@ -8663,10 +8705,10 @@ snapshots:
obug: 2.1.4
semver: 7.8.5
- '@babel/generator@7.29.7':
+ '@babel/generator@7.29.8':
dependencies:
- '@babel/parser': 7.29.7
- '@babel/types': 7.29.7
+ '@babel/parser': 7.29.8
+ '@babel/types': 7.29.8
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
jsesc: 3.1.0
@@ -8688,7 +8730,7 @@ snapshots:
dependencies:
'@babel/compat-data': 7.29.7
'@babel/helper-validator-option': 7.29.7
- browserslist: 4.28.7
+ browserslist: 4.28.8
lru-cache: 5.1.1
semver: 6.3.1
@@ -8696,7 +8738,7 @@ snapshots:
dependencies:
'@babel/compat-data': 8.0.0
'@babel/helper-validator-option': 8.0.0
- browserslist: 4.28.7
+ browserslist: 4.28.8
lru-cache: 11.5.2
semver: 7.8.5
@@ -8734,10 +8776,10 @@ snapshots:
'@babel/traverse': 8.0.4
'@babel/types': 8.0.4
- '@babel/helper-module-imports@7.29.7(supports-color@10.2.2)':
+ '@babel/helper-module-imports@7.29.7(supports-color@11.0.0)':
dependencies:
- '@babel/traverse': 7.29.7(supports-color@10.2.2)
- '@babel/types': 7.29.7
+ '@babel/traverse': 7.29.8(supports-color@11.0.0)
+ '@babel/types': 7.29.8
transitivePeerDependencies:
- supports-color
@@ -8746,12 +8788,12 @@ snapshots:
'@babel/traverse': 8.0.4
'@babel/types': 8.0.4
- '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7(supports-color@10.2.2))(supports-color@10.2.2)':
+ '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7(supports-color@11.0.0))(supports-color@11.0.0)':
dependencies:
- '@babel/core': 7.29.7(supports-color@10.2.2)
- '@babel/helper-module-imports': 7.29.7(supports-color@10.2.2)
+ '@babel/core': 7.29.7(supports-color@11.0.0)
+ '@babel/helper-module-imports': 7.29.7(supports-color@11.0.0)
'@babel/helper-validator-identifier': 7.29.7
- '@babel/traverse': 7.29.7(supports-color@10.2.2)
+ '@babel/traverse': 7.29.8(supports-color@11.0.0)
transitivePeerDependencies:
- supports-color
@@ -8791,7 +8833,7 @@ snapshots:
'@babel/helper-split-export-declaration@7.24.7':
dependencies:
- '@babel/types': 7.29.7
+ '@babel/types': 7.29.8
'@babel/helper-string-parser@7.29.7': {}
@@ -8814,16 +8856,16 @@ snapshots:
'@babel/helpers@7.29.7':
dependencies:
'@babel/template': 7.29.7
- '@babel/types': 7.29.7
+ '@babel/types': 7.29.8
'@babel/helpers@8.0.0':
dependencies:
'@babel/template': 8.0.0
'@babel/types': 8.0.4
- '@babel/parser@7.29.7':
+ '@babel/parser@7.29.8':
dependencies:
- '@babel/types': 7.29.7
+ '@babel/types': 7.29.8
'@babel/parser@8.0.4':
dependencies:
@@ -9224,7 +9266,7 @@ snapshots:
'@babel/plugin-transform-unicode-sets-regex': 8.0.1(@babel/core@8.0.1)
'@babel/preset-modules': 0.2.0(@babel/core@8.0.1)
babel-plugin-polyfill-corejs3: 1.0.0(@babel/core@8.0.1)
- core-js-compat: 3.49.0
+ core-js-compat: 3.50.0
semver: 7.8.5
'@babel/preset-modules@0.2.0(@babel/core@8.0.1)':
@@ -9241,8 +9283,8 @@ snapshots:
'@babel/template@7.29.7':
dependencies:
'@babel/code-frame': 7.29.7
- '@babel/parser': 7.29.7
- '@babel/types': 7.29.7
+ '@babel/parser': 7.29.8
+ '@babel/types': 7.29.8
'@babel/template@8.0.0':
dependencies:
@@ -9250,15 +9292,15 @@ snapshots:
'@babel/parser': 8.0.4
'@babel/types': 8.0.4
- '@babel/traverse@7.29.7(supports-color@10.2.2)':
+ '@babel/traverse@7.29.8(supports-color@11.0.0)':
dependencies:
'@babel/code-frame': 7.29.7
- '@babel/generator': 7.29.7
+ '@babel/generator': 7.29.8
'@babel/helper-globals': 7.29.7
- '@babel/parser': 7.29.7
+ '@babel/parser': 7.29.8
'@babel/template': 7.29.7
- '@babel/types': 7.29.7
- debug: 4.4.3(supports-color@10.2.2)
+ '@babel/types': 7.29.8
+ debug: 4.4.3(supports-color@11.0.0)
transitivePeerDependencies:
- supports-color
@@ -9272,7 +9314,7 @@ snapshots:
'@babel/types': 8.0.4
obug: 2.1.4
- '@babel/types@7.29.7':
+ '@babel/types@7.29.8':
dependencies:
'@babel/helper-string-parser': 7.29.7
'@babel/helper-validator-identifier': 7.29.7
@@ -9296,26 +9338,26 @@ snapshots:
'@colors/colors@1.5.0': {}
- '@conventional-changelog/git-client@3.1.0(conventional-commits-filter@6.0.1)(conventional-commits-parser@7.1.0)':
+ '@conventional-changelog/git-client@3.1.0(conventional-commits-filter@6.0.1)(conventional-commits-parser@7.1.2)':
dependencies:
'@simple-libs/child-process-utils': 2.0.0
'@simple-libs/stream-utils': 2.0.0
semver: 7.8.5
optionalDependencies:
conventional-commits-filter: 6.0.1
- conventional-commits-parser: 7.1.0
+ conventional-commits-parser: 7.1.2
'@csstools/color-helpers@6.1.0': {}
- '@csstools/css-calc@3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)':
+ '@csstools/css-calc@3.3.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)':
dependencies:
'@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
'@csstools/css-tokenizer': 4.0.0
- '@csstools/css-color-parser@4.1.9(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)':
+ '@csstools/css-color-parser@4.1.10(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)':
dependencies:
'@csstools/color-helpers': 6.1.0
- '@csstools/css-calc': 3.2.1(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
+ '@csstools/css-calc': 3.3.0(@csstools/css-parser-algorithms@4.0.0(@csstools/css-tokenizer@4.0.0))(@csstools/css-tokenizer@4.0.0)
'@csstools/css-parser-algorithms': 4.0.0(@csstools/css-tokenizer@4.0.0)
'@csstools/css-tokenizer': 4.0.0
@@ -9323,7 +9365,7 @@ snapshots:
dependencies:
'@csstools/css-tokenizer': 4.0.0
- '@csstools/css-syntax-patches-for-csstree@1.1.6(css-tree@3.2.1)':
+ '@csstools/css-syntax-patches-for-csstree@1.1.7(css-tree@3.2.1)':
optionalDependencies:
css-tree: 3.2.1
@@ -9379,102 +9421,102 @@ snapshots:
tslib: 2.8.1
optional: true
- '@esbuild/aix-ppc64@0.28.1':
+ '@esbuild/aix-ppc64@0.28.2':
optional: true
- '@esbuild/android-arm64@0.28.1':
+ '@esbuild/android-arm64@0.28.2':
optional: true
- '@esbuild/android-arm@0.28.1':
+ '@esbuild/android-arm@0.28.2':
optional: true
- '@esbuild/android-x64@0.28.1':
+ '@esbuild/android-x64@0.28.2':
optional: true
- '@esbuild/darwin-arm64@0.28.1':
+ '@esbuild/darwin-arm64@0.28.2':
optional: true
- '@esbuild/darwin-x64@0.28.1':
+ '@esbuild/darwin-x64@0.28.2':
optional: true
- '@esbuild/freebsd-arm64@0.28.1':
+ '@esbuild/freebsd-arm64@0.28.2':
optional: true
- '@esbuild/freebsd-x64@0.28.1':
+ '@esbuild/freebsd-x64@0.28.2':
optional: true
- '@esbuild/linux-arm64@0.28.1':
+ '@esbuild/linux-arm64@0.28.2':
optional: true
- '@esbuild/linux-arm@0.28.1':
+ '@esbuild/linux-arm@0.28.2':
optional: true
- '@esbuild/linux-ia32@0.28.1':
+ '@esbuild/linux-ia32@0.28.2':
optional: true
- '@esbuild/linux-loong64@0.28.1':
+ '@esbuild/linux-loong64@0.28.2':
optional: true
- '@esbuild/linux-mips64el@0.28.1':
+ '@esbuild/linux-mips64el@0.28.2':
optional: true
- '@esbuild/linux-ppc64@0.28.1':
+ '@esbuild/linux-ppc64@0.28.2':
optional: true
- '@esbuild/linux-riscv64@0.28.1':
+ '@esbuild/linux-riscv64@0.28.2':
optional: true
- '@esbuild/linux-s390x@0.28.1':
+ '@esbuild/linux-s390x@0.28.2':
optional: true
- '@esbuild/linux-x64@0.28.1':
+ '@esbuild/linux-x64@0.28.2':
optional: true
- '@esbuild/netbsd-arm64@0.28.1':
+ '@esbuild/netbsd-arm64@0.28.2':
optional: true
- '@esbuild/netbsd-x64@0.28.1':
+ '@esbuild/netbsd-x64@0.28.2':
optional: true
- '@esbuild/openbsd-arm64@0.28.1':
+ '@esbuild/openbsd-arm64@0.28.2':
optional: true
- '@esbuild/openbsd-x64@0.28.1':
+ '@esbuild/openbsd-x64@0.28.2':
optional: true
- '@esbuild/openharmony-arm64@0.28.1':
+ '@esbuild/openharmony-arm64@0.28.2':
optional: true
- '@esbuild/sunos-x64@0.28.1':
+ '@esbuild/sunos-x64@0.28.2':
optional: true
- '@esbuild/win32-arm64@0.28.1':
+ '@esbuild/win32-arm64@0.28.2':
optional: true
- '@esbuild/win32-ia32@0.28.1':
+ '@esbuild/win32-ia32@0.28.2':
optional: true
- '@esbuild/win32-x64@0.28.1':
+ '@esbuild/win32-x64@0.28.2':
optional: true
- '@eslint-community/eslint-utils@4.10.1(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))':
+ '@eslint-community/eslint-utils@4.10.1(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))':
dependencies:
- eslint: 10.7.0(jiti@2.7.0)(supports-color@10.2.2)
+ eslint: 10.7.0(jiti@2.7.0)(supports-color@11.0.0)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.2': {}
- '@eslint/compat@2.1.0(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))':
+ '@eslint/compat@2.1.0(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))':
dependencies:
'@eslint/core': 1.2.1
optionalDependencies:
- eslint: 10.7.0(jiti@2.7.0)(supports-color@10.2.2)
+ eslint: 10.7.0(jiti@2.7.0)(supports-color@11.0.0)
- '@eslint/config-array@0.23.5(supports-color@10.2.2)':
+ '@eslint/config-array@0.23.5(supports-color@11.0.0)':
dependencies:
'@eslint/object-schema': 3.0.5
- debug: 4.4.3(supports-color@10.2.2)
- minimatch: 10.2.5
+ debug: 4.4.3(supports-color@11.0.0)
+ minimatch: 10.2.6
transitivePeerDependencies:
- supports-color
@@ -9486,23 +9528,23 @@ snapshots:
dependencies:
'@types/json-schema': 7.0.15
- '@eslint/eslintrc@3.3.6(supports-color@10.2.2)':
+ '@eslint/eslintrc@3.3.6(supports-color@11.0.0)':
dependencies:
ajv: 6.15.0
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
espree: 10.4.0
globals: 14.0.0
ignore: 5.3.2
import-fresh: 3.3.1
- js-yaml: 4.3.0
+ js-yaml: 4.3.1
minimatch: 3.1.5
strip-json-comments: 3.1.1
transitivePeerDependencies:
- supports-color
- '@eslint/js@10.0.1(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))':
+ '@eslint/js@10.0.1(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))':
optionalDependencies:
- eslint: 10.7.0(jiti@2.7.0)(supports-color@10.2.2)
+ eslint: 10.7.0(jiti@2.7.0)(supports-color@11.0.0)
'@eslint/object-schema@3.0.5': {}
@@ -9513,221 +9555,221 @@ snapshots:
'@exodus/bytes@1.15.1': {}
- '@firebase/ai@2.13.1(@firebase/app-types@0.9.5)(@firebase/app@0.15.1)':
+ '@firebase/ai@2.14.0(@firebase/app-types@0.9.5)(@firebase/app@0.16.0)':
dependencies:
- '@firebase/app': 0.15.1
+ '@firebase/app': 0.16.0
'@firebase/app-check-interop-types': 0.3.4
'@firebase/app-types': 0.9.5
- '@firebase/component': 0.7.3
+ '@firebase/component': 0.7.4
'@firebase/logger': 0.5.1
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
tslib: 2.8.1
- '@firebase/analytics-compat@0.2.28(@firebase/app-compat@0.5.15)(@firebase/app@0.15.1)':
+ '@firebase/analytics-compat@0.2.29(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)':
dependencies:
- '@firebase/analytics': 0.10.22(@firebase/app@0.15.1)
+ '@firebase/analytics': 0.10.23(@firebase/app@0.16.0)
'@firebase/analytics-types': 0.8.4
- '@firebase/app-compat': 0.5.15
- '@firebase/component': 0.7.3
- '@firebase/util': 1.15.1
+ '@firebase/app': 0.16.0
+ '@firebase/app-compat': 0.5.16
+ '@firebase/component': 0.7.4
+ '@firebase/util': 1.15.2
tslib: 2.8.1
- transitivePeerDependencies:
- - '@firebase/app'
'@firebase/analytics-types@0.8.4': {}
- '@firebase/analytics@0.10.22(@firebase/app@0.15.1)':
+ '@firebase/analytics@0.10.23(@firebase/app@0.16.0)':
dependencies:
- '@firebase/app': 0.15.1
- '@firebase/component': 0.7.3
- '@firebase/installations': 0.6.22(@firebase/app@0.15.1)
+ '@firebase/app': 0.16.0
+ '@firebase/component': 0.7.4
+ '@firebase/installations': 0.6.23(@firebase/app@0.16.0)
'@firebase/logger': 0.5.1
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
tslib: 2.8.1
- '@firebase/app-check-compat@0.4.5(@firebase/app-compat@0.5.15)(@firebase/app@0.15.1)':
+ '@firebase/app-check-compat@0.4.6(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)':
dependencies:
- '@firebase/app-check': 0.12.0(@firebase/app@0.15.1)
+ '@firebase/app': 0.16.0
+ '@firebase/app-check': 0.13.0(@firebase/app@0.16.0)
'@firebase/app-check-types': 0.5.4
- '@firebase/app-compat': 0.5.15
- '@firebase/component': 0.7.3
+ '@firebase/app-compat': 0.5.16
+ '@firebase/component': 0.7.4
'@firebase/logger': 0.5.1
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
tslib: 2.8.1
- transitivePeerDependencies:
- - '@firebase/app'
'@firebase/app-check-interop-types@0.3.4': {}
'@firebase/app-check-types@0.5.4': {}
- '@firebase/app-check@0.12.0(@firebase/app@0.15.1)':
+ '@firebase/app-check@0.13.0(@firebase/app@0.16.0)':
dependencies:
- '@firebase/app': 0.15.1
- '@firebase/component': 0.7.3
+ '@firebase/app': 0.16.0
+ '@firebase/component': 0.7.4
'@firebase/logger': 0.5.1
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
tslib: 2.8.1
- '@firebase/app-compat@0.5.15':
+ '@firebase/app-compat@0.5.16':
dependencies:
- '@firebase/app': 0.15.1
- '@firebase/component': 0.7.3
+ '@firebase/app': 0.16.0
+ '@firebase/component': 0.7.4
'@firebase/logger': 0.5.1
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
tslib: 2.8.1
'@firebase/app-types@0.9.5':
dependencies:
'@firebase/logger': 0.5.1
- '@firebase/app@0.15.1':
+ '@firebase/app@0.16.0':
dependencies:
- '@firebase/component': 0.7.3
+ '@firebase/component': 0.7.4
'@firebase/logger': 0.5.1
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
idb: 7.1.1
tslib: 2.8.1
- '@firebase/auth-compat@0.6.8(@firebase/app-compat@0.5.15)(@firebase/app-types@0.9.5)(@firebase/app@0.15.1)':
+ '@firebase/auth-compat@0.6.9(@firebase/app-compat@0.5.16)(@firebase/app-types@0.9.5)(@firebase/app@0.16.0)':
dependencies:
- '@firebase/app-compat': 0.5.15
- '@firebase/auth': 1.13.3(@firebase/app@0.15.1)
- '@firebase/auth-types': 0.13.1(@firebase/app-types@0.9.5)(@firebase/util@1.15.1)
- '@firebase/component': 0.7.3
- '@firebase/util': 1.15.1
+ '@firebase/app': 0.16.0
+ '@firebase/app-compat': 0.5.16
+ '@firebase/auth': 1.13.4(@firebase/app@0.16.0)
+ '@firebase/auth-types': 0.13.1(@firebase/app-types@0.9.5)(@firebase/util@1.15.2)
+ '@firebase/component': 0.7.4
+ '@firebase/util': 1.15.2
tslib: 2.8.1
transitivePeerDependencies:
- - '@firebase/app'
- '@firebase/app-types'
- '@react-native-async-storage/async-storage'
'@firebase/auth-interop-types@0.2.5': {}
- '@firebase/auth-types@0.13.1(@firebase/app-types@0.9.5)(@firebase/util@1.15.1)':
+ '@firebase/auth-types@0.13.1(@firebase/app-types@0.9.5)(@firebase/util@1.15.2)':
dependencies:
'@firebase/app-types': 0.9.5
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
- '@firebase/auth@1.13.3(@firebase/app@0.15.1)':
+ '@firebase/auth@1.13.4(@firebase/app@0.16.0)':
dependencies:
- '@firebase/app': 0.15.1
- '@firebase/component': 0.7.3
+ '@firebase/app': 0.16.0
+ '@firebase/component': 0.7.4
'@firebase/logger': 0.5.1
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
tslib: 2.8.1
- '@firebase/component@0.7.3':
+ '@firebase/component@0.7.4':
dependencies:
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
tslib: 2.8.1
- '@firebase/data-connect@0.7.1(@firebase/app@0.15.1)':
+ '@firebase/data-connect@0.7.3(@firebase/app@0.16.0)':
dependencies:
- '@firebase/app': 0.15.1
+ '@firebase/app': 0.16.0
'@firebase/auth-interop-types': 0.2.5
- '@firebase/component': 0.7.3
+ '@firebase/component': 0.7.4
'@firebase/logger': 0.5.1
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
tslib: 2.8.1
- '@firebase/database-compat@2.1.4':
+ '@firebase/database-compat@2.1.6(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)':
dependencies:
- '@firebase/component': 0.7.3
- '@firebase/database': 1.1.3
- '@firebase/database-types': 1.0.20
+ '@firebase/component': 0.7.4
+ '@firebase/database': 1.1.4
+ '@firebase/database-types': 1.0.21
'@firebase/logger': 0.5.1
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
tslib: 2.8.1
+ optionalDependencies:
+ '@firebase/app': 0.16.0
+ '@firebase/app-compat': 0.5.16
- '@firebase/database-types@1.0.20':
+ '@firebase/database-types@1.0.21':
dependencies:
'@firebase/app-types': 0.9.5
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
- '@firebase/database@1.1.3':
+ '@firebase/database@1.1.4':
dependencies:
'@firebase/app-check-interop-types': 0.3.4
'@firebase/auth-interop-types': 0.2.5
- '@firebase/component': 0.7.3
+ '@firebase/component': 0.7.4
'@firebase/logger': 0.5.1
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
faye-websocket: 0.11.4
tslib: 2.8.1
- '@firebase/firestore-compat@0.4.11(@firebase/app-compat@0.5.15)(@firebase/app-types@0.9.5)(@firebase/app@0.15.1)':
+ '@firebase/firestore-compat@0.4.12(@firebase/app-compat@0.5.16)(@firebase/app-types@0.9.5)(@firebase/app@0.16.0)':
dependencies:
- '@firebase/app-compat': 0.5.15
- '@firebase/component': 0.7.3
- '@firebase/firestore': 4.16.0(@firebase/app@0.15.1)
- '@firebase/firestore-types': 3.0.4(@firebase/app-types@0.9.5)(@firebase/util@1.15.1)
- '@firebase/util': 1.15.1
+ '@firebase/app': 0.16.0
+ '@firebase/app-compat': 0.5.16
+ '@firebase/component': 0.7.4
+ '@firebase/firestore': 4.17.0(@firebase/app@0.16.0)
+ '@firebase/firestore-types': 3.0.4(@firebase/app-types@0.9.5)(@firebase/util@1.15.2)
+ '@firebase/util': 1.15.2
tslib: 2.8.1
transitivePeerDependencies:
- - '@firebase/app'
- '@firebase/app-types'
- '@firebase/firestore-types@3.0.4(@firebase/app-types@0.9.5)(@firebase/util@1.15.1)':
+ '@firebase/firestore-types@3.0.4(@firebase/app-types@0.9.5)(@firebase/util@1.15.2)':
dependencies:
'@firebase/app-types': 0.9.5
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
- '@firebase/firestore@4.16.0(@firebase/app@0.15.1)':
+ '@firebase/firestore@4.17.0(@firebase/app@0.16.0)':
dependencies:
- '@firebase/app': 0.15.1
- '@firebase/component': 0.7.3
+ '@firebase/app': 0.16.0
+ '@firebase/component': 0.7.4
'@firebase/logger': 0.5.1
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
'@firebase/webchannel-wrapper': 1.0.6
'@grpc/grpc-js': 1.9.16
'@grpc/proto-loader': 0.7.15
- re2js: 0.4.3
+ re2js: 2.8.6
tslib: 2.8.1
- '@firebase/functions-compat@0.4.5(@firebase/app-compat@0.5.15)(@firebase/app@0.15.1)':
+ '@firebase/functions-compat@0.4.6(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)':
dependencies:
- '@firebase/app-compat': 0.5.15
- '@firebase/component': 0.7.3
- '@firebase/functions': 0.13.5(@firebase/app@0.15.1)
+ '@firebase/app': 0.16.0
+ '@firebase/app-compat': 0.5.16
+ '@firebase/component': 0.7.4
+ '@firebase/functions': 0.13.6(@firebase/app@0.16.0)
'@firebase/functions-types': 0.6.4
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
tslib: 2.8.1
- transitivePeerDependencies:
- - '@firebase/app'
'@firebase/functions-types@0.6.4': {}
- '@firebase/functions@0.13.5(@firebase/app@0.15.1)':
+ '@firebase/functions@0.13.6(@firebase/app@0.16.0)':
dependencies:
- '@firebase/app': 0.15.1
+ '@firebase/app': 0.16.0
'@firebase/app-check-interop-types': 0.3.4
'@firebase/auth-interop-types': 0.2.5
- '@firebase/component': 0.7.3
+ '@firebase/component': 0.7.4
'@firebase/messaging-interop-types': 0.2.5
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
tslib: 2.8.1
- '@firebase/installations-compat@0.2.22(@firebase/app-compat@0.5.15)(@firebase/app-types@0.9.5)(@firebase/app@0.15.1)':
+ '@firebase/installations-compat@0.2.23(@firebase/app-compat@0.5.16)(@firebase/app-types@0.9.5)(@firebase/app@0.16.0)':
dependencies:
- '@firebase/app-compat': 0.5.15
- '@firebase/component': 0.7.3
- '@firebase/installations': 0.6.22(@firebase/app@0.15.1)
+ '@firebase/app': 0.16.0
+ '@firebase/app-compat': 0.5.16
+ '@firebase/component': 0.7.4
+ '@firebase/installations': 0.6.23(@firebase/app@0.16.0)
'@firebase/installations-types': 0.5.4(@firebase/app-types@0.9.5)
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
tslib: 2.8.1
transitivePeerDependencies:
- - '@firebase/app'
- '@firebase/app-types'
'@firebase/installations-types@0.5.4(@firebase/app-types@0.9.5)':
dependencies:
'@firebase/app-types': 0.9.5
- '@firebase/installations@0.6.22(@firebase/app@0.15.1)':
+ '@firebase/installations@0.6.23(@firebase/app@0.16.0)':
dependencies:
- '@firebase/app': 0.15.1
- '@firebase/component': 0.7.3
- '@firebase/util': 1.15.1
+ '@firebase/app': 0.16.0
+ '@firebase/component': 0.7.4
+ '@firebase/util': 1.15.2
idb: 7.1.1
tslib: 2.8.1
@@ -9735,100 +9777,97 @@ snapshots:
dependencies:
tslib: 2.8.1
- '@firebase/messaging-compat@0.2.27(@firebase/app-compat@0.5.15)(@firebase/app@0.15.1)':
+ '@firebase/messaging-compat@0.2.28(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)':
dependencies:
- '@firebase/app-compat': 0.5.15
- '@firebase/component': 0.7.3
- '@firebase/messaging': 0.13.0(@firebase/app@0.15.1)
- '@firebase/util': 1.15.1
+ '@firebase/app': 0.16.0
+ '@firebase/app-compat': 0.5.16
+ '@firebase/component': 0.7.4
+ '@firebase/messaging': 0.13.1(@firebase/app@0.16.0)
+ '@firebase/util': 1.15.2
tslib: 2.8.1
- transitivePeerDependencies:
- - '@firebase/app'
'@firebase/messaging-interop-types@0.2.5': {}
- '@firebase/messaging@0.13.0(@firebase/app@0.15.1)':
+ '@firebase/messaging@0.13.1(@firebase/app@0.16.0)':
dependencies:
- '@firebase/app': 0.15.1
- '@firebase/component': 0.7.3
- '@firebase/installations': 0.6.22(@firebase/app@0.15.1)
+ '@firebase/app': 0.16.0
+ '@firebase/component': 0.7.4
+ '@firebase/installations': 0.6.23(@firebase/app@0.16.0)
'@firebase/messaging-interop-types': 0.2.5
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
idb: 7.1.1
tslib: 2.8.1
- '@firebase/performance-compat@0.2.25(@firebase/app-compat@0.5.15)(@firebase/app@0.15.1)':
+ '@firebase/performance-compat@0.2.26(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)':
dependencies:
- '@firebase/app-compat': 0.5.15
- '@firebase/component': 0.7.3
+ '@firebase/app': 0.16.0
+ '@firebase/app-compat': 0.5.16
+ '@firebase/component': 0.7.4
'@firebase/logger': 0.5.1
- '@firebase/performance': 0.7.12(@firebase/app@0.15.1)
+ '@firebase/performance': 0.7.13(@firebase/app@0.16.0)
'@firebase/performance-types': 0.2.4
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
tslib: 2.8.1
- transitivePeerDependencies:
- - '@firebase/app'
'@firebase/performance-types@0.2.4': {}
- '@firebase/performance@0.7.12(@firebase/app@0.15.1)':
+ '@firebase/performance@0.7.13(@firebase/app@0.16.0)':
dependencies:
- '@firebase/app': 0.15.1
- '@firebase/component': 0.7.3
- '@firebase/installations': 0.6.22(@firebase/app@0.15.1)
+ '@firebase/app': 0.16.0
+ '@firebase/component': 0.7.4
+ '@firebase/installations': 0.6.23(@firebase/app@0.16.0)
'@firebase/logger': 0.5.1
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
tslib: 2.8.1
web-vitals: 4.2.4
- '@firebase/remote-config-compat@0.2.27(@firebase/app-compat@0.5.15)(@firebase/app@0.15.1)':
+ '@firebase/remote-config-compat@0.2.28(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)':
dependencies:
- '@firebase/app-compat': 0.5.15
- '@firebase/component': 0.7.3
+ '@firebase/app': 0.16.0
+ '@firebase/app-compat': 0.5.16
+ '@firebase/component': 0.7.4
'@firebase/logger': 0.5.1
- '@firebase/remote-config': 0.9.0(@firebase/app@0.15.1)
+ '@firebase/remote-config': 0.9.1(@firebase/app@0.16.0)
'@firebase/remote-config-types': 0.5.1
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
tslib: 2.8.1
- transitivePeerDependencies:
- - '@firebase/app'
'@firebase/remote-config-types@0.5.1': {}
- '@firebase/remote-config@0.9.0(@firebase/app@0.15.1)':
+ '@firebase/remote-config@0.9.1(@firebase/app@0.16.0)':
dependencies:
- '@firebase/app': 0.15.1
- '@firebase/component': 0.7.3
- '@firebase/installations': 0.6.22(@firebase/app@0.15.1)
+ '@firebase/app': 0.16.0
+ '@firebase/component': 0.7.4
+ '@firebase/installations': 0.6.23(@firebase/app@0.16.0)
'@firebase/logger': 0.5.1
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
tslib: 2.8.1
- '@firebase/storage-compat@0.4.3(@firebase/app-compat@0.5.15)(@firebase/app-types@0.9.5)(@firebase/app@0.15.1)':
+ '@firebase/storage-compat@0.4.4(@firebase/app-compat@0.5.16)(@firebase/app-types@0.9.5)(@firebase/app@0.16.0)':
dependencies:
- '@firebase/app-compat': 0.5.15
- '@firebase/component': 0.7.3
- '@firebase/storage': 0.14.3(@firebase/app@0.15.1)
- '@firebase/storage-types': 0.8.4(@firebase/app-types@0.9.5)(@firebase/util@1.15.1)
- '@firebase/util': 1.15.1
+ '@firebase/app': 0.16.0
+ '@firebase/app-compat': 0.5.16
+ '@firebase/component': 0.7.4
+ '@firebase/storage': 0.14.4(@firebase/app@0.16.0)
+ '@firebase/storage-types': 0.8.4(@firebase/app-types@0.9.5)(@firebase/util@1.15.2)
+ '@firebase/util': 1.15.2
tslib: 2.8.1
transitivePeerDependencies:
- - '@firebase/app'
- '@firebase/app-types'
- '@firebase/storage-types@0.8.4(@firebase/app-types@0.9.5)(@firebase/util@1.15.1)':
+ '@firebase/storage-types@0.8.4(@firebase/app-types@0.9.5)(@firebase/util@1.15.2)':
dependencies:
'@firebase/app-types': 0.9.5
- '@firebase/util': 1.15.1
+ '@firebase/util': 1.15.2
- '@firebase/storage@0.14.3(@firebase/app@0.15.1)':
+ '@firebase/storage@0.14.4(@firebase/app@0.16.0)':
dependencies:
- '@firebase/app': 0.15.1
- '@firebase/component': 0.7.3
- '@firebase/util': 1.15.1
+ '@firebase/app': 0.16.0
+ '@firebase/component': 0.7.4
+ '@firebase/util': 1.15.2
tslib: 2.8.1
- '@firebase/util@1.15.1':
+ '@firebase/util@1.15.2':
dependencies:
tslib: 2.8.1
@@ -9836,35 +9875,35 @@ snapshots:
'@glideapps/ts-necessities@2.2.3': {}
- '@google-cloud/common@6.0.1(supports-color@10.2.2)':
+ '@google-cloud/common@6.1.0(supports-color@11.0.0)':
dependencies:
'@google-cloud/projectify': 4.0.0
'@google-cloud/promisify': 4.1.0
arrify: 2.0.1
duplexify: 4.1.3
extend: 3.0.2
- google-auth-library: 10.9.0(supports-color@10.2.2)
+ google-auth-library: 10.9.1(supports-color@11.0.0)
html-entities: 2.6.0
- retry-request: 8.0.3(supports-color@10.2.2)
- teeny-request: 10.1.3(supports-color@10.2.2)
+ retry-request: 8.0.4(supports-color@11.0.0)
+ teeny-request: 10.1.4(supports-color@11.0.0)
transitivePeerDependencies:
- supports-color
- '@google-cloud/precise-date@5.1.0': {}
+ '@google-cloud/precise-date@5.2.0': {}
'@google-cloud/projectify@4.0.0': {}
- '@google-cloud/projectify@5.1.0': {}
+ '@google-cloud/projectify@5.2.0': {}
'@google-cloud/promisify@4.1.0': {}
'@google-cloud/promisify@5.1.0': {}
- '@google-cloud/spanner@8.0.0(supports-color@10.2.2)':
+ '@google-cloud/spanner@8.0.0(supports-color@11.0.0)':
dependencies:
- '@google-cloud/common': 6.0.1(supports-color@10.2.2)
- '@google-cloud/precise-date': 5.1.0
- '@google-cloud/projectify': 5.1.0
+ '@google-cloud/common': 6.1.0(supports-color@11.0.0)
+ '@google-cloud/precise-date': 5.2.0
+ '@google-cloud/projectify': 5.2.0
'@google-cloud/promisify': 5.1.0
'@grpc/proto-loader': 0.7.15
'@opentelemetry/api': 1.9.1
@@ -9878,31 +9917,31 @@ snapshots:
duplexify: 4.1.3
events-intercept: 2.0.0
extend: 3.0.2
- google-auth-library: 10.9.0(supports-color@10.2.2)
- google-gax: 5.0.7(supports-color@10.2.2)
+ google-auth-library: 10.9.1(supports-color@11.0.0)
+ google-gax: 5.0.8(supports-color@11.0.0)
grpc-gcp: 1.1.1
is: 3.3.2
lodash.snakecase: 4.1.1
merge-stream: 2.0.0
p-queue: 6.6.2
protobufjs: 7.6.5
- retry-request: 8.0.3(supports-color@10.2.2)
+ retry-request: 8.0.4(supports-color@11.0.0)
split-array-stream: 2.0.0
stack-trace: 0.0.10
stream-events: 1.0.5
- teeny-request: 10.1.3(supports-color@10.2.2)
+ teeny-request: 10.1.4(supports-color@11.0.0)
through2: 4.0.2
transitivePeerDependencies:
- supports-color
- '@google/genai@2.12.0(@modelcontextprotocol/sdk@1.29.0(supports-color@10.2.2)(zod@4.4.3))(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)':
+ '@google/genai@2.15.0(@modelcontextprotocol/sdk@1.30.0(supports-color@11.0.0)(zod@4.4.3))(bufferutil@4.1.0)(supports-color@11.0.0)(utf-8-validate@6.0.6)':
dependencies:
- google-auth-library: 10.9.0(supports-color@10.2.2)
+ google-auth-library: 10.9.1(supports-color@11.0.0)
p-retry: 4.6.2
protobufjs: 7.6.5
- ws: 8.21.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)
optionalDependencies:
- '@modelcontextprotocol/sdk': 1.29.0(supports-color@10.2.2)(zod@4.4.3)
+ '@modelcontextprotocol/sdk': 1.30.0(supports-color@11.0.0)(zod@4.4.3)
transitivePeerDependencies:
- bufferutil
- supports-color
@@ -9935,9 +9974,9 @@ snapshots:
'@harperfast/extended-iterable@1.0.3':
optional: true
- '@hono/node-server@1.19.14(hono@4.12.31)':
+ '@hono/node-server@2.1.0(hono@4.13.1)':
dependencies:
- hono: 4.12.31
+ hono: 4.13.1
'@humanfs/core@0.19.2':
dependencies:
@@ -9957,6 +9996,15 @@ snapshots:
'@inquirer/ansi@2.0.7': {}
+ '@inquirer/checkbox@5.2.1(@types/node@22.20.1)':
+ dependencies:
+ '@inquirer/ansi': 2.0.7
+ '@inquirer/core': 11.2.1(@types/node@22.20.1)
+ '@inquirer/figures': 2.0.7
+ '@inquirer/type': 4.0.7(@types/node@22.20.1)
+ optionalDependencies:
+ '@types/node': 22.20.1
+
'@inquirer/checkbox@5.2.1(@types/node@24.13.3)':
dependencies:
'@inquirer/ansi': 2.0.7
@@ -9966,6 +10014,13 @@ snapshots:
optionalDependencies:
'@types/node': 24.13.3
+ '@inquirer/confirm@6.1.1(@types/node@22.20.1)':
+ dependencies:
+ '@inquirer/core': 11.2.1(@types/node@22.20.1)
+ '@inquirer/type': 4.0.7(@types/node@22.20.1)
+ optionalDependencies:
+ '@types/node': 22.20.1
+
'@inquirer/confirm@6.1.1(@types/node@24.13.3)':
dependencies:
'@inquirer/core': 11.2.1(@types/node@24.13.3)
@@ -9973,6 +10028,18 @@ snapshots:
optionalDependencies:
'@types/node': 24.13.3
+ '@inquirer/core@11.2.1(@types/node@22.20.1)':
+ dependencies:
+ '@inquirer/ansi': 2.0.7
+ '@inquirer/figures': 2.0.7
+ '@inquirer/type': 4.0.7(@types/node@22.20.1)
+ cli-width: 4.1.0
+ fast-wrap-ansi: 0.2.2
+ mute-stream: 3.0.0
+ signal-exit: 4.1.0
+ optionalDependencies:
+ '@types/node': 22.20.1
+
'@inquirer/core@11.2.1(@types/node@24.13.3)':
dependencies:
'@inquirer/ansi': 2.0.7
@@ -9985,6 +10052,14 @@ snapshots:
optionalDependencies:
'@types/node': 24.13.3
+ '@inquirer/editor@5.2.2(@types/node@22.20.1)':
+ dependencies:
+ '@inquirer/core': 11.2.1(@types/node@22.20.1)
+ '@inquirer/external-editor': 3.0.3(@types/node@22.20.1)
+ '@inquirer/type': 4.0.7(@types/node@22.20.1)
+ optionalDependencies:
+ '@types/node': 22.20.1
+
'@inquirer/editor@5.2.2(@types/node@24.13.3)':
dependencies:
'@inquirer/core': 11.2.1(@types/node@24.13.3)
@@ -9993,6 +10068,13 @@ snapshots:
optionalDependencies:
'@types/node': 24.13.3
+ '@inquirer/expand@5.1.1(@types/node@22.20.1)':
+ dependencies:
+ '@inquirer/core': 11.2.1(@types/node@22.20.1)
+ '@inquirer/type': 4.0.7(@types/node@22.20.1)
+ optionalDependencies:
+ '@types/node': 22.20.1
+
'@inquirer/expand@5.1.1(@types/node@24.13.3)':
dependencies:
'@inquirer/core': 11.2.1(@types/node@24.13.3)
@@ -10000,6 +10082,13 @@ snapshots:
optionalDependencies:
'@types/node': 24.13.3
+ '@inquirer/external-editor@3.0.3(@types/node@22.20.1)':
+ dependencies:
+ chardet: 2.2.0
+ iconv-lite: 0.7.3
+ optionalDependencies:
+ '@types/node': 22.20.1
+
'@inquirer/external-editor@3.0.3(@types/node@24.13.3)':
dependencies:
chardet: 2.2.0
@@ -10009,6 +10098,13 @@ snapshots:
'@inquirer/figures@2.0.7': {}
+ '@inquirer/input@5.1.2(@types/node@22.20.1)':
+ dependencies:
+ '@inquirer/core': 11.2.1(@types/node@22.20.1)
+ '@inquirer/type': 4.0.7(@types/node@22.20.1)
+ optionalDependencies:
+ '@types/node': 22.20.1
+
'@inquirer/input@5.1.2(@types/node@24.13.3)':
dependencies:
'@inquirer/core': 11.2.1(@types/node@24.13.3)
@@ -10016,6 +10112,13 @@ snapshots:
optionalDependencies:
'@types/node': 24.13.3
+ '@inquirer/number@4.1.1(@types/node@22.20.1)':
+ dependencies:
+ '@inquirer/core': 11.2.1(@types/node@22.20.1)
+ '@inquirer/type': 4.0.7(@types/node@22.20.1)
+ optionalDependencies:
+ '@types/node': 22.20.1
+
'@inquirer/number@4.1.1(@types/node@24.13.3)':
dependencies:
'@inquirer/core': 11.2.1(@types/node@24.13.3)
@@ -10023,6 +10126,14 @@ snapshots:
optionalDependencies:
'@types/node': 24.13.3
+ '@inquirer/password@5.1.1(@types/node@22.20.1)':
+ dependencies:
+ '@inquirer/ansi': 2.0.7
+ '@inquirer/core': 11.2.1(@types/node@22.20.1)
+ '@inquirer/type': 4.0.7(@types/node@22.20.1)
+ optionalDependencies:
+ '@types/node': 22.20.1
+
'@inquirer/password@5.1.1(@types/node@24.13.3)':
dependencies:
'@inquirer/ansi': 2.0.7
@@ -10031,6 +10142,21 @@ snapshots:
optionalDependencies:
'@types/node': 24.13.3
+ '@inquirer/prompts@8.5.2(@types/node@22.20.1)':
+ dependencies:
+ '@inquirer/checkbox': 5.2.1(@types/node@22.20.1)
+ '@inquirer/confirm': 6.1.1(@types/node@22.20.1)
+ '@inquirer/editor': 5.2.2(@types/node@22.20.1)
+ '@inquirer/expand': 5.1.1(@types/node@22.20.1)
+ '@inquirer/input': 5.1.2(@types/node@22.20.1)
+ '@inquirer/number': 4.1.1(@types/node@22.20.1)
+ '@inquirer/password': 5.1.1(@types/node@22.20.1)
+ '@inquirer/rawlist': 5.3.1(@types/node@22.20.1)
+ '@inquirer/search': 4.2.1(@types/node@22.20.1)
+ '@inquirer/select': 5.2.1(@types/node@22.20.1)
+ optionalDependencies:
+ '@types/node': 22.20.1
+
'@inquirer/prompts@8.5.2(@types/node@24.13.3)':
dependencies:
'@inquirer/checkbox': 5.2.1(@types/node@24.13.3)
@@ -10046,6 +10172,13 @@ snapshots:
optionalDependencies:
'@types/node': 24.13.3
+ '@inquirer/rawlist@5.3.1(@types/node@22.20.1)':
+ dependencies:
+ '@inquirer/core': 11.2.1(@types/node@22.20.1)
+ '@inquirer/type': 4.0.7(@types/node@22.20.1)
+ optionalDependencies:
+ '@types/node': 22.20.1
+
'@inquirer/rawlist@5.3.1(@types/node@24.13.3)':
dependencies:
'@inquirer/core': 11.2.1(@types/node@24.13.3)
@@ -10053,6 +10186,14 @@ snapshots:
optionalDependencies:
'@types/node': 24.13.3
+ '@inquirer/search@4.2.1(@types/node@22.20.1)':
+ dependencies:
+ '@inquirer/core': 11.2.1(@types/node@22.20.1)
+ '@inquirer/figures': 2.0.7
+ '@inquirer/type': 4.0.7(@types/node@22.20.1)
+ optionalDependencies:
+ '@types/node': 22.20.1
+
'@inquirer/search@4.2.1(@types/node@24.13.3)':
dependencies:
'@inquirer/core': 11.2.1(@types/node@24.13.3)
@@ -10061,6 +10202,15 @@ snapshots:
optionalDependencies:
'@types/node': 24.13.3
+ '@inquirer/select@5.2.1(@types/node@22.20.1)':
+ dependencies:
+ '@inquirer/ansi': 2.0.7
+ '@inquirer/core': 11.2.1(@types/node@22.20.1)
+ '@inquirer/figures': 2.0.7
+ '@inquirer/type': 4.0.7(@types/node@22.20.1)
+ optionalDependencies:
+ '@types/node': 22.20.1
+
'@inquirer/select@5.2.1(@types/node@24.13.3)':
dependencies:
'@inquirer/ansi': 2.0.7
@@ -10070,6 +10220,10 @@ snapshots:
optionalDependencies:
'@types/node': 24.13.3
+ '@inquirer/type@4.0.7(@types/node@22.20.1)':
+ optionalDependencies:
+ '@types/node': 22.20.1
+
'@inquirer/type@4.0.7(@types/node@24.13.3)':
optionalDependencies:
'@types/node': 24.13.3
@@ -10137,59 +10291,59 @@ snapshots:
dependencies:
tslib: 2.8.1
- '@jsonjoy.com/fs-core@4.64.0(tslib@2.8.1)':
+ '@jsonjoy.com/fs-core@4.68.0(tslib@2.8.1)':
dependencies:
- '@jsonjoy.com/fs-node-builtins': 4.64.0(tslib@2.8.1)
- '@jsonjoy.com/fs-node-utils': 4.64.0(tslib@2.8.1)
- thingies: 2.6.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-builtins': 4.68.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-utils': 4.68.0(tslib@2.8.1)
+ thingies: 2.6.1(tslib@2.8.1)
tslib: 2.8.1
- '@jsonjoy.com/fs-fsa@4.64.0(tslib@2.8.1)':
+ '@jsonjoy.com/fs-fsa@4.68.0(tslib@2.8.1)':
dependencies:
- '@jsonjoy.com/fs-core': 4.64.0(tslib@2.8.1)
- '@jsonjoy.com/fs-node-builtins': 4.64.0(tslib@2.8.1)
- '@jsonjoy.com/fs-node-utils': 4.64.0(tslib@2.8.1)
- thingies: 2.6.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-core': 4.68.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-builtins': 4.68.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-utils': 4.68.0(tslib@2.8.1)
+ thingies: 2.6.1(tslib@2.8.1)
tslib: 2.8.1
- '@jsonjoy.com/fs-node-builtins@4.64.0(tslib@2.8.1)':
+ '@jsonjoy.com/fs-node-builtins@4.68.0(tslib@2.8.1)':
dependencies:
tslib: 2.8.1
- '@jsonjoy.com/fs-node-to-fsa@4.64.0(tslib@2.8.1)':
+ '@jsonjoy.com/fs-node-to-fsa@4.68.0(tslib@2.8.1)':
dependencies:
- '@jsonjoy.com/fs-fsa': 4.64.0(tslib@2.8.1)
- '@jsonjoy.com/fs-node-builtins': 4.64.0(tslib@2.8.1)
- '@jsonjoy.com/fs-node-utils': 4.64.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-fsa': 4.68.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-builtins': 4.68.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-utils': 4.68.0(tslib@2.8.1)
tslib: 2.8.1
- '@jsonjoy.com/fs-node-utils@4.64.0(tslib@2.8.1)':
+ '@jsonjoy.com/fs-node-utils@4.68.0(tslib@2.8.1)':
dependencies:
- '@jsonjoy.com/fs-node-builtins': 4.64.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-builtins': 4.68.0(tslib@2.8.1)
glob-to-regex.js: 1.2.0(tslib@2.8.1)
tslib: 2.8.1
- '@jsonjoy.com/fs-node@4.64.0(tslib@2.8.1)':
+ '@jsonjoy.com/fs-node@4.68.0(tslib@2.8.1)':
dependencies:
- '@jsonjoy.com/fs-core': 4.64.0(tslib@2.8.1)
- '@jsonjoy.com/fs-node-builtins': 4.64.0(tslib@2.8.1)
- '@jsonjoy.com/fs-node-utils': 4.64.0(tslib@2.8.1)
- '@jsonjoy.com/fs-print': 4.64.0(tslib@2.8.1)
- '@jsonjoy.com/fs-snapshot': 4.64.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-core': 4.68.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-builtins': 4.68.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-utils': 4.68.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-print': 4.68.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-snapshot': 4.68.0(tslib@2.8.1)
glob-to-regex.js: 1.2.0(tslib@2.8.1)
- thingies: 2.6.0(tslib@2.8.1)
+ thingies: 2.6.1(tslib@2.8.1)
tslib: 2.8.1
- '@jsonjoy.com/fs-print@4.64.0(tslib@2.8.1)':
+ '@jsonjoy.com/fs-print@4.68.0(tslib@2.8.1)':
dependencies:
- '@jsonjoy.com/fs-node-utils': 4.64.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-utils': 4.68.0(tslib@2.8.1)
tree-dump: 1.1.0(tslib@2.8.1)
tslib: 2.8.1
- '@jsonjoy.com/fs-snapshot@4.64.0(tslib@2.8.1)':
+ '@jsonjoy.com/fs-snapshot@4.68.0(tslib@2.8.1)':
dependencies:
'@jsonjoy.com/buffers': 17.67.0(tslib@2.8.1)
- '@jsonjoy.com/fs-node-utils': 4.64.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-utils': 4.68.0(tslib@2.8.1)
'@jsonjoy.com/json-pack': 17.67.0(tslib@2.8.1)
'@jsonjoy.com/util': 17.67.0(tslib@2.8.1)
tslib: 2.8.1
@@ -10202,7 +10356,7 @@ snapshots:
'@jsonjoy.com/json-pointer': 1.0.2(tslib@2.8.1)
'@jsonjoy.com/util': 1.9.0(tslib@2.8.1)
hyperdyperid: 1.2.0
- thingies: 2.6.0(tslib@2.8.1)
+ thingies: 2.6.1(tslib@2.8.1)
tree-dump: 1.1.0(tslib@2.8.1)
tslib: 2.8.1
@@ -10214,7 +10368,7 @@ snapshots:
'@jsonjoy.com/json-pointer': 17.67.0(tslib@2.8.1)
'@jsonjoy.com/util': 17.67.0(tslib@2.8.1)
hyperdyperid: 1.2.0
- thingies: 2.6.0(tslib@2.8.1)
+ thingies: 2.6.1(tslib@2.8.1)
tree-dump: 1.1.0(tslib@2.8.1)
tslib: 2.8.1
@@ -10243,10 +10397,10 @@ snapshots:
'@leichtgewicht/ip-codec@2.0.5': {}
- '@listr2/prompt-adapter-inquirer@4.2.4(@inquirer/prompts@8.5.2(@types/node@24.13.3))(@types/node@24.13.3)(listr2@10.2.2)':
+ '@listr2/prompt-adapter-inquirer@4.2.4(@inquirer/prompts@8.5.2(@types/node@22.20.1))(@types/node@22.20.1)(listr2@10.2.2)':
dependencies:
- '@inquirer/prompts': 8.5.2(@types/node@24.13.3)
- '@inquirer/type': 4.0.7(@types/node@24.13.3)
+ '@inquirer/prompts': 8.5.2(@types/node@22.20.1)
+ '@inquirer/type': 4.0.7(@types/node@22.20.1)
listr2: 10.2.2
transitivePeerDependencies:
- '@types/node'
@@ -10272,9 +10426,9 @@ snapshots:
'@lmdb/lmdb-win32-x64@3.5.6':
optional: true
- '@modelcontextprotocol/sdk@1.29.0(supports-color@10.2.2)(zod@4.4.3)':
+ '@modelcontextprotocol/sdk@1.30.0(supports-color@11.0.0)(zod@4.4.3)':
dependencies:
- '@hono/node-server': 1.19.14(hono@4.12.31)
+ '@hono/node-server': 2.1.0(hono@4.13.1)
ajv: 8.20.0
ajv-formats: 3.0.1(ajv@8.20.0)
content-type: 1.0.5
@@ -10282,10 +10436,10 @@ snapshots:
cross-spawn: 7.0.6
eventsource: 3.0.7
eventsource-parser: 3.1.0
- express: 5.2.1(supports-color@10.2.2)
- express-rate-limit: 8.6.0(express@5.2.1(supports-color@10.2.2))(supports-color@10.2.2)
- hono: 4.12.31
- jose: 6.2.4
+ express: 5.2.1(supports-color@11.0.0)
+ express-rate-limit: 8.6.2(express@5.2.1(supports-color@11.0.0))(supports-color@11.0.0)
+ hono: 4.13.1
+ jose: 6.2.8
json-schema-typed: 8.0.2
pkce-challenge: 5.0.1
raw-body: 3.0.2
@@ -10393,14 +10547,14 @@ snapshots:
'@napi-rs/nice-win32-x64-msvc': 1.1.1
optional: true
- '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)':
+ '@napi-rs/wasm-runtime@1.2.2(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)':
dependencies:
'@emnapi/core': 1.11.1
'@emnapi/runtime': 1.11.1
'@tybys/wasm-util': 0.10.3
optional: true
- '@napi-rs/wasm-runtime@1.1.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)':
+ '@napi-rs/wasm-runtime@1.2.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)':
dependencies:
'@emnapi/core': 1.11.2
'@emnapi/runtime': 1.11.2
@@ -10421,55 +10575,55 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.20.1
- '@octokit/auth-app@8.2.0':
+ '@octokit/auth-app@8.3.0':
dependencies:
- '@octokit/auth-oauth-app': 9.0.3
- '@octokit/auth-oauth-user': 6.0.2
- '@octokit/request': 10.0.11
- '@octokit/request-error': 7.1.0
- '@octokit/types': 16.0.0
+ '@octokit/auth-oauth-app': 9.0.4
+ '@octokit/auth-oauth-user': 6.0.3
+ '@octokit/request': 10.0.13
+ '@octokit/request-error': 7.1.1
+ '@octokit/types': 17.0.0
toad-cache: 3.7.4
universal-github-app-jwt: 2.2.2
universal-user-agent: 7.0.3
- '@octokit/auth-oauth-app@9.0.3':
+ '@octokit/auth-oauth-app@9.0.4':
dependencies:
- '@octokit/auth-oauth-device': 8.0.3
- '@octokit/auth-oauth-user': 6.0.2
- '@octokit/request': 10.0.11
- '@octokit/types': 16.0.0
+ '@octokit/auth-oauth-device': 8.0.4
+ '@octokit/auth-oauth-user': 6.0.3
+ '@octokit/request': 10.0.13
+ '@octokit/types': 17.0.0
universal-user-agent: 7.0.3
- '@octokit/auth-oauth-device@8.0.3':
+ '@octokit/auth-oauth-device@8.0.4':
dependencies:
- '@octokit/oauth-methods': 6.0.2
- '@octokit/request': 10.0.11
- '@octokit/types': 16.0.0
+ '@octokit/oauth-methods': 6.0.4
+ '@octokit/request': 10.0.13
+ '@octokit/types': 17.0.0
universal-user-agent: 7.0.3
- '@octokit/auth-oauth-user@6.0.2':
+ '@octokit/auth-oauth-user@6.0.3':
dependencies:
- '@octokit/auth-oauth-device': 8.0.3
- '@octokit/oauth-methods': 6.0.2
- '@octokit/request': 10.0.11
- '@octokit/types': 16.0.0
+ '@octokit/auth-oauth-device': 8.0.4
+ '@octokit/oauth-methods': 6.0.4
+ '@octokit/request': 10.0.13
+ '@octokit/types': 17.0.0
universal-user-agent: 7.0.3
'@octokit/auth-token@6.0.0': {}
- '@octokit/core@7.0.6':
+ '@octokit/core@7.0.7':
dependencies:
'@octokit/auth-token': 6.0.0
- '@octokit/graphql': 9.0.3
- '@octokit/request': 10.0.11
- '@octokit/request-error': 7.1.0
- '@octokit/types': 16.0.0
+ '@octokit/graphql': 9.0.4
+ '@octokit/request': 10.0.13
+ '@octokit/request-error': 7.1.1
+ '@octokit/types': 17.0.0
before-after-hook: 4.0.0
universal-user-agent: 7.0.3
- '@octokit/endpoint@11.0.3':
+ '@octokit/endpoint@11.0.4':
dependencies:
- '@octokit/types': 16.0.0
+ '@octokit/types': 17.0.0
universal-user-agent: 7.0.3
'@octokit/graphql-schema@15.26.1':
@@ -10477,61 +10631,77 @@ snapshots:
graphql: 16.14.2
graphql-tag: 2.12.7(graphql@16.14.2)
- '@octokit/graphql@9.0.3':
+ '@octokit/graphql@9.0.4':
dependencies:
- '@octokit/request': 10.0.11
- '@octokit/types': 16.0.0
+ '@octokit/request': 10.0.13
+ '@octokit/types': 17.0.0
universal-user-agent: 7.0.3
'@octokit/oauth-authorization-url@8.0.0': {}
- '@octokit/oauth-methods@6.0.2':
+ '@octokit/oauth-methods@6.0.4':
dependencies:
'@octokit/oauth-authorization-url': 8.0.0
- '@octokit/request': 10.0.11
- '@octokit/request-error': 7.1.0
- '@octokit/types': 16.0.0
+ '@octokit/request': 10.0.13
+ '@octokit/request-error': 7.1.1
+ '@octokit/types': 17.0.0
'@octokit/openapi-types@27.0.0': {}
- '@octokit/plugin-paginate-rest@14.0.0(@octokit/core@7.0.6)':
+ '@octokit/openapi-types@28.0.0': {}
+
+ '@octokit/plugin-paginate-rest@14.0.0(@octokit/core@7.0.7)':
dependencies:
- '@octokit/core': 7.0.6
+ '@octokit/core': 7.0.7
'@octokit/types': 16.0.0
- '@octokit/plugin-request-log@6.0.0(@octokit/core@7.0.6)':
+ '@octokit/plugin-paginate-rest@15.0.0(@octokit/core@7.0.7)':
dependencies:
- '@octokit/core': 7.0.6
+ '@octokit/core': 7.0.7
+ '@octokit/types': 17.0.0
- '@octokit/plugin-rest-endpoint-methods@17.0.0(@octokit/core@7.0.6)':
+ '@octokit/plugin-request-log@6.0.0(@octokit/core@7.0.7)':
dependencies:
- '@octokit/core': 7.0.6
- '@octokit/types': 16.0.0
+ '@octokit/core': 7.0.7
- '@octokit/request-error@7.1.0':
+ '@octokit/plugin-rest-endpoint-methods@17.0.0(@octokit/core@7.0.7)':
dependencies:
+ '@octokit/core': 7.0.7
'@octokit/types': 16.0.0
- '@octokit/request@10.0.11':
+ '@octokit/plugin-rest-endpoint-methods@18.0.0(@octokit/core@7.0.7)':
dependencies:
- '@octokit/endpoint': 11.0.3
- '@octokit/request-error': 7.1.0
- '@octokit/types': 16.0.0
+ '@octokit/core': 7.0.7
+ '@octokit/types': 17.0.0
+
+ '@octokit/request-error@7.1.1':
+ dependencies:
+ '@octokit/types': 17.0.0
+
+ '@octokit/request@10.0.13':
+ dependencies:
+ '@octokit/endpoint': 11.0.4
+ '@octokit/request-error': 7.1.1
+ '@octokit/types': 17.0.0
content-type: 2.0.0
json-with-bigint: 3.5.10
universal-user-agent: 7.0.3
'@octokit/rest@22.0.1':
dependencies:
- '@octokit/core': 7.0.6
- '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.6)
- '@octokit/plugin-request-log': 6.0.0(@octokit/core@7.0.6)
- '@octokit/plugin-rest-endpoint-methods': 17.0.0(@octokit/core@7.0.6)
+ '@octokit/core': 7.0.7
+ '@octokit/plugin-paginate-rest': 14.0.0(@octokit/core@7.0.7)
+ '@octokit/plugin-request-log': 6.0.0(@octokit/core@7.0.7)
+ '@octokit/plugin-rest-endpoint-methods': 17.0.0(@octokit/core@7.0.7)
'@octokit/types@16.0.0':
dependencies:
'@octokit/openapi-types': 27.0.0
+ '@octokit/types@17.0.0':
+ dependencies:
+ '@octokit/openapi-types': 28.0.0
+
'@open-draft/deferred-promise@2.2.0': {}
'@open-draft/logger@0.3.0':
@@ -10554,74 +10724,76 @@ snapshots:
'@opentelemetry/semantic-conventions@1.43.0': {}
- '@oxc-parser/binding-android-arm-eabi@0.140.0':
+ '@oxc-parser/binding-android-arm-eabi@0.142.0':
optional: true
- '@oxc-parser/binding-android-arm64@0.140.0':
+ '@oxc-parser/binding-android-arm64@0.142.0':
optional: true
- '@oxc-parser/binding-darwin-arm64@0.140.0':
+ '@oxc-parser/binding-darwin-arm64@0.142.0':
optional: true
- '@oxc-parser/binding-darwin-x64@0.140.0':
+ '@oxc-parser/binding-darwin-x64@0.142.0':
optional: true
- '@oxc-parser/binding-freebsd-x64@0.140.0':
+ '@oxc-parser/binding-freebsd-x64@0.142.0':
optional: true
- '@oxc-parser/binding-linux-arm-gnueabihf@0.140.0':
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.142.0':
optional: true
- '@oxc-parser/binding-linux-arm-musleabihf@0.140.0':
+ '@oxc-parser/binding-linux-arm-musleabihf@0.142.0':
optional: true
- '@oxc-parser/binding-linux-arm64-gnu@0.140.0':
+ '@oxc-parser/binding-linux-arm64-gnu@0.142.0':
optional: true
- '@oxc-parser/binding-linux-arm64-musl@0.140.0':
+ '@oxc-parser/binding-linux-arm64-musl@0.142.0':
optional: true
- '@oxc-parser/binding-linux-ppc64-gnu@0.140.0':
+ '@oxc-parser/binding-linux-ppc64-gnu@0.142.0':
optional: true
- '@oxc-parser/binding-linux-riscv64-gnu@0.140.0':
+ '@oxc-parser/binding-linux-riscv64-gnu@0.142.0':
optional: true
- '@oxc-parser/binding-linux-riscv64-musl@0.140.0':
+ '@oxc-parser/binding-linux-riscv64-musl@0.142.0':
optional: true
- '@oxc-parser/binding-linux-s390x-gnu@0.140.0':
+ '@oxc-parser/binding-linux-s390x-gnu@0.142.0':
optional: true
- '@oxc-parser/binding-linux-x64-gnu@0.140.0':
+ '@oxc-parser/binding-linux-x64-gnu@0.142.0':
optional: true
- '@oxc-parser/binding-linux-x64-musl@0.140.0':
+ '@oxc-parser/binding-linux-x64-musl@0.142.0':
optional: true
- '@oxc-parser/binding-openharmony-arm64@0.140.0':
+ '@oxc-parser/binding-openharmony-arm64@0.142.0':
optional: true
- '@oxc-parser/binding-wasm32-wasi@0.140.0':
+ '@oxc-parser/binding-wasm32-wasi@0.142.0':
dependencies:
'@emnapi/core': 1.11.2
'@emnapi/runtime': 1.11.2
- '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)
+ '@napi-rs/wasm-runtime': 1.2.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)
optional: true
- '@oxc-parser/binding-win32-arm64-msvc@0.140.0':
+ '@oxc-parser/binding-win32-arm64-msvc@0.142.0':
optional: true
- '@oxc-parser/binding-win32-ia32-msvc@0.140.0':
+ '@oxc-parser/binding-win32-ia32-msvc@0.142.0':
optional: true
- '@oxc-parser/binding-win32-x64-msvc@0.140.0':
+ '@oxc-parser/binding-win32-x64-msvc@0.142.0':
optional: true
'@oxc-project/types@0.139.0': {}
'@oxc-project/types@0.140.0': {}
+ '@oxc-project/types@0.142.0': {}
+
'@parcel/watcher-android-arm64@2.6.0':
optional: true
@@ -10821,7 +10993,7 @@ snapshots:
'@puppeteer/browsers@3.0.6':
dependencies:
modern-tar: 0.7.7
- yargs: 18.0.0
+ yargs: 18.1.0
'@rolldown/binding-android-arm64@1.1.5':
optional: true
@@ -10899,14 +11071,14 @@ snapshots:
dependencies:
'@emnapi/core': 1.11.1
'@emnapi/runtime': 1.11.1
- '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)
+ '@napi-rs/wasm-runtime': 1.2.2(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)
optional: true
'@rolldown/binding-wasm32-wasi@1.2.0':
dependencies:
'@emnapi/core': 1.11.2
'@emnapi/runtime': 1.11.2
- '@napi-rs/wasm-runtime': 1.1.6(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)
+ '@napi-rs/wasm-runtime': 1.2.2(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.2)
optional: true
'@rolldown/binding-win32-arm64-msvc@1.1.5':
@@ -11058,11 +11230,11 @@ snapshots:
'@standard-schema/spec@1.1.0': {}
- '@stylistic/eslint-plugin@5.10.0(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))':
+ '@stylistic/eslint-plugin@5.10.0(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))':
dependencies:
- '@eslint-community/eslint-utils': 4.10.1(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))
- '@typescript-eslint/types': 8.65.0
- eslint: 10.7.0(jiti@2.7.0)(supports-color@10.2.2)
+ '@eslint-community/eslint-utils': 4.10.1(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))
+ '@typescript-eslint/types': 8.66.0
+ eslint: 10.7.0(jiti@2.7.0)(supports-color@11.0.0)
eslint-visitor-keys: 4.2.1
espree: 10.4.0
estraverse: 5.3.0
@@ -11072,9 +11244,9 @@ snapshots:
dependencies:
defer-to-connect: 2.0.1
- '@tony.ganchev/eslint-plugin-header@3.4.4(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))':
+ '@tony.ganchev/eslint-plugin-header@3.4.4(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))':
dependencies:
- eslint: 10.7.0(jiti@2.7.0)(supports-color@10.2.2)
+ eslint: 10.7.0(jiti@2.7.0)(supports-color@11.0.0)
'@tybys/wasm-util@0.10.3':
dependencies:
@@ -11083,24 +11255,24 @@ snapshots:
'@types/babel__core@7.20.5':
dependencies:
- '@babel/parser': 7.29.7
- '@babel/types': 7.29.7
+ '@babel/parser': 7.29.8
+ '@babel/types': 7.29.8
'@types/babel__generator': 7.27.0
'@types/babel__template': 7.4.4
'@types/babel__traverse': 7.28.0
'@types/babel__generator@7.27.0':
dependencies:
- '@babel/types': 7.29.7
+ '@babel/types': 7.29.8
'@types/babel__template@7.4.4':
dependencies:
- '@babel/parser': 7.29.7
- '@babel/types': 7.29.7
+ '@babel/parser': 7.29.8
+ '@babel/types': 7.29.8
'@types/babel__traverse@7.28.0':
dependencies:
- '@babel/types': 7.29.7
+ '@babel/types': 7.29.8
'@types/big.js@6.2.2': {}
@@ -11163,7 +11335,7 @@ snapshots:
'@types/range-parser': 1.2.7
'@types/send': 1.2.1
- '@types/express-serve-static-core@5.1.2':
+ '@types/express-serve-static-core@5.1.3':
dependencies:
'@types/node': 22.20.1
'@types/qs': 6.15.1
@@ -11180,7 +11352,7 @@ snapshots:
'@types/express@5.0.6':
dependencies:
'@types/body-parser': 1.19.6
- '@types/express-serve-static-core': 5.1.2
+ '@types/express-serve-static-core': 5.1.3
'@types/serve-static': 2.2.0
'@types/folder-hash@4.0.4': {}
@@ -11209,19 +11381,19 @@ snapshots:
'@types/json5@0.0.29': {}
- '@types/karma@6.3.9(supports-color@10.2.2)':
+ '@types/karma@6.3.9(supports-color@11.0.0)':
dependencies:
'@types/node': 22.20.1
- log4js: 6.9.1(supports-color@10.2.2)
+ log4js: 6.9.1(supports-color@11.0.0)
transitivePeerDependencies:
- supports-color
'@types/less@3.0.8': {}
- '@types/loader-utils@3.0.0(esbuild@0.28.1)':
+ '@types/loader-utils@3.0.0(esbuild@0.28.2)':
dependencies:
'@types/node': 22.20.1
- webpack: 5.108.4(esbuild@0.28.1)
+ webpack: 5.109.2(esbuild@0.28.2)
transitivePeerDependencies:
- '@minify-html/node'
- '@swc/core'
@@ -11237,7 +11409,7 @@ snapshots:
- uglify-js
- webpack-cli
- '@types/lodash@4.17.24': {}
+ '@types/lodash@4.17.25': {}
'@types/micromatch@2.3.35':
dependencies:
@@ -11287,7 +11459,7 @@ snapshots:
'@types/retry@0.12.2': {}
- '@types/semver@7.7.1': {}
+ '@types/semver@7.8.0': {}
'@types/send@0.17.6':
dependencies:
@@ -11344,15 +11516,15 @@ snapshots:
'@types/yarnpkg__lockfile@1.1.9': {}
- '@typescript-eslint/eslint-plugin@8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)':
+ '@typescript-eslint/eslint-plugin@8.64.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0)(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0)(typescript@6.0.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)
+ '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0)(typescript@6.0.3)
'@typescript-eslint/scope-manager': 8.64.0
- '@typescript-eslint/type-utils': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)
- '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)
+ '@typescript-eslint/type-utils': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0)(typescript@6.0.3)
+ '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0)(typescript@6.0.3)
'@typescript-eslint/visitor-keys': 8.64.0
- eslint: 10.7.0(jiti@2.7.0)(supports-color@10.2.2)
+ eslint: 10.7.0(jiti@2.7.0)(supports-color@11.0.0)
ignore: 7.0.6
natural-compare: 1.4.0
ts-api-utils: 2.5.0(typescript@6.0.3)
@@ -11360,23 +11532,23 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)':
+ '@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0)(typescript@6.0.3)':
dependencies:
'@typescript-eslint/scope-manager': 8.64.0
'@typescript-eslint/types': 8.64.0
- '@typescript-eslint/typescript-estree': 8.64.0(supports-color@10.2.2)(typescript@6.0.3)
+ '@typescript-eslint/typescript-estree': 8.64.0(supports-color@11.0.0)(typescript@6.0.3)
'@typescript-eslint/visitor-keys': 8.64.0
- debug: 4.4.3(supports-color@10.2.2)
- eslint: 10.7.0(jiti@2.7.0)(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
+ eslint: 10.7.0(jiti@2.7.0)(supports-color@11.0.0)
typescript: 6.0.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.64.0(supports-color@10.2.2)(typescript@6.0.3)':
+ '@typescript-eslint/project-service@8.64.0(supports-color@11.0.0)(typescript@6.0.3)':
dependencies:
'@typescript-eslint/tsconfig-utils': 8.64.0(typescript@6.0.3)
'@typescript-eslint/types': 8.64.0
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
typescript: 6.0.3
transitivePeerDependencies:
- supports-color
@@ -11390,13 +11562,13 @@ snapshots:
dependencies:
typescript: 6.0.3
- '@typescript-eslint/type-utils@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)':
+ '@typescript-eslint/type-utils@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0)(typescript@6.0.3)':
dependencies:
'@typescript-eslint/types': 8.64.0
- '@typescript-eslint/typescript-estree': 8.64.0(supports-color@10.2.2)(typescript@6.0.3)
- '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)
- debug: 4.4.3(supports-color@10.2.2)
- eslint: 10.7.0(jiti@2.7.0)(supports-color@10.2.2)
+ '@typescript-eslint/typescript-estree': 8.64.0(supports-color@11.0.0)(typescript@6.0.3)
+ '@typescript-eslint/utils': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0)(typescript@6.0.3)
+ debug: 4.4.3(supports-color@11.0.0)
+ eslint: 10.7.0(jiti@2.7.0)(supports-color@11.0.0)
ts-api-utils: 2.5.0(typescript@6.0.3)
typescript: 6.0.3
transitivePeerDependencies:
@@ -11404,16 +11576,16 @@ snapshots:
'@typescript-eslint/types@8.64.0': {}
- '@typescript-eslint/types@8.65.0': {}
+ '@typescript-eslint/types@8.66.0': {}
- '@typescript-eslint/typescript-estree@8.64.0(supports-color@10.2.2)(typescript@6.0.3)':
+ '@typescript-eslint/typescript-estree@8.64.0(supports-color@11.0.0)(typescript@6.0.3)':
dependencies:
- '@typescript-eslint/project-service': 8.64.0(supports-color@10.2.2)(typescript@6.0.3)
+ '@typescript-eslint/project-service': 8.64.0(supports-color@11.0.0)(typescript@6.0.3)
'@typescript-eslint/tsconfig-utils': 8.64.0(typescript@6.0.3)
'@typescript-eslint/types': 8.64.0
'@typescript-eslint/visitor-keys': 8.64.0
- debug: 4.4.3(supports-color@10.2.2)
- minimatch: 10.2.5
+ debug: 4.4.3(supports-color@11.0.0)
+ minimatch: 10.2.6
semver: 7.8.5
tinyglobby: 0.2.17
ts-api-utils: 2.5.0(typescript@6.0.3)
@@ -11421,13 +11593,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)':
+ '@typescript-eslint/utils@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0)(typescript@6.0.3)':
dependencies:
- '@eslint-community/eslint-utils': 4.10.1(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))
+ '@eslint-community/eslint-utils': 4.10.1(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))
'@typescript-eslint/scope-manager': 8.64.0
'@typescript-eslint/types': 8.64.0
- '@typescript-eslint/typescript-estree': 8.64.0(supports-color@10.2.2)(typescript@6.0.3)
- eslint: 10.7.0(jiti@2.7.0)(supports-color@10.2.2)
+ '@typescript-eslint/typescript-estree': 8.64.0(supports-color@11.0.0)(typescript@6.0.3)
+ eslint: 10.7.0(jiti@2.7.0)(supports-color@11.0.0)
typescript: 6.0.3
transitivePeerDependencies:
- supports-color
@@ -11437,22 +11609,22 @@ snapshots:
'@typescript-eslint/types': 8.64.0
eslint-visitor-keys: 5.0.1
- '@verdaccio/auth@8.0.4(supports-color@10.2.2)':
+ '@verdaccio/auth@8.0.4(supports-color@11.0.0)':
dependencies:
- '@verdaccio/config': 8.1.2(supports-color@10.2.2)
+ '@verdaccio/config': 8.1.2(supports-color@11.0.0)
'@verdaccio/core': 8.1.2
- '@verdaccio/loaders': 8.0.3(supports-color@10.2.2)
- '@verdaccio/signature': 8.0.3(supports-color@10.2.2)
- debug: 4.4.3(supports-color@10.2.2)
+ '@verdaccio/loaders': 8.0.3(supports-color@11.0.0)
+ '@verdaccio/signature': 8.0.3(supports-color@11.0.0)
+ debug: 4.4.3(supports-color@11.0.0)
lodash: 4.18.1
- verdaccio-htpasswd: 13.0.3(supports-color@10.2.2)
+ verdaccio-htpasswd: 13.0.3(supports-color@11.0.0)
transitivePeerDependencies:
- supports-color
- '@verdaccio/config@8.1.2(supports-color@10.2.2)':
+ '@verdaccio/config@8.1.2(supports-color@11.0.0)':
dependencies:
'@verdaccio/core': 8.1.2
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
js-yaml: 4.1.1
lodash: 4.18.1
transitivePeerDependencies:
@@ -11467,34 +11639,43 @@ snapshots:
process-warning: 1.0.0
semver: 7.7.4
+ '@verdaccio/core@8.2.1':
+ dependencies:
+ ajv: 8.20.0
+ http-errors: 2.0.1
+ http-status-codes: 2.3.0
+ minimatch: 10.2.5
+ process-warning: 1.0.0
+ semver: 7.8.5
+
'@verdaccio/file-locking@13.0.1':
dependencies:
lockfile: 1.0.4
- '@verdaccio/hooks@8.0.4(supports-color@10.2.2)':
+ '@verdaccio/hooks@8.0.4(supports-color@11.0.0)':
dependencies:
'@verdaccio/core': 8.1.2
- '@verdaccio/logger': 8.0.3(supports-color@10.2.2)
- debug: 4.4.3(supports-color@10.2.2)
+ '@verdaccio/logger': 8.0.3(supports-color@11.0.0)
+ debug: 4.4.3(supports-color@11.0.0)
got-cjs: 12.5.4
handlebars: 4.7.9
transitivePeerDependencies:
- supports-color
- '@verdaccio/loaders@8.0.3(supports-color@10.2.2)':
+ '@verdaccio/loaders@8.0.3(supports-color@11.0.0)':
dependencies:
'@verdaccio/core': 8.1.2
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
lodash: 4.18.1
transitivePeerDependencies:
- supports-color
- '@verdaccio/local-storage-legacy@11.3.4(supports-color@10.2.2)':
+ '@verdaccio/local-storage-legacy@11.3.4(supports-color@11.0.0)':
dependencies:
'@verdaccio/core': 8.1.2
'@verdaccio/file-locking': 13.0.1
'@verdaccio/streams': 10.2.5
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
globby: 11.1.0
lodash: 4.18.1
lowdb: 1.0.0
@@ -11503,12 +11684,12 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@verdaccio/logger-commons@8.0.3(supports-color@10.2.2)':
+ '@verdaccio/logger-commons@8.0.3(supports-color@11.0.0)':
dependencies:
'@verdaccio/core': 8.1.2
'@verdaccio/logger-prettify': 8.0.1
colorette: 2.0.20
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
transitivePeerDependencies:
- supports-color
@@ -11521,57 +11702,57 @@ snapshots:
pino-abstract-transport: 1.2.0
sonic-boom: 3.8.1
- '@verdaccio/logger@8.0.3(supports-color@10.2.2)':
+ '@verdaccio/logger@8.0.3(supports-color@11.0.0)':
dependencies:
- '@verdaccio/logger-commons': 8.0.3(supports-color@10.2.2)
+ '@verdaccio/logger-commons': 8.0.3(supports-color@11.0.0)
pino: 9.14.0
transitivePeerDependencies:
- supports-color
- '@verdaccio/middleware@8.0.5(supports-color@10.2.2)':
+ '@verdaccio/middleware@8.0.5(supports-color@11.0.0)':
dependencies:
- '@verdaccio/config': 8.1.2(supports-color@10.2.2)
+ '@verdaccio/config': 8.1.2(supports-color@11.0.0)
'@verdaccio/core': 8.1.2
- '@verdaccio/url': 13.0.3(supports-color@10.2.2)
- debug: 4.4.3(supports-color@10.2.2)
- express: 4.22.1(supports-color@10.2.2)
+ '@verdaccio/url': 13.0.3(supports-color@11.0.0)
+ debug: 4.4.3(supports-color@11.0.0)
+ express: 4.22.1(supports-color@11.0.0)
express-rate-limit: 5.5.1
lodash: 4.18.1
lru-cache: 7.18.3
transitivePeerDependencies:
- supports-color
- '@verdaccio/package-filter@13.0.3(supports-color@10.2.2)':
+ '@verdaccio/package-filter@13.0.3(supports-color@11.0.0)':
dependencies:
'@verdaccio/core': 8.1.2
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
semver: 7.7.4
transitivePeerDependencies:
- supports-color
- '@verdaccio/search-indexer@8.0.2(supports-color@10.2.2)':
+ '@verdaccio/search-indexer@8.0.2(supports-color@11.0.0)':
dependencies:
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
fuse.js: 7.3.0
transitivePeerDependencies:
- supports-color
- '@verdaccio/signature@8.0.3(supports-color@10.2.2)':
+ '@verdaccio/signature@8.0.3(supports-color@11.0.0)':
dependencies:
- '@verdaccio/config': 8.1.2(supports-color@10.2.2)
+ '@verdaccio/config': 8.1.2(supports-color@11.0.0)
'@verdaccio/core': 8.1.2
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
jsonwebtoken: 9.0.3
transitivePeerDependencies:
- supports-color
'@verdaccio/streams@10.2.5': {}
- '@verdaccio/tarball@13.0.3(supports-color@10.2.2)':
+ '@verdaccio/tarball@13.0.3(supports-color@11.0.0)':
dependencies:
'@verdaccio/core': 8.1.2
- '@verdaccio/url': 13.0.3(supports-color@10.2.2)
- debug: 4.4.3(supports-color@10.2.2)
+ '@verdaccio/url': 13.0.3(supports-color@11.0.0)
+ debug: 4.4.3(supports-color@11.0.0)
gunzip-maybe: 1.4.2
tar-stream: 3.1.7
transitivePeerDependencies:
@@ -11579,16 +11760,16 @@ snapshots:
- react-native-b4a
- supports-color
- '@verdaccio/ui-theme@9.0.0-next-9.21(supports-color@10.2.2)':
+ '@verdaccio/ui-theme@9.0.0-next-9.21(supports-color@11.0.0)':
dependencies:
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
transitivePeerDependencies:
- supports-color
- '@verdaccio/url@13.0.3(supports-color@10.2.2)':
+ '@verdaccio/url@13.0.3(supports-color@11.0.0)':
dependencies:
'@verdaccio/core': 8.1.2
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
validator: 13.15.26
transitivePeerDependencies:
- supports-color
@@ -11599,9 +11780,9 @@ snapshots:
lodash: 4.18.1
minimatch: 7.4.9
- '@vitejs/plugin-basic-ssl@2.3.0(vite@8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))':
+ '@vitejs/plugin-basic-ssl@2.3.0(vite@8.1.5(@types/node@22.20.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.7)(yaml@2.9.0))':
dependencies:
- vite: 8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)
+ vite: 8.1.5(@types/node@22.20.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.7)(yaml@2.9.0)
'@vitest/coverage-v8@4.1.10(vitest@4.1.10)':
dependencies:
@@ -11611,11 +11792,11 @@ snapshots:
istanbul-lib-coverage: 3.2.2
istanbul-lib-report: 3.0.1
istanbul-reports: 3.2.0
- magicast: 0.5.3
+ magicast: 0.5.4
obug: 2.1.4
std-env: 4.2.0
- tinyrainbow: 3.1.0
- vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/coverage-v8@4.1.10)(esbuild@0.28.1)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)
+ tinyrainbow: 3.1.1
+ vitest: 4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.20.1)(@vitest/coverage-v8@4.1.10)(esbuild@0.28.2)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.7)(yaml@2.9.0)
'@vitest/expect@4.1.10':
dependencies:
@@ -11624,19 +11805,19 @@ snapshots:
'@vitest/spy': 4.1.10
'@vitest/utils': 4.1.10
chai: 6.2.2
- tinyrainbow: 3.1.0
+ tinyrainbow: 3.1.1
- '@vitest/mocker@4.1.10(vite@8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))':
+ '@vitest/mocker@4.1.10(vite@8.1.5(@types/node@22.20.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.7)(yaml@2.9.0))':
dependencies:
'@vitest/spy': 4.1.10
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- vite: 8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)
+ vite: 8.1.5(@types/node@22.20.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.7)(yaml@2.9.0)
'@vitest/pretty-format@4.1.10':
dependencies:
- tinyrainbow: 3.1.0
+ tinyrainbow: 3.1.1
'@vitest/runner@4.1.10':
dependencies:
@@ -11656,7 +11837,7 @@ snapshots:
dependencies:
'@vitest/pretty-format': 4.1.10
convert-source-map: 2.0.0
- tinyrainbow: 3.1.0
+ tinyrainbow: 3.1.1
'@webassemblyjs/ast@1.14.1':
dependencies:
@@ -11761,24 +11942,20 @@ snapshots:
mime-types: 3.0.2
negotiator: 1.0.0
- acorn-import-phases@1.0.4(acorn@8.17.0):
- dependencies:
- acorn: 8.17.0
-
- acorn-jsx@5.3.2(acorn@8.17.0):
+ acorn-jsx@5.3.2(acorn@8.18.0):
dependencies:
- acorn: 8.17.0
+ acorn: 8.18.0
- acorn@8.17.0: {}
+ acorn@8.18.0: {}
adjust-sourcemap-loader@4.0.0:
dependencies:
loader-utils: 2.0.4
regex-parser: 2.3.1
- agent-base@6.0.2(supports-color@10.2.2):
+ agent-base@6.0.2(supports-color@11.0.0):
dependencies:
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
transitivePeerDependencies:
- supports-color
@@ -11809,14 +11986,14 @@ snapshots:
ajv@8.18.0:
dependencies:
fast-deep-equal: 3.1.3
- fast-uri: 3.1.4
+ fast-uri: 3.1.5
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
ajv@8.20.0:
dependencies:
fast-deep-equal: 3.1.3
- fast-uri: 3.1.4
+ fast-uri: 3.1.5
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
@@ -11916,7 +12093,7 @@ snapshots:
asn1js@3.0.10:
dependencies:
pvtsutils: 1.3.6
- pvutils: 1.1.5
+ pvutils: 1.2.0
tslib: 2.8.1
assert-plus@1.0.0: {}
@@ -11943,13 +12120,13 @@ snapshots:
atomic-sleep@1.0.0: {}
- autoprefixer@10.5.4(postcss@8.5.19):
+ autoprefixer@10.5.4(postcss@8.5.25):
dependencies:
- browserslist: 4.28.7
- caniuse-lite: 1.0.30001806
+ browserslist: 4.28.8
+ caniuse-lite: 1.0.30001809
fraction.js: 5.3.4
picocolors: 1.1.1
- postcss: 8.5.19
+ postcss: 8.5.25
postcss-value-parser: 4.2.0
available-typed-arrays@1.0.7:
@@ -11962,18 +12139,18 @@ snapshots:
b4a@1.8.1: {}
- babel-loader@10.1.1(@babel/core@8.0.1)(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)):
+ babel-loader@10.1.1(@babel/core@8.0.1)(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)):
dependencies:
'@babel/core': 8.0.1
find-up: 5.0.0
optionalDependencies:
- webpack: 5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)
+ webpack: 5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)
babel-plugin-polyfill-corejs3@1.0.0(@babel/core@8.0.1):
dependencies:
'@babel/core': 8.0.1
'@babel/helper-define-polyfill-provider': 1.0.0(@babel/core@8.0.1)
- core-js-compat: 3.49.0
+ core-js-compat: 3.50.0
balanced-match@1.0.2: {}
@@ -11981,12 +12158,12 @@ snapshots:
bare-events@2.9.1: {}
- bare-fs@4.7.4:
+ bare-fs@4.8.0:
dependencies:
bare-events: 2.9.1
bare-path: 3.1.1
bare-stream: 2.13.3(bare-events@2.9.1)
- bare-url: 2.4.6
+ bare-url: 2.5.1
fast-fifo: 1.3.2
transitivePeerDependencies:
- bare-abort-controller
@@ -12004,7 +12181,7 @@ snapshots:
transitivePeerDependencies:
- react-native-b4a
- bare-url@2.4.6:
+ bare-url@2.5.1:
dependencies:
bare-path: 3.1.1
@@ -12012,7 +12189,7 @@ snapshots:
base64id@2.0.0: {}
- baseline-browser-mapping@2.11.0: {}
+ baseline-browser-mapping@2.11.13: {}
batch@0.6.1: {}
@@ -12030,9 +12207,9 @@ snapshots:
domhandler: 5.0.3
htmlparser2: 10.1.0
picocolors: 1.1.1
- postcss: 8.5.19
+ postcss: 8.5.25
postcss-media-query-parser: 0.2.3
- postcss-safe-parser: 7.0.1(postcss@8.5.19)
+ postcss-safe-parser: 7.0.1(postcss@8.5.25)
before-after-hook@4.0.0: {}
@@ -12048,11 +12225,11 @@ snapshots:
binary-extensions@2.3.0: {}
- body-parser@1.20.6(supports-color@10.2.2):
+ body-parser@1.20.6(supports-color@11.0.0):
dependencies:
bytes: 3.1.2
content-type: 1.0.5
- debug: 2.6.9(supports-color@10.2.2)
+ debug: 2.6.9(supports-color@11.0.0)
depd: 2.0.0
destroy: 1.2.0
http-errors: 2.0.1
@@ -12065,11 +12242,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
- body-parser@2.3.0(supports-color@10.2.2):
+ body-parser@2.3.0(supports-color@11.0.0):
dependencies:
bytes: 3.1.2
content-type: 2.0.0
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
http-errors: 2.0.1
iconv-lite: 0.7.3
on-finished: 2.4.1
@@ -12079,23 +12256,23 @@ snapshots:
transitivePeerDependencies:
- supports-color
- bonjour-service@1.4.3:
+ bonjour-service@1.4.4:
dependencies:
fast-deep-equal: 3.1.3
multicast-dns: 7.2.5
boolbase@1.0.0: {}
- brace-expansion@1.1.16:
+ brace-expansion@1.1.18:
dependencies:
balanced-match: 1.0.2
concat-map: 0.0.1
- brace-expansion@2.1.2:
+ brace-expansion@2.1.4:
dependencies:
balanced-match: 1.0.2
- brace-expansion@5.0.7:
+ brace-expansion@5.0.9:
dependencies:
balanced-match: 4.0.4
@@ -12111,28 +12288,28 @@ snapshots:
fresh: 0.5.2
mitt: 1.2.0
- browser-sync-ui@3.0.4(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6):
+ browser-sync-ui@3.0.4(bufferutil@4.1.0)(supports-color@11.0.0)(utf-8-validate@6.0.6):
dependencies:
async-each-series: 0.1.1
chalk: 4.1.2
connect-history-api-fallback: 1.6.0
immutable: 3.8.3
server-destroy: 1.0.1
- socket.io-client: 4.8.3(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)
+ socket.io-client: 4.8.3(bufferutil@4.1.0)(supports-color@11.0.0)(utf-8-validate@6.0.6)
stream-throttle: 0.1.3
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
- browser-sync@3.0.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(utf-8-validate@6.0.6):
+ browser-sync@3.0.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@11.0.0))(supports-color@11.0.0)(utf-8-validate@6.0.6):
dependencies:
browser-sync-client: 3.0.4
- browser-sync-ui: 3.0.4(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)
+ browser-sync-ui: 3.0.4(bufferutil@4.1.0)(supports-color@11.0.0)(utf-8-validate@6.0.6)
bs-recipes: 1.3.4
chalk: 4.1.2
chokidar: 3.6.0
- connect: 3.6.6(supports-color@10.2.2)
+ connect: 3.6.6(supports-color@11.0.0)
connect-history-api-fallback: 1.6.0
dev-ip: 1.0.1
easy-extender: 2.3.4
@@ -12140,19 +12317,19 @@ snapshots:
etag: 1.8.1
fresh: 0.5.2
fs-extra: 3.0.1
- http-proxy: 1.18.1(debug@4.4.3(supports-color@10.2.2))
+ http-proxy: 1.18.1(debug@4.4.3(supports-color@11.0.0))
immutable: 3.8.3
micromatch: 4.0.8
opn: 5.3.0
portscanner: 2.2.0
raw-body: 2.5.3
- resp-modifier: 6.0.2(supports-color@10.2.2)
+ resp-modifier: 6.0.2(supports-color@11.0.0)
rx: 4.1.0
- send: 0.19.2(supports-color@10.2.2)
- serve-index: 1.9.2(supports-color@10.2.2)
- serve-static: 1.16.3(supports-color@10.2.2)
+ send: 0.19.2(supports-color@11.0.0)
+ serve-index: 1.9.2(supports-color@11.0.0)
+ serve-static: 1.16.3(supports-color@11.0.0)
server-destroy: 1.0.1
- socket.io: 4.8.3(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)
+ socket.io: 4.8.3(bufferutil@4.1.0)(supports-color@11.0.0)(utf-8-validate@6.0.6)
ua-parser-js: 1.0.41
yargs: 17.7.3
transitivePeerDependencies:
@@ -12165,13 +12342,13 @@ snapshots:
dependencies:
pako: 0.2.9
- browserslist@4.28.7:
+ browserslist@4.28.8:
dependencies:
- baseline-browser-mapping: 2.11.0
- caniuse-lite: 1.0.30001806
- electron-to-chromium: 1.5.395
- node-releases: 2.0.51
- update-browserslist-db: 1.2.3(browserslist@4.28.7)
+ baseline-browser-mapping: 2.11.13
+ caniuse-lite: 1.0.30001809
+ electron-to-chromium: 1.5.403
+ node-releases: 2.0.53
+ update-browserslist-db: 1.3.0(browserslist@4.28.8)
bs-recipes@1.3.4: {}
@@ -12227,7 +12404,7 @@ snapshots:
callsites@3.1.0: {}
- caniuse-lite@1.0.30001806: {}
+ caniuse-lite@1.0.30001809: {}
caseless@0.12.0: {}
@@ -12264,7 +12441,7 @@ snapshots:
chokidar@5.0.0:
dependencies:
- readdirp: 5.0.0
+ readdirp: 5.1.1
chrome-trace-event@1.0.4: {}
@@ -12351,11 +12528,11 @@ snapshots:
dependencies:
mime-db: 1.54.0
- compression@1.8.1(supports-color@10.2.2):
+ compression@1.8.1(supports-color@11.0.0):
dependencies:
bytes: 3.1.2
compressible: 2.0.18
- debug: 2.6.9(supports-color@10.2.2)
+ debug: 2.6.9(supports-color@11.0.0)
negotiator: 0.6.4
on-headers: 1.1.0
safe-buffer: 5.2.1
@@ -12369,19 +12546,19 @@ snapshots:
connect-history-api-fallback@2.0.0: {}
- connect@3.6.6(supports-color@10.2.2):
+ connect@3.6.6(supports-color@11.0.0):
dependencies:
- debug: 2.6.9(supports-color@10.2.2)
- finalhandler: 1.1.0(supports-color@10.2.2)
+ debug: 2.6.9(supports-color@11.0.0)
+ finalhandler: 1.1.0(supports-color@11.0.0)
parseurl: 1.3.3
utils-merge: 1.0.1
transitivePeerDependencies:
- supports-color
- connect@3.7.0(supports-color@10.2.2):
+ connect@3.7.0(supports-color@11.0.0):
dependencies:
- debug: 2.6.9(supports-color@10.2.2)
- finalhandler: 1.1.2(supports-color@10.2.2)
+ debug: 2.6.9(supports-color@11.0.0)
+ finalhandler: 1.1.2(supports-color@11.0.0)
parseurl: 1.3.3
utils-merge: 1.0.1
transitivePeerDependencies:
@@ -12401,7 +12578,7 @@ snapshots:
conventional-commits-filter@6.0.1: {}
- conventional-commits-parser@7.1.0:
+ conventional-commits-parser@7.1.2:
dependencies:
'@simple-libs/stream-utils': 2.0.0
argue-cli: 3.1.0
@@ -12420,18 +12597,18 @@ snapshots:
dependencies:
is-what: 4.1.16
- copy-webpack-plugin@14.0.0(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)):
+ copy-webpack-plugin@14.0.0(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)):
dependencies:
glob-parent: 6.0.2
normalize-path: 3.0.0
schema-utils: 4.3.3
- serialize-javascript: 7.0.7
+ serialize-javascript: 7.1.0
tinyglobby: 0.2.17
- webpack: 5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)
+ webpack: 5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)
- core-js-compat@3.49.0:
+ core-js-compat@3.50.0:
dependencies:
- browserslist: 4.28.7
+ browserslist: 4.28.8
core-util-is@1.0.2: {}
@@ -12446,7 +12623,7 @@ snapshots:
dependencies:
env-paths: 2.2.1
import-fresh: 3.3.1
- js-yaml: 4.3.0
+ js-yaml: 4.3.1
parse-json: 5.2.0
optionalDependencies:
typescript: 6.0.3
@@ -12457,18 +12634,18 @@ snapshots:
shebang-command: 2.0.0
which: 2.0.2
- css-loader@7.1.4(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)):
+ css-loader@7.1.4(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)):
dependencies:
- icss-utils: 5.1.0(postcss@8.5.19)
- postcss: 8.5.19
- postcss-modules-extract-imports: 3.1.0(postcss@8.5.19)
- postcss-modules-local-by-default: 4.2.0(postcss@8.5.19)
- postcss-modules-scope: 3.2.1(postcss@8.5.19)
- postcss-modules-values: 4.0.0(postcss@8.5.19)
+ icss-utils: 5.1.0(postcss@8.5.25)
+ postcss: 8.5.25
+ postcss-modules-extract-imports: 3.1.0(postcss@8.5.25)
+ postcss-modules-local-by-default: 4.2.0(postcss@8.5.25)
+ postcss-modules-scope: 3.2.1(postcss@8.5.25)
+ postcss-modules-values: 4.0.0(postcss@8.5.25)
postcss-value-parser: 4.2.0
semver: 7.8.5
optionalDependencies:
- webpack: 5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)
+ webpack: 5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)
css-select@6.0.0:
dependencies:
@@ -12524,29 +12701,29 @@ snapshots:
dayjs@1.11.18: {}
- debug@2.6.9(supports-color@10.2.2):
+ debug@2.6.9(supports-color@11.0.0):
dependencies:
ms: 2.0.0
optionalDependencies:
- supports-color: 10.2.2
+ supports-color: 11.0.0
- debug@3.2.7(supports-color@10.2.2):
+ debug@3.2.7(supports-color@11.0.0):
dependencies:
ms: 2.1.3
optionalDependencies:
- supports-color: 10.2.2
+ supports-color: 11.0.0
- debug@4.4.0(supports-color@10.2.2):
+ debug@4.4.0(supports-color@11.0.0):
dependencies:
ms: 2.1.3
optionalDependencies:
- supports-color: 10.2.2
+ supports-color: 11.0.0
- debug@4.4.3(supports-color@10.2.2):
+ debug@4.4.3(supports-color@11.0.0):
dependencies:
ms: 2.1.3
optionalDependencies:
- supports-color: 10.2.2
+ supports-color: 11.0.0
decimal.js@10.6.0: {}
@@ -12683,7 +12860,7 @@ snapshots:
ejs@6.0.1: {}
- electron-to-chromium@1.5.395: {}
+ electron-to-chromium@1.5.403: {}
emoji-regex@10.6.0: {}
@@ -12707,12 +12884,12 @@ snapshots:
dependencies:
once: 1.4.0
- engine.io-client@6.6.6(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6):
+ engine.io-client@6.6.6(bufferutil@4.1.0)(supports-color@11.0.0)(utf-8-validate@6.0.6):
dependencies:
'@socket.io/component-emitter': 3.1.2
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
engine.io-parser: 5.2.3
- ws: 8.21.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)
xmlhttprequest-ssl: 2.1.2
transitivePeerDependencies:
- bufferutil
@@ -12721,7 +12898,7 @@ snapshots:
engine.io-parser@5.2.3: {}
- engine.io@6.6.9(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6):
+ engine.io@6.6.9(bufferutil@4.1.0)(supports-color@11.0.0)(utf-8-validate@6.0.6):
dependencies:
'@types/cors': 2.8.19
'@types/node': 22.20.1
@@ -12730,15 +12907,15 @@ snapshots:
base64id: 2.0.0
cookie: 0.7.2
cors: 2.8.6
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
engine.io-parser: 5.2.3
- ws: 8.21.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
- enhanced-resolve@5.24.3:
+ enhanced-resolve@5.24.5:
dependencies:
graceful-fs: 4.2.11
tapable: 2.3.3
@@ -12865,36 +13042,36 @@ snapshots:
is-date-object: 1.1.0
is-symbol: 1.1.1
- esbuild-wasm@0.28.1: {}
+ esbuild-wasm@0.28.2: {}
- esbuild@0.28.1:
+ esbuild@0.28.2:
optionalDependencies:
- '@esbuild/aix-ppc64': 0.28.1
- '@esbuild/android-arm': 0.28.1
- '@esbuild/android-arm64': 0.28.1
- '@esbuild/android-x64': 0.28.1
- '@esbuild/darwin-arm64': 0.28.1
- '@esbuild/darwin-x64': 0.28.1
- '@esbuild/freebsd-arm64': 0.28.1
- '@esbuild/freebsd-x64': 0.28.1
- '@esbuild/linux-arm': 0.28.1
- '@esbuild/linux-arm64': 0.28.1
- '@esbuild/linux-ia32': 0.28.1
- '@esbuild/linux-loong64': 0.28.1
- '@esbuild/linux-mips64el': 0.28.1
- '@esbuild/linux-ppc64': 0.28.1
- '@esbuild/linux-riscv64': 0.28.1
- '@esbuild/linux-s390x': 0.28.1
- '@esbuild/linux-x64': 0.28.1
- '@esbuild/netbsd-arm64': 0.28.1
- '@esbuild/netbsd-x64': 0.28.1
- '@esbuild/openbsd-arm64': 0.28.1
- '@esbuild/openbsd-x64': 0.28.1
- '@esbuild/openharmony-arm64': 0.28.1
- '@esbuild/sunos-x64': 0.28.1
- '@esbuild/win32-arm64': 0.28.1
- '@esbuild/win32-ia32': 0.28.1
- '@esbuild/win32-x64': 0.28.1
+ '@esbuild/aix-ppc64': 0.28.2
+ '@esbuild/android-arm': 0.28.2
+ '@esbuild/android-arm64': 0.28.2
+ '@esbuild/android-x64': 0.28.2
+ '@esbuild/darwin-arm64': 0.28.2
+ '@esbuild/darwin-x64': 0.28.2
+ '@esbuild/freebsd-arm64': 0.28.2
+ '@esbuild/freebsd-x64': 0.28.2
+ '@esbuild/linux-arm': 0.28.2
+ '@esbuild/linux-arm64': 0.28.2
+ '@esbuild/linux-ia32': 0.28.2
+ '@esbuild/linux-loong64': 0.28.2
+ '@esbuild/linux-mips64el': 0.28.2
+ '@esbuild/linux-ppc64': 0.28.2
+ '@esbuild/linux-riscv64': 0.28.2
+ '@esbuild/linux-s390x': 0.28.2
+ '@esbuild/linux-x64': 0.28.2
+ '@esbuild/netbsd-arm64': 0.28.2
+ '@esbuild/netbsd-x64': 0.28.2
+ '@esbuild/openbsd-arm64': 0.28.2
+ '@esbuild/openbsd-x64': 0.28.2
+ '@esbuild/openharmony-arm64': 0.28.2
+ '@esbuild/sunos-x64': 0.28.2
+ '@esbuild/win32-arm64': 0.28.2
+ '@esbuild/win32-ia32': 0.28.2
+ '@esbuild/win32-x64': 0.28.2
escalade@3.2.0: {}
@@ -12902,40 +13079,40 @@ snapshots:
escape-string-regexp@4.0.0: {}
- eslint-config-prettier@10.1.8(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2)):
+ eslint-config-prettier@10.1.8(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0)):
dependencies:
- eslint: 10.7.0(jiti@2.7.0)(supports-color@10.2.2)
+ eslint: 10.7.0(jiti@2.7.0)(supports-color@11.0.0)
- eslint-import-resolver-node@0.3.10(supports-color@10.2.2):
+ eslint-import-resolver-node@0.3.10(supports-color@11.0.0):
dependencies:
- debug: 3.2.7(supports-color@10.2.2)
+ debug: 3.2.7(supports-color@11.0.0)
is-core-module: 2.16.2
resolve: 2.0.0-next.7
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.14.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint-import-resolver-node@0.3.10(supports-color@10.2.2))(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2):
+ eslint-module-utils@2.14.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0)(typescript@6.0.3))(eslint-import-resolver-node@0.3.10(supports-color@11.0.0))(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0):
dependencies:
- debug: 3.2.7(supports-color@10.2.2)
+ debug: 3.2.7(supports-color@11.0.0)
optionalDependencies:
- '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)
- eslint: 10.7.0(jiti@2.7.0)(supports-color@10.2.2)
- eslint-import-resolver-node: 0.3.10(supports-color@10.2.2)
+ '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0)(typescript@6.0.3)
+ eslint: 10.7.0(jiti@2.7.0)(supports-color@11.0.0)
+ eslint-import-resolver-node: 0.3.10(supports-color@11.0.0)
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2):
+ eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0)(typescript@6.0.3))(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.9
array.prototype.findlastindex: 1.2.6
array.prototype.flat: 1.3.3
array.prototype.flatmap: 1.3.3
- debug: 3.2.7(supports-color@10.2.2)
+ debug: 3.2.7(supports-color@11.0.0)
doctrine: 2.1.0
- eslint: 10.7.0(jiti@2.7.0)(supports-color@10.2.2)
- eslint-import-resolver-node: 0.3.10(supports-color@10.2.2)
- eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3))(eslint-import-resolver-node@0.3.10(supports-color@10.2.2))(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)
+ eslint: 10.7.0(jiti@2.7.0)(supports-color@11.0.0)
+ eslint-import-resolver-node: 0.3.10(supports-color@11.0.0)
+ eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0)(typescript@6.0.3))(eslint-import-resolver-node@0.3.10(supports-color@11.0.0))(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0)
hasown: 2.0.4
is-core-module: 2.16.2
is-glob: 4.0.3
@@ -12947,7 +13124,7 @@ snapshots:
string.prototype.trimend: 1.0.10
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))(supports-color@10.2.2)(typescript@6.0.3)
+ '@typescript-eslint/parser': 8.64.0(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))(supports-color@11.0.0)(typescript@6.0.3)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
@@ -12971,11 +13148,11 @@ snapshots:
eslint-visitor-keys@5.0.1: {}
- eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2):
+ eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0):
dependencies:
- '@eslint-community/eslint-utils': 4.10.1(eslint@10.7.0(jiti@2.7.0)(supports-color@10.2.2))
+ '@eslint-community/eslint-utils': 4.10.1(eslint@10.7.0(jiti@2.7.0)(supports-color@11.0.0))
'@eslint-community/regexpp': 4.12.2
- '@eslint/config-array': 0.23.5(supports-color@10.2.2)
+ '@eslint/config-array': 0.23.5(supports-color@11.0.0)
'@eslint/config-helpers': 0.6.0
'@eslint/core': 1.2.1
'@eslint/plugin-kit': 0.7.2
@@ -12985,7 +13162,7 @@ snapshots:
'@types/estree': 1.0.9
ajv: 6.15.0
cross-spawn: 7.0.6
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
escape-string-regexp: 4.0.0
eslint-scope: 9.1.2
eslint-visitor-keys: 5.0.1
@@ -13000,7 +13177,7 @@ snapshots:
imurmurhash: 0.1.4
is-glob: 4.0.3
json-stable-stringify-without-jsonify: 1.0.1
- minimatch: 10.2.5
+ minimatch: 10.2.6
natural-compare: 1.4.0
optionator: 0.9.4
optionalDependencies:
@@ -13010,14 +13187,14 @@ snapshots:
espree@10.4.0:
dependencies:
- acorn: 8.17.0
- acorn-jsx: 5.3.2(acorn@8.17.0)
+ acorn: 8.18.0
+ acorn-jsx: 5.3.2(acorn@8.18.0)
eslint-visitor-keys: 4.2.1
espree@11.2.0:
dependencies:
- acorn: 8.17.0
- acorn-jsx: 5.3.2(acorn@8.17.0)
+ acorn: 8.18.0
+ acorn-jsx: 5.3.2(acorn@8.18.0)
eslint-visitor-keys: 5.0.1
esquery@1.7.0:
@@ -13068,29 +13245,29 @@ snapshots:
express-rate-limit@5.5.1: {}
- express-rate-limit@8.6.0(express@5.2.1(supports-color@10.2.2))(supports-color@10.2.2):
+ express-rate-limit@8.6.2(express@5.2.1(supports-color@11.0.0))(supports-color@11.0.0):
dependencies:
- debug: 4.4.3(supports-color@10.2.2)
- express: 5.2.1(supports-color@10.2.2)
- ip-address: 10.2.0
+ debug: 4.4.3(supports-color@11.0.0)
+ express: 5.2.1(supports-color@11.0.0)
+ ip-address: 10.5.0
transitivePeerDependencies:
- supports-color
- express@4.22.1(supports-color@10.2.2):
+ express@4.22.1(supports-color@11.0.0):
dependencies:
accepts: 1.3.8
array-flatten: 1.1.1
- body-parser: 1.20.6(supports-color@10.2.2)
+ body-parser: 1.20.6(supports-color@11.0.0)
content-disposition: 0.5.4
content-type: 1.0.5
cookie: 0.7.2
cookie-signature: 1.0.7
- debug: 2.6.9(supports-color@10.2.2)
+ debug: 2.6.9(supports-color@11.0.0)
depd: 2.0.0
encodeurl: 2.0.0
escape-html: 1.0.3
etag: 1.8.1
- finalhandler: 1.3.2(supports-color@10.2.2)
+ finalhandler: 1.3.2(supports-color@11.0.0)
fresh: 0.5.2
http-errors: 2.0.1
merge-descriptors: 1.0.3
@@ -13102,8 +13279,8 @@ snapshots:
qs: 6.14.2
range-parser: 1.2.1
safe-buffer: 5.2.1
- send: 0.19.2(supports-color@10.2.2)
- serve-static: 1.16.3(supports-color@10.2.2)
+ send: 0.19.2(supports-color@11.0.0)
+ serve-static: 1.16.3(supports-color@11.0.0)
setprototypeof: 1.2.0
statuses: 2.0.2
type-is: 1.6.18
@@ -13112,21 +13289,21 @@ snapshots:
transitivePeerDependencies:
- supports-color
- express@4.22.2(supports-color@10.2.2):
+ express@4.22.2(supports-color@11.0.0):
dependencies:
accepts: 1.3.8
array-flatten: 1.1.1
- body-parser: 1.20.6(supports-color@10.2.2)
+ body-parser: 1.20.6(supports-color@11.0.0)
content-disposition: 0.5.4
content-type: 1.0.5
cookie: 0.7.2
cookie-signature: 1.0.7
- debug: 2.6.9(supports-color@10.2.2)
+ debug: 2.6.9(supports-color@11.0.0)
depd: 2.0.0
encodeurl: 2.0.0
escape-html: 1.0.3
etag: 1.8.1
- finalhandler: 1.3.2(supports-color@10.2.2)
+ finalhandler: 1.3.2(supports-color@11.0.0)
fresh: 0.5.2
http-errors: 2.0.1
merge-descriptors: 1.0.3
@@ -13138,8 +13315,8 @@ snapshots:
qs: 6.15.3
range-parser: 1.2.1
safe-buffer: 5.2.1
- send: 0.19.2(supports-color@10.2.2)
- serve-static: 1.16.3(supports-color@10.2.2)
+ send: 0.19.2(supports-color@11.0.0)
+ serve-static: 1.16.3(supports-color@11.0.0)
setprototypeof: 1.2.0
statuses: 2.0.2
type-is: 1.6.18
@@ -13148,20 +13325,20 @@ snapshots:
transitivePeerDependencies:
- supports-color
- express@5.2.1(supports-color@10.2.2):
+ express@5.2.1(supports-color@11.0.0):
dependencies:
accepts: 2.0.0
- body-parser: 2.3.0(supports-color@10.2.2)
+ body-parser: 2.3.0(supports-color@11.0.0)
content-disposition: 1.1.0
content-type: 1.0.5
cookie: 0.7.2
cookie-signature: 1.2.2
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
depd: 2.0.0
encodeurl: 2.0.0
escape-html: 1.0.3
etag: 1.8.1
- finalhandler: 2.1.1(supports-color@10.2.2)
+ finalhandler: 2.1.1(supports-color@11.0.0)
fresh: 2.0.0
http-errors: 2.0.1
merge-descriptors: 2.0.0
@@ -13172,9 +13349,9 @@ snapshots:
proxy-addr: 2.0.7
qs: 6.15.3
range-parser: 1.3.0
- router: 2.2.0(supports-color@10.2.2)
- send: 1.2.1(supports-color@10.2.2)
- serve-static: 2.2.1(supports-color@10.2.2)
+ router: 2.2.0(supports-color@11.0.0)
+ send: 1.2.1(supports-color@11.0.0)
+ serve-static: 2.2.1(supports-color@11.0.0)
statuses: 2.0.2
type-is: 2.1.0
vary: 1.1.2
@@ -13207,7 +13384,7 @@ snapshots:
dependencies:
fast-string-truncated-width: 3.0.3
- fast-uri@3.1.4: {}
+ fast-uri@3.1.5: {}
fast-wrap-ansi@0.2.2:
dependencies:
@@ -13238,9 +13415,9 @@ snapshots:
dependencies:
to-regex-range: 5.0.1
- finalhandler@1.1.0(supports-color@10.2.2):
+ finalhandler@1.1.0(supports-color@11.0.0):
dependencies:
- debug: 2.6.9(supports-color@10.2.2)
+ debug: 2.6.9(supports-color@11.0.0)
encodeurl: 1.0.2
escape-html: 1.0.3
on-finished: 2.3.0
@@ -13250,9 +13427,9 @@ snapshots:
transitivePeerDependencies:
- supports-color
- finalhandler@1.1.2(supports-color@10.2.2):
+ finalhandler@1.1.2(supports-color@11.0.0):
dependencies:
- debug: 2.6.9(supports-color@10.2.2)
+ debug: 2.6.9(supports-color@11.0.0)
encodeurl: 1.0.2
escape-html: 1.0.3
on-finished: 2.3.0
@@ -13262,9 +13439,9 @@ snapshots:
transitivePeerDependencies:
- supports-color
- finalhandler@1.3.2(supports-color@10.2.2):
+ finalhandler@1.3.2(supports-color@11.0.0):
dependencies:
- debug: 2.6.9(supports-color@10.2.2)
+ debug: 2.6.9(supports-color@11.0.0)
encodeurl: 2.0.0
escape-html: 1.0.3
on-finished: 2.4.1
@@ -13274,9 +13451,9 @@ snapshots:
transitivePeerDependencies:
- supports-color
- finalhandler@2.1.1(supports-color@10.2.2):
+ finalhandler@2.1.1(supports-color@11.0.0):
dependencies:
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
encodeurl: 2.0.0
escape-html: 1.0.3
on-finished: 2.4.1
@@ -13297,58 +13474,58 @@ snapshots:
locate-path: 6.0.0
path-exists: 4.0.0
- firebase@12.16.0:
+ firebase@12.17.1:
dependencies:
- '@firebase/ai': 2.13.1(@firebase/app-types@0.9.5)(@firebase/app@0.15.1)
- '@firebase/analytics': 0.10.22(@firebase/app@0.15.1)
- '@firebase/analytics-compat': 0.2.28(@firebase/app-compat@0.5.15)(@firebase/app@0.15.1)
- '@firebase/app': 0.15.1
- '@firebase/app-check': 0.12.0(@firebase/app@0.15.1)
- '@firebase/app-check-compat': 0.4.5(@firebase/app-compat@0.5.15)(@firebase/app@0.15.1)
- '@firebase/app-compat': 0.5.15
+ '@firebase/ai': 2.14.0(@firebase/app-types@0.9.5)(@firebase/app@0.16.0)
+ '@firebase/analytics': 0.10.23(@firebase/app@0.16.0)
+ '@firebase/analytics-compat': 0.2.29(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)
+ '@firebase/app': 0.16.0
+ '@firebase/app-check': 0.13.0(@firebase/app@0.16.0)
+ '@firebase/app-check-compat': 0.4.6(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)
+ '@firebase/app-compat': 0.5.16
'@firebase/app-types': 0.9.5
- '@firebase/auth': 1.13.3(@firebase/app@0.15.1)
- '@firebase/auth-compat': 0.6.8(@firebase/app-compat@0.5.15)(@firebase/app-types@0.9.5)(@firebase/app@0.15.1)
- '@firebase/data-connect': 0.7.1(@firebase/app@0.15.1)
- '@firebase/database': 1.1.3
- '@firebase/database-compat': 2.1.4
- '@firebase/firestore': 4.16.0(@firebase/app@0.15.1)
- '@firebase/firestore-compat': 0.4.11(@firebase/app-compat@0.5.15)(@firebase/app-types@0.9.5)(@firebase/app@0.15.1)
- '@firebase/functions': 0.13.5(@firebase/app@0.15.1)
- '@firebase/functions-compat': 0.4.5(@firebase/app-compat@0.5.15)(@firebase/app@0.15.1)
- '@firebase/installations': 0.6.22(@firebase/app@0.15.1)
- '@firebase/installations-compat': 0.2.22(@firebase/app-compat@0.5.15)(@firebase/app-types@0.9.5)(@firebase/app@0.15.1)
- '@firebase/messaging': 0.13.0(@firebase/app@0.15.1)
- '@firebase/messaging-compat': 0.2.27(@firebase/app-compat@0.5.15)(@firebase/app@0.15.1)
- '@firebase/performance': 0.7.12(@firebase/app@0.15.1)
- '@firebase/performance-compat': 0.2.25(@firebase/app-compat@0.5.15)(@firebase/app@0.15.1)
- '@firebase/remote-config': 0.9.0(@firebase/app@0.15.1)
- '@firebase/remote-config-compat': 0.2.27(@firebase/app-compat@0.5.15)(@firebase/app@0.15.1)
- '@firebase/storage': 0.14.3(@firebase/app@0.15.1)
- '@firebase/storage-compat': 0.4.3(@firebase/app-compat@0.5.15)(@firebase/app-types@0.9.5)(@firebase/app@0.15.1)
- '@firebase/util': 1.15.1
+ '@firebase/auth': 1.13.4(@firebase/app@0.16.0)
+ '@firebase/auth-compat': 0.6.9(@firebase/app-compat@0.5.16)(@firebase/app-types@0.9.5)(@firebase/app@0.16.0)
+ '@firebase/data-connect': 0.7.3(@firebase/app@0.16.0)
+ '@firebase/database': 1.1.4
+ '@firebase/database-compat': 2.1.6(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)
+ '@firebase/firestore': 4.17.0(@firebase/app@0.16.0)
+ '@firebase/firestore-compat': 0.4.12(@firebase/app-compat@0.5.16)(@firebase/app-types@0.9.5)(@firebase/app@0.16.0)
+ '@firebase/functions': 0.13.6(@firebase/app@0.16.0)
+ '@firebase/functions-compat': 0.4.6(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)
+ '@firebase/installations': 0.6.23(@firebase/app@0.16.0)
+ '@firebase/installations-compat': 0.2.23(@firebase/app-compat@0.5.16)(@firebase/app-types@0.9.5)(@firebase/app@0.16.0)
+ '@firebase/messaging': 0.13.1(@firebase/app@0.16.0)
+ '@firebase/messaging-compat': 0.2.28(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)
+ '@firebase/performance': 0.7.13(@firebase/app@0.16.0)
+ '@firebase/performance-compat': 0.2.26(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)
+ '@firebase/remote-config': 0.9.1(@firebase/app@0.16.0)
+ '@firebase/remote-config-compat': 0.2.28(@firebase/app-compat@0.5.16)(@firebase/app@0.16.0)
+ '@firebase/storage': 0.14.4(@firebase/app@0.16.0)
+ '@firebase/storage-compat': 0.4.4(@firebase/app-compat@0.5.16)(@firebase/app-types@0.9.5)(@firebase/app@0.16.0)
+ '@firebase/util': 1.15.2
transitivePeerDependencies:
- '@react-native-async-storage/async-storage'
flat-cache@4.0.1:
dependencies:
- flatted: 3.4.2
+ flatted: 3.4.4
keyv: 4.5.4
flat@5.0.2: {}
- flatted@3.4.2: {}
+ flatted@3.4.4: {}
- folder-hash@4.1.3(supports-color@10.2.2):
+ folder-hash@4.1.3(supports-color@11.0.0):
dependencies:
- debug: 4.4.0(supports-color@10.2.2)
+ debug: 4.4.0(supports-color@11.0.0)
minimatch: 7.4.9
transitivePeerDependencies:
- supports-color
- follow-redirects@1.16.0(debug@4.4.3(supports-color@10.2.2)):
+ follow-redirects@1.16.0(debug@4.4.3(supports-color@11.0.0)):
optionalDependencies:
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
for-each@0.3.5:
dependencies:
@@ -13418,34 +13595,34 @@ snapshots:
fuse.js@7.3.0: {}
- gaxios@7.1.3(supports-color@10.2.2):
+ gaxios@7.1.3(supports-color@11.0.0):
dependencies:
extend: 3.0.2
- https-proxy-agent: 7.0.6(supports-color@10.2.2)
+ https-proxy-agent: 7.0.6(supports-color@11.0.0)
node-fetch: 3.3.2
rimraf: 5.0.10
transitivePeerDependencies:
- supports-color
- gaxios@7.2.0(supports-color@10.2.2):
+ gaxios@7.3.0(supports-color@11.0.0):
dependencies:
extend: 3.0.2
- https-proxy-agent: 7.0.6(supports-color@10.2.2)
+ https-proxy-agent: 7.0.6(supports-color@11.0.0)
node-fetch: 3.3.2
transitivePeerDependencies:
- supports-color
- gcp-metadata@8.1.2(supports-color@10.2.2):
+ gcp-metadata@8.1.2(supports-color@11.0.0):
dependencies:
- gaxios: 7.2.0(supports-color@10.2.2)
+ gaxios: 7.3.0(supports-color@11.0.0)
google-logging-utils: 1.1.3
json-bigint: 1.0.0
transitivePeerDependencies:
- supports-color
- gcp-metadata@8.1.3(supports-color@10.2.2):
+ gcp-metadata@8.1.4(supports-color@11.0.0):
dependencies:
- gaxios: 7.1.3(supports-color@10.2.2)
+ gaxios: 7.1.3(supports-color@11.0.0)
google-logging-utils: 1.1.3
json-bigint: 1.0.0
transitivePeerDependencies:
@@ -13518,7 +13695,7 @@ snapshots:
glob@13.0.6:
dependencies:
- minimatch: 10.2.5
+ minimatch: 10.2.6
minipass: 7.1.3
path-scurry: 2.0.2
@@ -13549,41 +13726,41 @@ snapshots:
merge2: 1.4.1
slash: 3.0.0
- google-auth-library@10.5.0(supports-color@10.2.2):
+ google-auth-library@10.5.0(supports-color@11.0.0):
dependencies:
base64-js: 1.5.1
ecdsa-sig-formatter: 1.0.11
- gaxios: 7.2.0(supports-color@10.2.2)
- gcp-metadata: 8.1.3(supports-color@10.2.2)
+ gaxios: 7.3.0(supports-color@11.0.0)
+ gcp-metadata: 8.1.4(supports-color@11.0.0)
google-logging-utils: 1.1.3
- gtoken: 8.0.0(supports-color@10.2.2)
+ gtoken: 8.0.0(supports-color@11.0.0)
jws: 4.0.1
transitivePeerDependencies:
- supports-color
- google-auth-library@10.9.0(supports-color@10.2.2):
+ google-auth-library@10.9.1(supports-color@11.0.0):
dependencies:
base64-js: 1.5.1
ecdsa-sig-formatter: 1.0.11
- gaxios: 7.2.0(supports-color@10.2.2)
- gcp-metadata: 8.1.2(supports-color@10.2.2)
+ gaxios: 7.3.0(supports-color@11.0.0)
+ gcp-metadata: 8.1.2(supports-color@11.0.0)
google-logging-utils: 1.1.3
jws: 4.0.1
transitivePeerDependencies:
- supports-color
- google-gax@5.0.7(supports-color@10.2.2):
+ google-gax@5.0.8(supports-color@11.0.0):
dependencies:
'@grpc/grpc-js': 1.14.4
'@grpc/proto-loader': 0.8.1
duplexify: 4.1.3
- google-auth-library: 10.5.0(supports-color@10.2.2)
+ google-auth-library: 10.5.0(supports-color@11.0.0)
google-logging-utils: 1.1.3
node-fetch: 3.3.2
object-hash: 3.0.0
proto3-json-serializer: 3.0.4
protobufjs: 7.6.5
- retry-request: 8.0.3(supports-color@10.2.2)
+ retry-request: 8.0.4(supports-color@11.0.0)
rimraf: 5.0.10
transitivePeerDependencies:
- supports-color
@@ -13621,9 +13798,9 @@ snapshots:
'@grpc/grpc-js': 1.14.4
protobufjs: 7.6.5
- gtoken@8.0.0(supports-color@10.2.2):
+ gtoken@8.0.0(supports-color@11.0.0):
dependencies:
- gaxios: 7.2.0(supports-color@10.2.2)
+ gaxios: 7.3.0(supports-color@11.0.0)
jws: 4.0.1
transitivePeerDependencies:
- supports-color
@@ -13670,7 +13847,7 @@ snapshots:
dependencies:
function-bind: 1.1.2
- hono@4.12.31: {}
+ hono@4.13.1: {}
hosted-git-info@10.1.1:
dependencies:
@@ -13722,17 +13899,17 @@ snapshots:
http-parser-js@0.5.10: {}
- http-proxy-agent@7.0.2(supports-color@10.2.2):
+ http-proxy-agent@7.0.2(supports-color@11.0.0):
dependencies:
agent-base: 7.1.4
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
transitivePeerDependencies:
- supports-color
- http-proxy-middleware@2.0.10(@types/express@4.17.25)(debug@4.4.3(supports-color@10.2.2)):
+ http-proxy-middleware@2.0.10(@types/express@4.17.25)(debug@4.4.3(supports-color@11.0.0)):
dependencies:
'@types/http-proxy': 1.17.17
- http-proxy: 1.18.1(debug@4.4.3(supports-color@10.2.2))
+ http-proxy: 1.18.1(debug@4.4.3(supports-color@11.0.0))
is-glob: 4.0.3
is-plain-obj: 3.0.0
micromatch: 4.0.8
@@ -13741,9 +13918,9 @@ snapshots:
transitivePeerDependencies:
- debug
- http-proxy-middleware@4.2.0(supports-color@10.2.2):
+ http-proxy-middleware@4.2.0(supports-color@11.0.0):
dependencies:
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
httpxy: 0.5.5
is-glob: 4.0.3
is-plain-obj: 4.1.0
@@ -13751,10 +13928,10 @@ snapshots:
transitivePeerDependencies:
- supports-color
- http-proxy@1.18.1(debug@4.4.3(supports-color@10.2.2)):
+ http-proxy@1.18.1(debug@4.4.3(supports-color@11.0.0)):
dependencies:
eventemitter3: 4.0.7
- follow-redirects: 1.16.0(debug@4.4.3(supports-color@10.2.2))
+ follow-redirects: 1.16.0(debug@4.4.3(supports-color@11.0.0))
requires-port: 1.0.0
transitivePeerDependencies:
- debug
@@ -13772,24 +13949,24 @@ snapshots:
quick-lru: 5.1.1
resolve-alpn: 1.2.1
- https-proxy-agent@5.0.1(supports-color@10.2.2):
+ https-proxy-agent@5.0.1(supports-color@11.0.0):
dependencies:
- agent-base: 6.0.2(supports-color@10.2.2)
- debug: 4.4.3(supports-color@10.2.2)
+ agent-base: 6.0.2(supports-color@11.0.0)
+ debug: 4.4.3(supports-color@11.0.0)
transitivePeerDependencies:
- supports-color
- https-proxy-agent@7.0.6(supports-color@10.2.2):
+ https-proxy-agent@7.0.6(supports-color@11.0.0):
dependencies:
agent-base: 7.1.4
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
transitivePeerDependencies:
- supports-color
- https-proxy-agent@9.1.0(supports-color@10.2.2):
+ https-proxy-agent@9.1.0(supports-color@11.0.0):
dependencies:
agent-base: 9.0.0
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
proxy-agent-negotiate: 1.1.0
transitivePeerDependencies:
- kerberos
@@ -13813,9 +13990,9 @@ snapshots:
dependencies:
safer-buffer: 2.1.2
- icss-utils@5.1.0(postcss@8.5.19):
+ icss-utils@5.1.0(postcss@8.5.25):
dependencies:
- postcss: 8.5.19
+ postcss: 8.5.25
idb@7.1.1: {}
@@ -13858,11 +14035,11 @@ snapshots:
hasown: 2.0.4
side-channel: 1.1.1
- ip-address@10.2.0: {}
+ ip-address@10.5.0: {}
ipaddr.js@1.9.1: {}
- ipaddr.js@2.4.0: {}
+ ipaddr.js@2.5.0: {}
is-array-buffer@3.0.5:
dependencies:
@@ -14064,20 +14241,20 @@ snapshots:
istanbul-lib-coverage@3.2.2: {}
- istanbul-lib-instrument@5.2.1(supports-color@10.2.2):
+ istanbul-lib-instrument@5.2.1(supports-color@11.0.0):
dependencies:
- '@babel/core': 7.29.7(supports-color@10.2.2)
- '@babel/parser': 7.29.7
+ '@babel/core': 7.29.7(supports-color@11.0.0)
+ '@babel/parser': 7.29.8
'@istanbuljs/schema': 0.1.6
istanbul-lib-coverage: 3.2.2
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- istanbul-lib-instrument@6.0.3(supports-color@10.2.2):
+ istanbul-lib-instrument@6.0.3(supports-color@11.0.0):
dependencies:
- '@babel/core': 7.29.7(supports-color@10.2.2)
- '@babel/parser': 7.29.7
+ '@babel/core': 7.29.7(supports-color@11.0.0)
+ '@babel/parser': 7.29.8
'@istanbuljs/schema': 0.1.6
istanbul-lib-coverage: 3.2.2
semver: 7.8.5
@@ -14090,9 +14267,9 @@ snapshots:
make-dir: 4.0.0
supports-color: 7.2.0
- istanbul-lib-source-maps@4.0.1(supports-color@10.2.2):
+ istanbul-lib-source-maps@4.0.1(supports-color@11.0.0):
dependencies:
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
istanbul-lib-coverage: 3.2.2
source-map: 0.6.1
transitivePeerDependencies:
@@ -14136,7 +14313,7 @@ snapshots:
jiti@2.7.0: {}
- jose@6.2.4: {}
+ jose@6.2.8: {}
js-tokens@10.0.0: {}
@@ -14146,7 +14323,7 @@ snapshots:
dependencies:
argparse: 2.0.1
- js-yaml@4.3.0:
+ js-yaml@4.3.1:
dependencies:
argparse: 2.0.1
@@ -14157,7 +14334,7 @@ snapshots:
'@asamuzakjp/css-color': 5.1.11
'@asamuzakjp/dom-selector': 7.1.1
'@bramus/specificity': 2.4.2
- '@csstools/css-syntax-patches-for-csstree': 1.1.6(css-tree@3.2.1)
+ '@csstools/css-syntax-patches-for-csstree': 1.1.7(css-tree@3.2.1)
'@exodus/bytes': 1.15.1
css-tree: 3.2.1
data-urls: 7.0.0
@@ -14169,7 +14346,7 @@ snapshots:
saxes: 6.0.0
symbol-tree: 3.2.4
tough-cookie: 6.0.2
- undici: 7.28.0
+ undici: 7.29.0
w3c-xmlserializer: 5.0.0
webidl-conversions: 8.0.1
whatwg-mimetype: 5.0.0
@@ -14255,54 +14432,54 @@ snapshots:
dependencies:
which: 1.3.1
- karma-coverage@2.2.1(supports-color@10.2.2):
+ karma-coverage@2.2.1(supports-color@11.0.0):
dependencies:
istanbul-lib-coverage: 3.2.2
- istanbul-lib-instrument: 5.2.1(supports-color@10.2.2)
+ istanbul-lib-instrument: 5.2.1(supports-color@11.0.0)
istanbul-lib-report: 3.0.1
- istanbul-lib-source-maps: 4.0.1(supports-color@10.2.2)
+ istanbul-lib-source-maps: 4.0.1(supports-color@11.0.0)
istanbul-reports: 3.2.0
minimatch: 3.1.5
transitivePeerDependencies:
- supports-color
- karma-jasmine-html-reporter@2.2.0(jasmine-core@6.3.0)(karma-jasmine@5.1.0(karma@6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(utf-8-validate@6.0.6)))(karma@6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(utf-8-validate@6.0.6)):
+ karma-jasmine-html-reporter@2.2.0(jasmine-core@6.3.0)(karma-jasmine@5.1.0(karma@6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@11.0.0))(supports-color@11.0.0)(utf-8-validate@6.0.6)))(karma@6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@11.0.0))(supports-color@11.0.0)(utf-8-validate@6.0.6)):
dependencies:
jasmine-core: 6.3.0
- karma: 6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(utf-8-validate@6.0.6)
- karma-jasmine: 5.1.0(karma@6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(utf-8-validate@6.0.6))
+ karma: 6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@11.0.0))(supports-color@11.0.0)(utf-8-validate@6.0.6)
+ karma-jasmine: 5.1.0(karma@6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@11.0.0))(supports-color@11.0.0)(utf-8-validate@6.0.6))
- karma-jasmine@5.1.0(karma@6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(utf-8-validate@6.0.6)):
+ karma-jasmine@5.1.0(karma@6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@11.0.0))(supports-color@11.0.0)(utf-8-validate@6.0.6)):
dependencies:
jasmine-core: 4.6.1
- karma: 6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(utf-8-validate@6.0.6)
+ karma: 6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@11.0.0))(supports-color@11.0.0)(utf-8-validate@6.0.6)
karma-source-map-support@1.4.0:
dependencies:
source-map-support: 0.5.21
- karma@6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(utf-8-validate@6.0.6):
+ karma@6.4.4(bufferutil@4.1.0)(debug@4.4.3(supports-color@11.0.0))(supports-color@11.0.0)(utf-8-validate@6.0.6):
dependencies:
'@colors/colors': 1.5.0
- body-parser: 1.20.6(supports-color@10.2.2)
+ body-parser: 1.20.6(supports-color@11.0.0)
braces: 3.0.3
chokidar: 3.6.0
- connect: 3.7.0(supports-color@10.2.2)
+ connect: 3.7.0(supports-color@11.0.0)
di: 0.0.1
dom-serialize: 2.2.1
glob: 7.2.3
graceful-fs: 4.2.11
- http-proxy: 1.18.1(debug@4.4.3(supports-color@10.2.2))
+ http-proxy: 1.18.1(debug@4.4.3(supports-color@11.0.0))
isbinaryfile: 4.0.10
lodash: 4.18.1
- log4js: 6.9.1(supports-color@10.2.2)
+ log4js: 6.9.1(supports-color@11.0.0)
mime: 2.6.0
minimatch: 3.1.5
mkdirp: 0.5.6
qjobs: 1.2.0
range-parser: 1.3.0
rimraf: 3.0.2
- socket.io: 4.8.3(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)
+ socket.io: 4.8.3(bufferutil@4.1.0)(supports-color@11.0.0)(utf-8-validate@6.0.6)
source-map: 0.6.1
tmp: 0.2.7
ua-parser-js: 0.7.41
@@ -14324,12 +14501,12 @@ snapshots:
picocolors: 1.1.1
shell-quote: 1.10.0
- less-loader@13.0.0(less@4.6.7)(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)):
+ less-loader@13.0.0(less@4.6.7)(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)):
dependencies:
'@types/less': 3.0.8
less: 4.6.7
optionalDependencies:
- webpack: 5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)
+ webpack: 5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)
less@4.6.7:
dependencies:
@@ -14349,11 +14526,11 @@ snapshots:
prelude-ls: 1.2.1
type-check: 0.4.0
- license-webpack-plugin@4.0.2(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)):
+ license-webpack-plugin@4.0.2(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)):
dependencies:
webpack-sources: 3.5.1
optionalDependencies:
- webpack: 5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)
+ webpack: 5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)
lightningcss-android-arm64@1.33.0:
optional: true
@@ -14436,8 +14613,6 @@ snapshots:
'@lmdb/lmdb-win32-x64': 3.5.6
optional: true
- loader-runner@4.3.2: {}
-
loader-utils@2.0.4:
dependencies:
big.js: 5.2.2
@@ -14481,7 +14656,7 @@ snapshots:
log-symbols@7.0.1:
dependencies:
is-unicode-supported: 2.1.0
- yoctocolors: 2.1.2
+ yoctocolors: 2.2.0
log-update@6.1.0:
dependencies:
@@ -14491,13 +14666,13 @@ snapshots:
strip-ansi: 7.2.0
wrap-ansi: 9.0.2
- log4js@6.9.1(supports-color@10.2.2):
+ log4js@6.9.1(supports-color@11.0.0):
dependencies:
date-format: 4.0.14
- debug: 4.4.3(supports-color@10.2.2)
- flatted: 3.4.2
+ debug: 4.4.3(supports-color@11.0.0)
+ flatted: 3.4.4
rfdc: 1.4.1
- streamroller: 3.1.5(supports-color@10.2.2)
+ streamroller: 3.1.5(supports-color@11.0.0)
transitivePeerDependencies:
- supports-color
@@ -14531,10 +14706,10 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
- magicast@0.5.3:
+ magicast@0.5.4:
dependencies:
- '@babel/parser': 7.29.7
- '@babel/types': 7.29.7
+ '@babel/parser': 7.29.8
+ '@babel/types': 7.29.8
source-map-js: 1.2.1
make-dir@4.0.0:
@@ -14550,22 +14725,22 @@ snapshots:
media-typer@0.3.0: {}
- media-typer@1.1.0: {}
+ media-typer@1.1.1: {}
- memfs@4.64.0(tslib@2.8.1):
+ memfs@4.68.0:
dependencies:
- '@jsonjoy.com/fs-core': 4.64.0(tslib@2.8.1)
- '@jsonjoy.com/fs-fsa': 4.64.0(tslib@2.8.1)
- '@jsonjoy.com/fs-node': 4.64.0(tslib@2.8.1)
- '@jsonjoy.com/fs-node-builtins': 4.64.0(tslib@2.8.1)
- '@jsonjoy.com/fs-node-to-fsa': 4.64.0(tslib@2.8.1)
- '@jsonjoy.com/fs-node-utils': 4.64.0(tslib@2.8.1)
- '@jsonjoy.com/fs-print': 4.64.0(tslib@2.8.1)
- '@jsonjoy.com/fs-snapshot': 4.64.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-core': 4.68.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-fsa': 4.68.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-node': 4.68.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-builtins': 4.68.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-to-fsa': 4.68.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-node-utils': 4.68.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-print': 4.68.0(tslib@2.8.1)
+ '@jsonjoy.com/fs-snapshot': 4.68.0(tslib@2.8.1)
'@jsonjoy.com/json-pack': 1.21.0(tslib@2.8.1)
'@jsonjoy.com/util': 1.9.0(tslib@2.8.1)
glob-to-regex.js: 1.2.0(tslib@2.8.1)
- thingies: 2.6.0(tslib@2.8.1)
+ thingies: 2.6.1(tslib@2.8.1)
tree-dump: 1.1.0(tslib@2.8.1)
tslib: 2.8.1
@@ -14608,54 +14783,58 @@ snapshots:
mimic-response@3.1.0: {}
- mini-css-extract-plugin@2.10.2(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)):
+ mini-css-extract-plugin@2.10.2(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)):
dependencies:
schema-utils: 4.3.3
tapable: 2.3.3
- webpack: 5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)
+ webpack: 5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)
minimalistic-assert@1.0.1: {}
minimatch@10.2.5:
dependencies:
- brace-expansion: 5.0.7
+ brace-expansion: 5.0.9
+
+ minimatch@10.2.6:
+ dependencies:
+ brace-expansion: 5.0.9
minimatch@3.1.5:
dependencies:
- brace-expansion: 1.1.16
+ brace-expansion: 1.1.18
minimatch@7.4.9:
dependencies:
- brace-expansion: 2.1.2
+ brace-expansion: 2.1.4
minimatch@9.0.9:
dependencies:
- brace-expansion: 2.1.2
+ brace-expansion: 2.1.4
minimist@1.2.8: {}
- minimizer-webpack-plugin@5.6.1(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)):
+ minimizer-webpack-plugin@5.6.1(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)):
dependencies:
'@jridgewell/trace-mapping': 0.3.31
jest-worker: 27.5.1
schema-utils: 4.3.3
terser: 5.49.0
- webpack: 5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)
+ webpack: 5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)
optionalDependencies:
- esbuild: 0.28.1
+ esbuild: 0.28.2
lightningcss: 1.33.0
- postcss: 8.5.19
+ postcss: 8.5.25
uglify-js: 3.19.3
- minimizer-webpack-plugin@5.6.1(esbuild@0.28.1)(webpack@5.108.4(esbuild@0.28.1)):
+ minimizer-webpack-plugin@5.6.1(esbuild@0.28.2)(webpack@5.109.2(esbuild@0.28.2)):
dependencies:
'@jridgewell/trace-mapping': 0.3.31
jest-worker: 27.5.1
schema-utils: 4.3.3
terser: 5.49.0
- webpack: 5.108.4(esbuild@0.28.1)
+ webpack: 5.109.2(esbuild@0.28.2)
optionalDependencies:
- esbuild: 0.28.1
+ esbuild: 0.28.2
minipass@7.1.3: {}
@@ -14703,18 +14882,18 @@ snapshots:
dependencies:
array-differ: 4.0.0
array-union: 3.0.1
- minimatch: 10.2.5
+ minimatch: 10.2.6
mute-stream@3.0.0: {}
- nanoid@3.3.16: {}
+ nanoid@3.3.18: {}
natural-compare@1.4.0: {}
needle@3.5.0:
dependencies:
iconv-lite: 0.6.3
- sax: 1.6.0
+ sax: 1.6.1
optional: true
negotiator@0.6.3: {}
@@ -14725,25 +14904,25 @@ snapshots:
neo-async@2.6.2: {}
- ng-packagr@22.1.0-next.3(@angular/compiler-cli@22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3):
+ ng-packagr@22.1.1(@angular/compiler-cli@22.1.1(@angular/compiler@22.1.1)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3):
dependencies:
'@ampproject/remapping': 2.3.0
- '@angular/compiler-cli': 22.1.0-rc.0(@angular/compiler@22.1.0-rc.0)(typescript@6.0.3)
+ '@angular/compiler-cli': 22.1.1(@angular/compiler@22.1.1)(typescript@6.0.3)
'@rollup/plugin-json': 6.1.0(rollup@4.62.2)
'@rollup/wasm-node': 4.62.2
ajv: 8.20.0
- browserslist: 4.28.7
+ browserslist: 4.28.8
chokidar: 5.0.0
commander: 15.0.0
dependency-graph: 1.0.0
- esbuild: 0.28.1
+ esbuild: 0.28.2
find-cache-directory: 6.0.0
injection-js: 2.6.1
jsonc-parser: 3.3.1
less: 4.6.7
ora: 9.4.1
piscina: 5.2.0
- postcss: 8.5.19
+ postcss: 8.5.25
rollup-plugin-dts: 6.4.1(rollup@4.62.2)(typescript@6.0.3)
rxjs: 7.8.2
sass: 1.101.0
@@ -14753,7 +14932,7 @@ snapshots:
optionalDependencies:
rollup: 4.62.2
- nock@14.0.16:
+ nock@14.0.17:
dependencies:
'@mswjs/interceptors': 0.41.9
json-stringify-safe: 5.0.1
@@ -14795,7 +14974,7 @@ snapshots:
node-gyp-build@4.8.4: {}
- node-releases@2.0.51: {}
+ node-releases@2.0.53: {}
normalize-path@3.0.0: {}
@@ -14932,30 +15111,30 @@ snapshots:
object-keys: 1.1.1
safe-push-apply: 1.0.0
- oxc-parser@0.140.0:
+ oxc-parser@0.142.0:
dependencies:
- '@oxc-project/types': 0.140.0
+ '@oxc-project/types': 0.142.0
optionalDependencies:
- '@oxc-parser/binding-android-arm-eabi': 0.140.0
- '@oxc-parser/binding-android-arm64': 0.140.0
- '@oxc-parser/binding-darwin-arm64': 0.140.0
- '@oxc-parser/binding-darwin-x64': 0.140.0
- '@oxc-parser/binding-freebsd-x64': 0.140.0
- '@oxc-parser/binding-linux-arm-gnueabihf': 0.140.0
- '@oxc-parser/binding-linux-arm-musleabihf': 0.140.0
- '@oxc-parser/binding-linux-arm64-gnu': 0.140.0
- '@oxc-parser/binding-linux-arm64-musl': 0.140.0
- '@oxc-parser/binding-linux-ppc64-gnu': 0.140.0
- '@oxc-parser/binding-linux-riscv64-gnu': 0.140.0
- '@oxc-parser/binding-linux-riscv64-musl': 0.140.0
- '@oxc-parser/binding-linux-s390x-gnu': 0.140.0
- '@oxc-parser/binding-linux-x64-gnu': 0.140.0
- '@oxc-parser/binding-linux-x64-musl': 0.140.0
- '@oxc-parser/binding-openharmony-arm64': 0.140.0
- '@oxc-parser/binding-wasm32-wasi': 0.140.0
- '@oxc-parser/binding-win32-arm64-msvc': 0.140.0
- '@oxc-parser/binding-win32-ia32-msvc': 0.140.0
- '@oxc-parser/binding-win32-x64-msvc': 0.140.0
+ '@oxc-parser/binding-android-arm-eabi': 0.142.0
+ '@oxc-parser/binding-android-arm64': 0.142.0
+ '@oxc-parser/binding-darwin-arm64': 0.142.0
+ '@oxc-parser/binding-darwin-x64': 0.142.0
+ '@oxc-parser/binding-freebsd-x64': 0.142.0
+ '@oxc-parser/binding-linux-arm-gnueabihf': 0.142.0
+ '@oxc-parser/binding-linux-arm-musleabihf': 0.142.0
+ '@oxc-parser/binding-linux-arm64-gnu': 0.142.0
+ '@oxc-parser/binding-linux-arm64-musl': 0.142.0
+ '@oxc-parser/binding-linux-ppc64-gnu': 0.142.0
+ '@oxc-parser/binding-linux-riscv64-gnu': 0.142.0
+ '@oxc-parser/binding-linux-riscv64-musl': 0.142.0
+ '@oxc-parser/binding-linux-s390x-gnu': 0.142.0
+ '@oxc-parser/binding-linux-x64-gnu': 0.142.0
+ '@oxc-parser/binding-linux-x64-musl': 0.142.0
+ '@oxc-parser/binding-openharmony-arm64': 0.142.0
+ '@oxc-parser/binding-wasm32-wasi': 0.142.0
+ '@oxc-parser/binding-win32-arm64-msvc': 0.142.0
+ '@oxc-parser/binding-win32-ia32-msvc': 0.142.0
+ '@oxc-parser/binding-win32-x64-msvc': 0.142.0
p-cancelable@2.1.1: {}
@@ -15084,7 +15263,7 @@ snapshots:
on-exit-leak-free: 2.1.2
pino-abstract-transport: 2.0.0
pino-std-serializers: 7.1.0
- process-warning: 5.0.0
+ process-warning: 5.1.0
quick-format-unescaped: 4.0.4
real-require: 0.2.0
safe-stable-stringify: 2.5.0
@@ -15107,7 +15286,7 @@ snapshots:
asn1js: 3.0.10
bytestreamjs: 2.0.1
pvtsutils: 1.3.6
- pvutils: 1.1.5
+ pvutils: 1.2.0
tslib: 2.8.1
pluralize@8.0.0: {}
@@ -15119,54 +15298,54 @@ snapshots:
possible-typed-array-names@1.1.0: {}
- postcss-loader@8.2.1(postcss@8.5.19)(typescript@6.0.3)(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)):
+ postcss-loader@8.2.1(postcss@8.5.25)(typescript@6.0.3)(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)):
dependencies:
cosmiconfig: 9.0.2(typescript@6.0.3)
jiti: 2.7.0
- postcss: 8.5.19
+ postcss: 8.5.25
semver: 7.8.5
optionalDependencies:
- webpack: 5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)
+ webpack: 5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)
transitivePeerDependencies:
- typescript
postcss-media-query-parser@0.2.3: {}
- postcss-modules-extract-imports@3.1.0(postcss@8.5.19):
+ postcss-modules-extract-imports@3.1.0(postcss@8.5.25):
dependencies:
- postcss: 8.5.19
+ postcss: 8.5.25
- postcss-modules-local-by-default@4.2.0(postcss@8.5.19):
+ postcss-modules-local-by-default@4.2.0(postcss@8.5.25):
dependencies:
- icss-utils: 5.1.0(postcss@8.5.19)
- postcss: 8.5.19
- postcss-selector-parser: 7.1.4
+ icss-utils: 5.1.0(postcss@8.5.25)
+ postcss: 8.5.25
+ postcss-selector-parser: 7.1.5
postcss-value-parser: 4.2.0
- postcss-modules-scope@3.2.1(postcss@8.5.19):
+ postcss-modules-scope@3.2.1(postcss@8.5.25):
dependencies:
- postcss: 8.5.19
- postcss-selector-parser: 7.1.4
+ postcss: 8.5.25
+ postcss-selector-parser: 7.1.5
- postcss-modules-values@4.0.0(postcss@8.5.19):
+ postcss-modules-values@4.0.0(postcss@8.5.25):
dependencies:
- icss-utils: 5.1.0(postcss@8.5.19)
- postcss: 8.5.19
+ icss-utils: 5.1.0(postcss@8.5.25)
+ postcss: 8.5.25
- postcss-safe-parser@7.0.1(postcss@8.5.19):
+ postcss-safe-parser@7.0.1(postcss@8.5.25):
dependencies:
- postcss: 8.5.19
+ postcss: 8.5.25
- postcss-selector-parser@7.1.4:
+ postcss-selector-parser@7.1.5:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
postcss-value-parser@4.2.0: {}
- postcss@8.5.19:
+ postcss@8.5.25:
dependencies:
- nanoid: 3.3.16
+ nanoid: 3.3.18
picocolors: 1.1.1
source-map-js: 1.2.1
@@ -15182,7 +15361,7 @@ snapshots:
process-warning@1.0.0: {}
- process-warning@5.0.0: {}
+ process-warning@5.1.0: {}
process@0.11.10: {}
@@ -15243,7 +15422,7 @@ snapshots:
devtools-protocol: 0.0.1638949
typed-query-selector: 2.12.2
webdriver-bidi-protocol: 0.4.2
- ws: 8.21.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)
transitivePeerDependencies:
- bufferutil
- proxy-agent
@@ -15268,7 +15447,7 @@ snapshots:
dependencies:
tslib: 2.8.1
- pvutils@1.1.5: {}
+ pvutils@1.2.0: {}
qjobs@1.2.0: {}
@@ -15321,7 +15500,7 @@ snapshots:
iconv-lite: 0.7.3
unpipe: 1.0.0
- re2js@0.4.3: {}
+ re2js@2.8.6: {}
readable-stream@2.3.8:
dependencies:
@@ -15359,7 +15538,7 @@ snapshots:
dependencies:
picomatch: 2.3.2
- readdirp@5.0.0: {}
+ readdirp@5.1.1: {}
real-require@0.2.0: {}
@@ -15423,7 +15602,7 @@ snapshots:
adjust-sourcemap-loader: 4.0.0
convert-source-map: 1.9.0
loader-utils: 2.0.4
- postcss: 8.5.19
+ postcss: 8.5.25
source-map: 0.6.1
resolve@1.22.12:
@@ -15442,9 +15621,9 @@ snapshots:
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
- resp-modifier@6.0.2(supports-color@10.2.2):
+ resp-modifier@6.0.2(supports-color@11.0.0):
dependencies:
- debug: 2.6.9(supports-color@10.2.2)
+ debug: 2.6.9(supports-color@11.0.0)
minimatch: 3.1.5
transitivePeerDependencies:
- supports-color
@@ -15458,10 +15637,10 @@ snapshots:
onetime: 7.0.0
signal-exit: 4.1.0
- retry-request@8.0.3(supports-color@10.2.2):
+ retry-request@8.0.4(supports-color@11.0.0):
dependencies:
extend: 3.0.2
- teeny-request: 10.1.3(supports-color@10.2.2)
+ teeny-request: 10.1.4(supports-color@11.0.0)
transitivePeerDependencies:
- supports-color
@@ -15577,9 +15756,9 @@ snapshots:
'@rollup/rollup-win32-x64-msvc': 4.62.2
fsevents: 2.3.3
- router@2.2.0(supports-color@10.2.2):
+ router@2.2.0(supports-color@11.0.0):
dependencies:
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
depd: 2.0.0
is-promise: 4.0.0
parseurl: 1.3.3
@@ -15630,10 +15809,10 @@ snapshots:
dependencies:
truncate-utf8-bytes: 1.0.2
- sass-loader@17.0.0(sass@1.101.0)(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)):
+ sass-loader@17.0.0(sass@1.101.0)(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)):
optionalDependencies:
sass: 1.101.0
- webpack: 5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)
+ webpack: 5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)
sass@1.101.0:
dependencies:
@@ -15643,7 +15822,7 @@ snapshots:
optionalDependencies:
'@parcel/watcher': 2.6.0
- sax@1.6.0:
+ sax@1.6.1:
optional: true
saxes@6.0.0:
@@ -15670,9 +15849,9 @@ snapshots:
semver@7.8.5: {}
- send@0.19.2(supports-color@10.2.2):
+ send@0.19.2(supports-color@11.0.0):
dependencies:
- debug: 2.6.9(supports-color@10.2.2)
+ debug: 2.6.9(supports-color@11.0.0)
depd: 2.0.0
destroy: 1.2.0
encodeurl: 2.0.0
@@ -15688,9 +15867,9 @@ snapshots:
transitivePeerDependencies:
- supports-color
- send@1.2.1(supports-color@10.2.2):
+ send@1.2.1(supports-color@11.0.0):
dependencies:
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
encodeurl: 2.0.0
escape-html: 1.0.3
etag: 1.8.1
@@ -15704,13 +15883,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
- serialize-javascript@7.0.7: {}
+ serialize-javascript@7.1.0: {}
- serve-index@1.9.2(supports-color@10.2.2):
+ serve-index@1.9.2(supports-color@11.0.0):
dependencies:
accepts: 1.3.8
batch: 0.6.1
- debug: 2.6.9(supports-color@10.2.2)
+ debug: 2.6.9(supports-color@11.0.0)
escape-html: 1.0.3
http-errors: 1.8.1
mime-types: 2.1.35
@@ -15718,21 +15897,21 @@ snapshots:
transitivePeerDependencies:
- supports-color
- serve-static@1.16.3(supports-color@10.2.2):
+ serve-static@1.16.3(supports-color@11.0.0):
dependencies:
encodeurl: 2.0.0
escape-html: 1.0.3
parseurl: 1.3.3
- send: 0.19.2(supports-color@10.2.2)
+ send: 0.19.2(supports-color@11.0.0)
transitivePeerDependencies:
- supports-color
- serve-static@2.2.1(supports-color@10.2.2):
+ serve-static@2.2.1(supports-color@11.0.0):
dependencies:
encodeurl: 2.0.0
escape-html: 1.0.3
parseurl: 1.3.3
- send: 1.2.1(supports-color@10.2.2)
+ send: 1.2.1(supports-color@11.0.0)
transitivePeerDependencies:
- supports-color
@@ -15820,42 +15999,42 @@ snapshots:
ansi-styles: 6.2.3
is-fullwidth-code-point: 5.1.0
- socket.io-adapter@2.5.8(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6):
+ socket.io-adapter@2.5.8(bufferutil@4.1.0)(supports-color@11.0.0)(utf-8-validate@6.0.6):
dependencies:
- debug: 4.4.3(supports-color@10.2.2)
- ws: 8.21.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ debug: 4.4.3(supports-color@11.0.0)
+ ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
- socket.io-client@4.8.3(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6):
+ socket.io-client@4.8.3(bufferutil@4.1.0)(supports-color@11.0.0)(utf-8-validate@6.0.6):
dependencies:
'@socket.io/component-emitter': 3.1.2
- debug: 4.4.3(supports-color@10.2.2)
- engine.io-client: 6.6.6(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)
- socket.io-parser: 4.2.7(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
+ engine.io-client: 6.6.6(bufferutil@4.1.0)(supports-color@11.0.0)(utf-8-validate@6.0.6)
+ socket.io-parser: 4.2.7(supports-color@11.0.0)
transitivePeerDependencies:
- bufferutil
- supports-color
- utf-8-validate
- socket.io-parser@4.2.7(supports-color@10.2.2):
+ socket.io-parser@4.2.7(supports-color@11.0.0):
dependencies:
'@socket.io/component-emitter': 3.1.2
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
transitivePeerDependencies:
- supports-color
- socket.io@4.8.3(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6):
+ socket.io@4.8.3(bufferutil@4.1.0)(supports-color@11.0.0)(utf-8-validate@6.0.6):
dependencies:
accepts: 1.3.8
base64id: 2.0.0
cors: 2.8.6
- debug: 4.4.3(supports-color@10.2.2)
- engine.io: 6.6.9(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)
- socket.io-adapter: 2.5.8(bufferutil@4.1.0)(supports-color@10.2.2)(utf-8-validate@6.0.6)
- socket.io-parser: 4.2.7(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
+ engine.io: 6.6.9(bufferutil@4.1.0)(supports-color@11.0.0)(utf-8-validate@6.0.6)
+ socket.io-adapter: 2.5.8(bufferutil@4.1.0)(supports-color@11.0.0)(utf-8-validate@6.0.6)
+ socket.io-parser: 4.2.7(supports-color@11.0.0)
transitivePeerDependencies:
- bufferutil
- supports-color
@@ -15877,11 +16056,11 @@ snapshots:
source-map-js@1.2.1: {}
- source-map-loader@5.0.0(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)):
+ source-map-loader@5.0.0(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)):
dependencies:
iconv-lite: 0.6.3
source-map-js: 1.2.1
- webpack: 5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)
+ webpack: 5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)
source-map-support@0.5.21:
dependencies:
@@ -15905,9 +16084,9 @@ snapshots:
spdx-license-ids@3.0.23: {}
- spdy-transport@3.0.0(supports-color@10.2.2):
+ spdy-transport@3.0.0(supports-color@11.0.0):
dependencies:
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
detect-node: 2.1.0
hpack.js: 2.1.6
obuf: 1.1.2
@@ -15916,13 +16095,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
- spdy@4.0.2(supports-color@10.2.2):
+ spdy@4.0.2(supports-color@11.0.0):
dependencies:
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
handle-thing: 2.0.1
http-deceiver: 1.2.7
select-hose: 2.0.0
- spdy-transport: 3.0.0(supports-color@10.2.2)
+ spdy-transport: 3.0.0(supports-color@11.0.0)
transitivePeerDependencies:
- supports-color
@@ -15987,10 +16166,10 @@ snapshots:
commander: 2.20.3
limiter: 1.1.5
- streamroller@3.1.5(supports-color@10.2.2):
+ streamroller@3.1.5(supports-color@11.0.0):
dependencies:
date-format: 4.0.14
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
fs-extra: 8.1.0
transitivePeerDependencies:
- supports-color
@@ -16075,7 +16254,7 @@ snapshots:
stubs@3.0.0: {}
- supports-color@10.2.2: {}
+ supports-color@11.0.0: {}
supports-color@7.2.0:
dependencies:
@@ -16103,7 +16282,7 @@ snapshots:
tar-stream@3.2.0:
dependencies:
b4a: 1.8.1
- bare-fs: 4.7.4
+ bare-fs: 4.8.0
fast-fifo: 1.3.2
streamx: 2.28.0
transitivePeerDependencies:
@@ -16111,10 +16290,10 @@ snapshots:
- bare-buffer
- react-native-b4a
- teeny-request@10.1.3(supports-color@10.2.2):
+ teeny-request@10.1.4(supports-color@11.0.0):
dependencies:
- http-proxy-agent: 7.0.2(supports-color@10.2.2)
- https-proxy-agent: 7.0.6(supports-color@10.2.2)
+ http-proxy-agent: 7.0.2(supports-color@11.0.0)
+ https-proxy-agent: 7.0.6(supports-color@11.0.0)
node-fetch: 3.3.2
stream-events: 1.0.5
transitivePeerDependencies:
@@ -16130,7 +16309,7 @@ snapshots:
terser@5.49.0:
dependencies:
'@jridgewell/source-map': 0.3.11
- acorn: 8.17.0
+ acorn: 8.18.0
commander: 2.20.3
source-map-support: 0.5.21
@@ -16140,7 +16319,7 @@ snapshots:
transitivePeerDependencies:
- react-native-b4a
- thingies@2.6.0(tslib@2.8.1):
+ thingies@2.6.1(tslib@2.8.1):
dependencies:
tslib: 2.8.1
@@ -16165,26 +16344,26 @@ snapshots:
tinybench@2.9.0: {}
- tinyexec@1.2.4: {}
+ tinyexec@1.3.0: {}
tinyglobby@0.2.17:
dependencies:
fdir: 6.5.0(picomatch@4.0.5)
picomatch: 4.0.5
- tinyrainbow@3.1.0: {}
+ tinyrainbow@3.1.1: {}
tldts-core@6.1.86: {}
- tldts-core@7.4.9: {}
+ tldts-core@7.4.10: {}
tldts@6.1.86:
dependencies:
tldts-core: 6.1.86
- tldts@7.4.9:
+ tldts@7.4.10:
dependencies:
- tldts-core: 7.4.9
+ tldts-core: 7.4.10
tmp@0.2.7: {}
@@ -16202,7 +16381,7 @@ snapshots:
tough-cookie@6.0.2:
dependencies:
- tldts: 7.4.9
+ tldts: 7.4.10
tr46@0.0.3: {}
@@ -16233,9 +16412,9 @@ snapshots:
tslib@2.8.1: {}
- tsx@4.23.1:
+ tsx@4.23.7:
dependencies:
- esbuild: 0.28.1
+ esbuild: 0.28.2
optionalDependencies:
fsevents: 2.3.3
@@ -16265,7 +16444,7 @@ snapshots:
type-is@2.1.0:
dependencies:
content-type: 2.0.0
- media-typer: 1.1.0
+ media-typer: 1.1.1
mime-types: 3.0.2
typed-array-buffer@1.0.3:
@@ -16327,9 +16506,9 @@ snapshots:
undici-types@7.18.2: {}
- undici@6.27.0: {}
+ undici@6.28.0: {}
- undici@7.28.0: {}
+ undici@7.29.0: {}
undici@8.7.0: {}
@@ -16372,9 +16551,9 @@ snapshots:
unpipe@1.0.0: {}
- update-browserslist-db@1.2.3(browserslist@4.28.7):
+ update-browserslist-db@1.3.0(browserslist@4.28.8):
dependencies:
- browserslist: 4.28.7
+ browserslist: 4.28.8
escalade: 3.2.0
picocolors: 1.1.1
@@ -16402,69 +16581,69 @@ snapshots:
vary@1.1.2: {}
- verdaccio-audit@13.0.3(encoding@0.1.13)(supports-color@10.2.2):
+ verdaccio-audit@13.0.3(encoding@0.1.13)(supports-color@11.0.0):
dependencies:
- '@verdaccio/config': 8.1.2(supports-color@10.2.2)
+ '@verdaccio/config': 8.1.2(supports-color@11.0.0)
'@verdaccio/core': 8.1.2
- express: 4.22.1(supports-color@10.2.2)
- https-proxy-agent: 5.0.1(supports-color@10.2.2)
+ express: 4.22.1(supports-color@11.0.0)
+ https-proxy-agent: 5.0.1(supports-color@11.0.0)
node-fetch: 2.6.7(encoding@0.1.13)
transitivePeerDependencies:
- encoding
- supports-color
- verdaccio-auth-memory@13.0.3(supports-color@10.2.2):
+ verdaccio-auth-memory@13.1.1(supports-color@11.0.0):
dependencies:
- '@verdaccio/core': 8.1.2
- debug: 4.4.3(supports-color@10.2.2)
+ '@verdaccio/core': 8.2.1
+ debug: 4.4.3(supports-color@11.0.0)
transitivePeerDependencies:
- supports-color
- verdaccio-htpasswd@13.0.3(supports-color@10.2.2):
+ verdaccio-htpasswd@13.0.3(supports-color@11.0.0):
dependencies:
'@verdaccio/core': 8.1.2
'@verdaccio/file-locking': 13.0.1
apache-md5: 1.1.8
bcryptjs: 2.4.3
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
http-errors: 2.0.1
unix-crypt-td-js: 1.1.4
transitivePeerDependencies:
- supports-color
- verdaccio@6.8.0(encoding@0.1.13)(supports-color@10.2.2):
+ verdaccio@6.8.0(encoding@0.1.13)(supports-color@11.0.0):
dependencies:
'@cypress/request': 3.0.10
- '@verdaccio/auth': 8.0.4(supports-color@10.2.2)
- '@verdaccio/config': 8.1.2(supports-color@10.2.2)
+ '@verdaccio/auth': 8.0.4(supports-color@11.0.0)
+ '@verdaccio/config': 8.1.2(supports-color@11.0.0)
'@verdaccio/core': 8.1.2
- '@verdaccio/hooks': 8.0.4(supports-color@10.2.2)
- '@verdaccio/loaders': 8.0.3(supports-color@10.2.2)
- '@verdaccio/local-storage-legacy': 11.3.4(supports-color@10.2.2)
- '@verdaccio/logger': 8.0.3(supports-color@10.2.2)
- '@verdaccio/middleware': 8.0.5(supports-color@10.2.2)
- '@verdaccio/package-filter': 13.0.3(supports-color@10.2.2)
- '@verdaccio/search-indexer': 8.0.2(supports-color@10.2.2)
- '@verdaccio/signature': 8.0.3(supports-color@10.2.2)
+ '@verdaccio/hooks': 8.0.4(supports-color@11.0.0)
+ '@verdaccio/loaders': 8.0.3(supports-color@11.0.0)
+ '@verdaccio/local-storage-legacy': 11.3.4(supports-color@11.0.0)
+ '@verdaccio/logger': 8.0.3(supports-color@11.0.0)
+ '@verdaccio/middleware': 8.0.5(supports-color@11.0.0)
+ '@verdaccio/package-filter': 13.0.3(supports-color@11.0.0)
+ '@verdaccio/search-indexer': 8.0.2(supports-color@11.0.0)
+ '@verdaccio/signature': 8.0.3(supports-color@11.0.0)
'@verdaccio/streams': 10.2.5
- '@verdaccio/tarball': 13.0.3(supports-color@10.2.2)
- '@verdaccio/ui-theme': 9.0.0-next-9.21(supports-color@10.2.2)
- '@verdaccio/url': 13.0.3(supports-color@10.2.2)
+ '@verdaccio/tarball': 13.0.3(supports-color@11.0.0)
+ '@verdaccio/ui-theme': 9.0.0-next-9.21(supports-color@11.0.0)
+ '@verdaccio/url': 13.0.3(supports-color@11.0.0)
'@verdaccio/utils': 8.1.3
JSONStream: 1.3.5
async: 3.2.6
clipanion: 4.0.0-rc.4
- compression: 1.8.1(supports-color@10.2.2)
+ compression: 1.8.1(supports-color@11.0.0)
cors: 2.8.6
- debug: 4.4.3(supports-color@10.2.2)
+ debug: 4.4.3(supports-color@11.0.0)
envinfo: 7.21.0
- express: 4.22.2(supports-color@10.2.2)
+ express: 4.22.2(supports-color@11.0.0)
lodash: 4.18.1
lru-cache: 7.18.3
mime: 3.0.0
semver: 7.8.5
- verdaccio-audit: 13.0.3(encoding@0.1.13)(supports-color@10.2.2)
- verdaccio-htpasswd: 13.0.3(supports-color@10.2.2)
+ verdaccio-audit: 13.0.3(encoding@0.1.13)(supports-color@11.0.0)
+ verdaccio-htpasswd: 13.0.3(supports-color@11.0.0)
transitivePeerDependencies:
- bare-abort-controller
- encoding
@@ -16477,28 +16656,28 @@ snapshots:
core-util-is: 1.0.2
extsprintf: 1.3.0
- vite@8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0):
+ vite@8.1.5(@types/node@22.20.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.7)(yaml@2.9.0):
dependencies:
lightningcss: 1.33.0
picomatch: 4.0.5
- postcss: 8.5.19
+ postcss: 8.5.25
rolldown: 1.1.5
tinyglobby: 0.2.17
optionalDependencies:
- '@types/node': 24.13.3
- esbuild: 0.28.1
+ '@types/node': 22.20.1
+ esbuild: 0.28.2
fsevents: 2.3.3
jiti: 2.7.0
less: 4.6.7
sass: 1.101.0
terser: 5.49.0
- tsx: 4.23.1
+ tsx: 4.23.7
yaml: 2.9.0
- vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@24.13.3)(@vitest/coverage-v8@4.1.10)(esbuild@0.28.1)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0):
+ vitest@4.1.10(@opentelemetry/api@1.9.1)(@types/node@22.20.1)(@vitest/coverage-v8@4.1.10)(esbuild@0.28.2)(jiti@2.7.0)(jsdom@29.1.1)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.7)(yaml@2.9.0):
dependencies:
'@vitest/expect': 4.1.10
- '@vitest/mocker': 4.1.10(vite@8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0))
+ '@vitest/mocker': 4.1.10(vite@8.1.5(@types/node@22.20.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.7)(yaml@2.9.0))
'@vitest/pretty-format': 4.1.10
'@vitest/runner': 4.1.10
'@vitest/snapshot': 4.1.10
@@ -16512,14 +16691,14 @@ snapshots:
picomatch: 4.0.5
std-env: 4.2.0
tinybench: 2.9.0
- tinyexec: 1.2.4
+ tinyexec: 1.3.0
tinyglobby: 0.2.17
- tinyrainbow: 3.1.0
- vite: 8.1.5(@types/node@24.13.3)(esbuild@0.28.1)(jiti@2.7.0)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.1)(yaml@2.9.0)
+ tinyrainbow: 3.1.1
+ vite: 8.1.5(@types/node@22.20.1)(esbuild@0.28.2)(jiti@2.7.0)(less@4.6.7)(sass@1.101.0)(terser@5.49.0)(tsx@4.23.7)(yaml@2.9.0)
why-is-node-running: 2.3.0
optionalDependencies:
'@opentelemetry/api': 1.9.1
- '@types/node': 24.13.3
+ '@types/node': 22.20.1
'@vitest/coverage-v8': 4.1.10(vitest@4.1.10)
jsdom: 29.1.1
transitivePeerDependencies:
@@ -16563,32 +16742,28 @@ snapshots:
webidl-conversions@8.0.1: {}
- webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)):
+ webpack-dev-middleware@7.4.5(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)):
dependencies:
colorette: 2.0.20
- memfs: 4.64.0(tslib@2.8.1)
+ memfs: 4.68.0
mime-types: 3.0.2
on-finished: 2.4.1
range-parser: 1.3.0
schema-utils: 4.3.3
optionalDependencies:
- webpack: 5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)
- transitivePeerDependencies:
- - tslib
+ webpack: 5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)
- webpack-dev-middleware@8.0.3(tslib@2.8.1)(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)):
+ webpack-dev-middleware@8.0.3(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)):
dependencies:
- memfs: 4.64.0(tslib@2.8.1)
+ memfs: 4.68.0
mime-types: 3.0.2
on-finished: 2.4.1
range-parser: 1.3.0
schema-utils: 4.3.3
optionalDependencies:
- webpack: 5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)
- transitivePeerDependencies:
- - tslib
+ webpack: 5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)
- webpack-dev-server@5.2.6(bufferutil@4.1.0)(debug@4.4.3(supports-color@10.2.2))(supports-color@10.2.2)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)):
+ webpack-dev-server@5.2.6(bufferutil@4.1.0)(debug@4.4.3(supports-color@11.0.0))(supports-color@11.0.0)(utf-8-validate@6.0.6)(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)):
dependencies:
'@types/bonjour': 3.5.13
'@types/connect-history-api-fallback': 1.5.4
@@ -16599,32 +16774,31 @@ snapshots:
'@types/sockjs': 0.3.36
'@types/ws': 8.18.1
ansi-html-community: 0.0.8
- bonjour-service: 1.4.3
+ bonjour-service: 1.4.4
chokidar: 3.6.0
colorette: 2.0.20
- compression: 1.8.1(supports-color@10.2.2)
+ compression: 1.8.1(supports-color@11.0.0)
connect-history-api-fallback: 2.0.0
- express: 4.22.2(supports-color@10.2.2)
+ express: 4.22.2(supports-color@11.0.0)
graceful-fs: 4.2.11
- http-proxy-middleware: 2.0.10(@types/express@4.17.25)(debug@4.4.3(supports-color@10.2.2))
- ipaddr.js: 2.4.0
+ http-proxy-middleware: 2.0.10(@types/express@4.17.25)(debug@4.4.3(supports-color@11.0.0))
+ ipaddr.js: 2.5.0
launch-editor: 2.14.1
open: 10.2.0
p-retry: 6.2.1
schema-utils: 4.3.3
selfsigned: 5.5.0
- serve-index: 1.9.2(supports-color@10.2.2)
+ serve-index: 1.9.2(supports-color@11.0.0)
sockjs: 0.3.24
- spdy: 4.0.2(supports-color@10.2.2)
- webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3))
- ws: 8.21.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ spdy: 4.0.2(supports-color@11.0.0)
+ webpack-dev-middleware: 7.4.5(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))
+ ws: 8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6)
optionalDependencies:
- webpack: 5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)
+ webpack: 5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)
transitivePeerDependencies:
- bufferutil
- debug
- supports-color
- - tslib
- utf-8-validate
webpack-merge@6.0.1:
@@ -16635,30 +16809,28 @@ snapshots:
webpack-sources@3.5.1: {}
- webpack-subresource-integrity@5.1.0(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)):
+ webpack-subresource-integrity@5.1.0(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)):
dependencies:
typed-assert: 1.0.9
- webpack: 5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)
+ webpack: 5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)
- webpack@5.108.4(esbuild@0.28.1):
+ webpack@5.109.2(esbuild@0.28.2):
dependencies:
'@types/estree': 1.0.9
'@types/json-schema': 7.0.15
'@webassemblyjs/ast': 1.14.1
'@webassemblyjs/wasm-edit': 1.14.1
'@webassemblyjs/wasm-parser': 1.14.1
- acorn: 8.17.0
- acorn-import-phases: 1.0.4(acorn@8.17.0)
- browserslist: 4.28.7
+ acorn: 8.18.0
+ browserslist: 4.28.8
chrome-trace-event: 1.0.4
- enhanced-resolve: 5.24.3
+ enhanced-resolve: 5.24.5
es-module-lexer: 2.3.1
eslint-scope: 5.1.1
events: 3.3.0
graceful-fs: 4.2.11
- loader-runner: 4.3.2
mime-db: 1.54.0
- minimizer-webpack-plugin: 5.6.1(esbuild@0.28.1)(webpack@5.108.4(esbuild@0.28.1))
+ minimizer-webpack-plugin: 5.6.1(esbuild@0.28.2)(webpack@5.109.2(esbuild@0.28.2))
neo-async: 2.6.2
schema-utils: 4.3.3
tapable: 2.3.3
@@ -16678,25 +16850,23 @@ snapshots:
- postcss
- uglify-js
- webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3):
+ webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3):
dependencies:
'@types/estree': 1.0.9
'@types/json-schema': 7.0.15
'@webassemblyjs/ast': 1.14.1
'@webassemblyjs/wasm-edit': 1.14.1
'@webassemblyjs/wasm-parser': 1.14.1
- acorn: 8.17.0
- acorn-import-phases: 1.0.4(acorn@8.17.0)
- browserslist: 4.28.7
+ acorn: 8.18.0
+ browserslist: 4.28.8
chrome-trace-event: 1.0.4
- enhanced-resolve: 5.24.3
+ enhanced-resolve: 5.24.5
es-module-lexer: 2.3.1
eslint-scope: 5.1.1
events: 3.3.0
graceful-fs: 4.2.11
- loader-runner: 4.3.2
mime-db: 1.54.0
- minimizer-webpack-plugin: 5.6.1(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3)(webpack@5.108.4(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.19)(uglify-js@3.19.3))
+ minimizer-webpack-plugin: 5.6.1(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)(webpack@5.109.2(esbuild@0.28.2)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))
neo-async: 2.6.2
schema-utils: 4.3.3
tapable: 2.3.3
@@ -16829,7 +16999,7 @@ snapshots:
wrappy@1.0.2: {}
- ws@8.21.1(bufferutil@4.1.0)(utf-8-validate@6.0.6):
+ ws@8.21.3(bufferutil@4.1.0)(utf-8-validate@6.0.6):
optionalDependencies:
bufferutil: 4.1.0
utf-8-validate: 6.0.6
@@ -16894,9 +17064,18 @@ snapshots:
y18n: 5.0.8
yargs-parser: 22.0.0
+ yargs@18.1.0:
+ dependencies:
+ cliui: 9.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ string-width: 8.2.2
+ y18n: 5.0.8
+ yargs-parser: 22.0.0
+
yocto-queue@0.1.0: {}
- yoctocolors@2.1.2: {}
+ yoctocolors@2.2.0: {}
zod-to-json-schema@3.25.2(zod@4.4.3):
dependencies:
diff --git a/renovate.json b/renovate.json
index 0299498febd8..0b21b680f015 100644
--- a/renovate.json
+++ b/renovate.json
@@ -4,6 +4,10 @@
"extends": ["github>angular/dev-infra//renovate-presets/default.json5"],
"ignorePaths": ["tests/e2e/assets/**", "tests/schematics/update/packages/**"],
"packageRules": [
+ {
+ "matchFileNames": ["tests/e2e/ng-snapshot/package.json"],
+ "schedule": ["before 8am"]
+ },
{
"enabled": false,
"matchFileNames": ["tests/e2e/ng-snapshot/package.json"],
@@ -16,6 +20,7 @@
"packages/schematics/angular/utility/latest-versions/package.json"
],
"matchPackageNames": ["*"],
+ "matchUpdateTypes": ["minor", "patch"],
"groupName": "schematics dependencies",
"lockFileMaintenance": {
"enabled": false
diff --git a/scripts/saucelabs/start-tunnel.sh b/scripts/saucelabs/start-tunnel.sh
deleted file mode 100755
index badf130e6eea..000000000000
--- a/scripts/saucelabs/start-tunnel.sh
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env bash
-
-set -x -u -e -o pipefail
-
-readonly currentDir=$(cd $(dirname $0); pwd)
-readonly connectVersion="sc-4.9.2-linux"
-readonly connectHash="2f8a3f87e1da4dc9a41bc45ec7c3a2ecdba4c72d72b7d0193f04ad66c5809104"
-
-echo "Downloading Sauce Connect"
-
-curl https://saucelabs.com/downloads/${connectVersion}.tar.gz -o ${currentDir}/${connectVersion}.tar.gz
-echo "${connectHash} ${currentDir}/${connectVersion}.tar.gz" | shasum -a 256 -c
-tar -xzf ${currentDir}/${connectVersion}.tar.gz -C ${currentDir}
-
-# Command arguments that will be passed to sauce-connect. By default we disable SSL bumping for
-# all requests. This is because SSL bumping is not needed for our test setup and in order
-# to perform the SSL bumping, Saucelabs intercepts all HTTP requests in the tunnel VM and modifies
-# them. This can cause flakiness as it makes all requests dependent on the SSL bumping middleware.
-# See: https://wiki.saucelabs.com/display/DOCS/Troubleshooting+Sauce+Connect#TroubleshootingSauceConnect-DisablingSSLBumping
-sauceArgs="--no-ssl-bump-domains all"
-
-if [[ ! -z "${SAUCE_LOG_FILE:-}" ]]; then
- mkdir -p $(dirname ${SAUCE_LOG_FILE})
- sauceArgs="${sauceArgs} --logfile ${SAUCE_LOG_FILE}"
-fi
-
-if [[ ! -z "${SAUCE_READY_FILE:-}" ]]; then
- mkdir -p $(dirname ${SAUCE_READY_FILE})
- sauceArgs="${sauceArgs} --readyfile ${SAUCE_READY_FILE}"
-fi
-
-if [[ ! -z "${SAUCE_PID_FILE:-}" ]]; then
- mkdir -p $(dirname ${SAUCE_PID_FILE})
- sauceArgs="${sauceArgs} --pidfile ${SAUCE_PID_FILE}"
-fi
-
-
-echo "Starting Sauce Connect. Passed arguments: ${sauceArgs}"
-
-${currentDir}/${connectVersion}/bin/sc -u ${SAUCE_USERNAME} -k ${SAUCE_ACCESS_KEY} ${sauceArgs}
diff --git a/scripts/saucelabs/stop-tunnel.sh b/scripts/saucelabs/stop-tunnel.sh
deleted file mode 100755
index 4ea8d13c7e12..000000000000
--- a/scripts/saucelabs/stop-tunnel.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/usr/bin/env bash
-
-# Disable printing of any executed command because this would cause a lot
-# of spam due to the loop.
-set +x -u -e -o pipefail
-
-if [[ ! -f ${SAUCE_PID_FILE} ]]; then
- echo "Could not find Saucelabs tunnel PID file. Cannot stop tunnel.."
- exit 1
-fi
-
-echo "Shutting down Sauce Connect tunnel"
-
-# The process id for the sauce-connect instance is stored inside of the pidfile.
-tunnelProcessId=$(cat ${SAUCE_PID_FILE})
-
-# Kill the process by using the PID that has been read from the pidfile. Note that
-# we cannot use killall because CI base container images don't have it installed.
-kill ${tunnelProcessId}
-
-while (ps -p ${tunnelProcessId} &> /dev/null); do
- printf "."
- sleep .5
-done
-
-echo ""
-echo "Sauce Connect tunnel has been shut down"
diff --git a/scripts/saucelabs/wait-for-tunnel.sh b/scripts/saucelabs/wait-for-tunnel.sh
deleted file mode 100755
index feda9a85b694..000000000000
--- a/scripts/saucelabs/wait-for-tunnel.sh
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env bash
-
-# Disable printing of any executed command because this would cause a lot
-# of spam due to the loop.
-set +x -u -e -o pipefail
-
-# Waits for Saucelabs Connect to be ready before executing any tests.
-counter=0
-
-while [[ ! -f ${SAUCE_READY_FILE} ]]; do
- counter=$((counter + 1))
-
- # Counter needs to be multiplied by two because the while loop only sleeps a half second.
- # This has been made in favor of better progress logging (printing dots every half second)
- if [ $counter -gt $[${SAUCE_READY_FILE_TIMEOUT} * 2] ]; then
- echo "Timed out after ${SAUCE_READY_FILE_TIMEOUT} seconds waiting for tunnel ready file."
- echo "Printing logfile output:"
- echo ""
- cat ${SAUCE_LOG_FILE}
- exit 5
- fi
-
- printf "."
- sleep 0.5
-done
-
-echo ""
-echo "Connected to Saucelabs"
diff --git a/tests/e2e/assets/protractor-saucelabs.conf.js b/tests/e2e/assets/protractor-saucelabs.conf.js
index fb9ab42798a8..cb21d8a3be15 100644
--- a/tests/e2e/assets/protractor-saucelabs.conf.js
+++ b/tests/e2e/assets/protractor-saucelabs.conf.js
@@ -5,7 +5,50 @@
const { SpecReporter, StacktraceOption } = require('jasmine-spec-reporter');
-const tunnelIdentifier = process.env['SAUCE_TUNNEL_IDENTIFIER'];
+const tunnelName = process.env['SAUCE_TUNNEL_IDENTIFIER'];
+
+const capabilities = [
+ {
+ browserName: 'chrome',
+ version: '132',
+ platform: 'Windows 11',
+ },
+ {
+ browserName: 'chrome',
+ version: '131',
+ platform: 'Windows 11',
+ },
+ {
+ browserName: 'firefox',
+ version: '134',
+ platform: 'Windows 11',
+ },
+ {
+ browserName: 'firefox',
+ version: '128', // Latest Firefox ESR version as of Jan 2025
+ platform: 'Windows 11',
+ },
+ {
+ browserName: 'safari',
+ platform: 'macOS 13',
+ version: '17',
+ },
+ {
+ browserName: 'safari',
+ platform: 'macOS 12',
+ version: '16',
+ },
+ {
+ browserName: 'MicrosoftEdge',
+ platform: 'Windows 11',
+ version: '132',
+ },
+ {
+ browserName: 'MicrosoftEdge',
+ platform: 'Windows 11',
+ version: '131',
+ },
+];
/**
* @type { import("protractor").Config }
@@ -13,61 +56,16 @@ const tunnelIdentifier = process.env['SAUCE_TUNNEL_IDENTIFIER'];
exports.config = {
sauceUser: process.env['SAUCE_USERNAME'],
sauceKey: process.env['SAUCE_ACCESS_KEY'],
+ sauceRegion: 'us',
allScriptsTimeout: 11000,
specs: ['./src/**/*.e2e-spec.ts'],
// NOTE: https://saucelabs.com/products/platform-configurator can be used to determine configuration values
- multiCapabilities: [
- {
- browserName: 'chrome',
- version: '132',
- platform: 'Windows 11',
- tunnelIdentifier,
- },
- {
- browserName: 'chrome',
- version: '131',
- platform: 'Windows 11',
- tunnelIdentifier,
- },
- {
- browserName: 'firefox',
- version: '134',
- platform: 'Windows 11',
- tunnelIdentifier,
- },
- {
- browserName: 'firefox',
- version: '128', // Latest Firefox ESR version as of Jan 2025
- platform: 'Windows 11',
- tunnelIdentifier,
- },
- {
- browserName: 'safari',
- platform: 'macOS 13',
- version: '17',
- tunnelIdentifier,
- },
- {
- browserName: 'safari',
- platform: 'macOS 12',
- version: '16',
- tunnelIdentifier,
- },
- {
- browserName: 'MicrosoftEdge',
- platform: 'Windows 11',
- version: '132',
- tunnelIdentifier,
- },
- {
- browserName: 'MicrosoftEdge',
- platform: 'Windows 11',
- version: '131',
- tunnelIdentifier,
- },
- ],
+ multiCapabilities: capabilities.map((caps) => ({
+ ...caps,
+ tunnelName,
+ })),
// Only allow one session at a time to prevent over saturation of Saucelabs sessions.
maxSessions: 1,
diff --git a/tests/e2e/tests/build/incremental-watch.ts b/tests/e2e/tests/build/incremental-watch.ts
index b2d1662469bb..344d2fb9e916 100644
--- a/tests/e2e/tests/build/incremental-watch.ts
+++ b/tests/e2e/tests/build/incremental-watch.ts
@@ -7,6 +7,32 @@ import { execAndWaitForOutputToMatch, waitForAnyProcessOutputToMatch } from '../
const buildReadyRegEx = /Application bundle generation complete\./;
+async function getOutputFiles(
+ dir: string,
+ predicate: (files: string[]) => boolean,
+ timeout = 10_000,
+): Promise {
+ const start = Date.now();
+ while (Date.now() - start < timeout) {
+ try {
+ const files = await readdir(dir);
+ if (predicate(files)) {
+ return files;
+ }
+ } catch (err: any) {
+ if (err?.code !== 'ENOENT') {
+ throw err;
+ }
+ }
+ await setTimeout(50);
+ }
+
+ const files = await readdir(dir);
+ assert(predicate(files), `Condition not met for files in ${dir}: ${JSON.stringify(files)}`);
+
+ return files;
+}
+
export default async function () {
const usingApplicationBuilder = getGlobalVariable('argv')['esbuild'];
assert(
@@ -20,15 +46,17 @@ export default async function () {
['build', '--watch', '--configuration=development'],
buildReadyRegEx,
);
- await setTimeout(500);
- const initialOutputFiles = await readdir('dist/test-project/browser');
+ const initialOutputFiles = await getOutputFiles(
+ 'dist/test-project/browser',
+ (files) => files.length > 0,
+ );
const originalMain = await readFile('src/main.ts');
// Add a dynamic import to create an additional output chunk
await Promise.all([
waitForAnyProcessOutputToMatch(buildReadyRegEx),
- await writeFile(
+ writeFile(
'src/a.ts',
`
export function sayHi() {
@@ -38,8 +66,10 @@ export default async function () {
),
appendToFile('src/main.ts', `\nimport('./a').then((m) => m.sayHi());`),
]);
- await setTimeout(500);
- const intermediateOutputFiles = await readdir('dist/test-project/browser');
+ const intermediateOutputFiles = await getOutputFiles(
+ 'dist/test-project/browser',
+ (files) => files.length > initialOutputFiles.length,
+ );
assert(
initialOutputFiles.length < intermediateOutputFiles.length,
'Additional chunks should be present',
@@ -50,8 +80,10 @@ export default async function () {
waitForAnyProcessOutputToMatch(buildReadyRegEx),
writeFile('src/main.ts', originalMain),
]);
- await setTimeout(500);
- const finalOutputFiles = await readdir('dist/test-project/browser');
+ const finalOutputFiles = await getOutputFiles(
+ 'dist/test-project/browser',
+ (files) => files.length === initialOutputFiles.length,
+ );
assert.equal(
initialOutputFiles.length,
finalOutputFiles.length,
diff --git a/tests/e2e/tests/commands/add/add-tailwindcss.ts b/tests/e2e/tests/commands/add/add-tailwindcss.ts
index 54fd617a4e1e..fa42815d2fdf 100644
--- a/tests/e2e/tests/commands/add/add-tailwindcss.ts
+++ b/tests/e2e/tests/commands/add/add-tailwindcss.ts
@@ -1,4 +1,5 @@
-import { expectFileToExist, expectFileToMatch, rimraf } from '../../../utils/fs';
+import assert from 'node:assert';
+import { expectFileToExist, expectFileToMatch, readFile, rimraf } from '../../../utils/fs';
import { getActivePackageManager, uninstallPackage } from '../../../utils/packages';
import { ng } from '../../../utils/process';
@@ -14,9 +15,19 @@ export default async function () {
await ng('add', 'tailwindcss', '--skip-confirmation');
await expectFileToExist('.postcssrc.json');
await expectFileToMatch('src/styles.css', /@import 'tailwindcss';/);
- await expectFileToMatch('package.json', /"tailwindcss":/);
- await expectFileToMatch('package.json', /"@tailwindcss\/postcss":/);
- await expectFileToMatch('package.json', /"postcss":/);
+
+ const { dependencies, devDependencies } = JSON.parse(await readFile('package.json'));
+ assert.strictEqual(
+ dependencies?.tailwindcss,
+ undefined,
+ 'tailwindcss should not be added to dependencies.',
+ );
+ assert.ok(devDependencies?.tailwindcss, 'tailwindcss should be added to devDependencies.');
+ assert.ok(
+ devDependencies?.['@tailwindcss/postcss'],
+ '@tailwindcss/postcss should be added to devDependencies.',
+ );
+ assert.ok(devDependencies?.postcss, 'postcss should be added to devDependencies.');
// Ensure the project builds
await ng('build', '--configuration=development');
diff --git a/tests/e2e/tests/commands/add/add-vitest-browser.ts b/tests/e2e/tests/commands/add/add-vitest-browser.ts
index 4e7aaf1a4044..7a2b780c0d8f 100644
--- a/tests/e2e/tests/commands/add/add-vitest-browser.ts
+++ b/tests/e2e/tests/commands/add/add-vitest-browser.ts
@@ -1,4 +1,5 @@
-import { expectFileToMatch } from '../../../utils/fs';
+import assert from 'node:assert';
+import { expectFileToMatch, readFile } from '../../../utils/fs';
import { uninstallPackage } from '../../../utils/packages';
import { ng } from '../../../utils/process';
import { applyVitestBuilder } from '../../../utils/vitest';
@@ -9,8 +10,18 @@ export default async function () {
try {
await ng('add', '@vitest/browser-playwright', '--skip-confirmation');
- await expectFileToMatch('package.json', /"@vitest\/browser-playwright":/);
- await expectFileToMatch('package.json', /"playwright":/);
+ const { dependencies, devDependencies } = JSON.parse(await readFile('package.json'));
+ assert.strictEqual(
+ dependencies?.['@vitest/browser-playwright'],
+ undefined,
+ '@vitest/browser-playwright should not be added to dependencies.',
+ );
+ assert.ok(
+ devDependencies?.['@vitest/browser-playwright'],
+ '@vitest/browser-playwright should be added to devDependencies.',
+ );
+ assert.ok(devDependencies?.playwright, 'playwright should be added to devDependencies.');
+
await expectFileToMatch('tsconfig.spec.json', /"vitest\/globals"/);
await expectFileToMatch('tsconfig.spec.json', /"@vitest\/browser-playwright"/);
} finally {
diff --git a/tests/e2e/tests/test/test-scripts.ts b/tests/e2e/tests/test/test-scripts.ts
index 1537cdddf349..953ed52cfbd7 100644
--- a/tests/e2e/tests/test/test-scripts.ts
+++ b/tests/e2e/tests/test/test-scripts.ts
@@ -5,10 +5,6 @@ import { updateJsonFile } from '../../utils/project';
import { expectToFail } from '../../utils/utils';
export default async function () {
- // TODO(architect): Delete this test. It is now in devkit/build-angular.
-
- await ng('test', '--watch=false');
-
// prepare global scripts test files
await writeMultipleFiles({
'src/string-script.js': `globalThis.stringScriptGlobal = 'string-scripts.js';`,
diff --git a/tests/e2e/tests/vite/reuse-dep-optimization-cache.ts b/tests/e2e/tests/vite/reuse-dep-optimization-cache.ts
index 56ecdfee8cd0..07be3f2a911b 100644
--- a/tests/e2e/tests/vite/reuse-dep-optimization-cache.ts
+++ b/tests/e2e/tests/vite/reuse-dep-optimization-cache.ts
@@ -1,29 +1,20 @@
import assert from 'node:assert';
import { findFreePort } from '../../utils/network';
-import {
- execAndWaitForOutputToMatch,
- killAllProcesses,
- ng,
- waitForAnyProcessOutputToMatch,
-} from '../../utils/process';
+import { execAndWaitForOutputToMatch, killAllProcesses, ng } from '../../utils/process';
export default async function () {
await ng('cache', 'clean');
await ng('cache', 'on');
const port = await findFreePort();
- const serveReady = execAndWaitForOutputToMatch(
+ await execAndWaitForOutputToMatch(
'ng',
['serve', '--port', `${port}`],
- /Application bundle generation complete/,
+ /dependencies optimized/,
// Use CI:0 to force caching
{ ...process.env, DEBUG: 'vite:deps', CI: '0', NO_COLOR: 'true' },
);
- // Note: Don't await `serveReady` before, as otherwise we might not see
- // the dependencies optimized output. There is some debouncing for `ng serve`
- // going on that could cause this.
- await Promise.all([serveReady, waitForAnyProcessOutputToMatch(/dependencies optimized/, 10_000)]);
const response = await fetch(`http://localhost:${port}/main.js`);
assert(response.ok, `Expected 'response.ok' to be 'true'.`);
diff --git a/tests/e2e/tests/vitest/larger-project.ts b/tests/e2e/tests/vitest/larger-project.ts
index 90bb283f2d8a..7b8db953c30c 100644
--- a/tests/e2e/tests/vitest/larger-project.ts
+++ b/tests/e2e/tests/vitest/larger-project.ts
@@ -1,7 +1,9 @@
-import { ng } from '../../utils/process';
-import { applyVitestBuilder } from '../../utils/vitest';
import assert from 'node:assert';
+import { mkdir, writeFile } from 'node:fs/promises';
+import { dirname } from 'node:path';
import { installPackage } from '../../utils/packages';
+import { ng } from '../../utils/process';
+import { applyVitestBuilder } from '../../utils/vitest';
export default async function () {
await applyVitestBuilder();
@@ -39,31 +41,110 @@ export default async function () {
}
async function generateArtifactsInBatches(artifactCount: number): Promise {
- const BATCH_SIZE = 5;
- let commands: Promise[] = [];
+ const files: { [path: string]: string } = {};
for (let i = 0; i < artifactCount; i++) {
const type = i % 3;
const name = `test-artifact-${i}`;
- let generateType: string;
switch (type) {
case 0:
- generateType = 'component';
+ files[`src/app/${name}/${name}.ts`] = `
+import { Component } from '@angular/core';
+
+@Component({
+ selector: 'app-${name}',
+ template: '',
+})
+export class TestArtifact${i}Component {}
+`;
+ files[`src/app/${name}/${name}.spec.ts`] = `
+import { ComponentFixture, TestBed } from '@angular/core/testing';
+import { TestArtifact${i}Component } from './${name}';
+
+describe('TestArtifact${i}Component', () => {
+ let component: TestArtifact${i}Component;
+ let fixture: ComponentFixture;
+
+ beforeEach(async () => {
+ await TestBed.configureTestingModule({
+ imports: [TestArtifact${i}Component],
+ }).compileComponents();
+
+ fixture = TestBed.createComponent(TestArtifact${i}Component);
+ component = fixture.componentInstance;
+ fixture.detectChanges();
+ });
+
+ it('should create', () => {
+ expect(component).toBeTruthy();
+ });
+});
+`;
break;
case 1:
- generateType = 'service';
+ files[`src/app/${name}.ts`] = `
+import { Injectable } from '@angular/core';
+
+@Injectable({
+ providedIn: 'root',
+})
+export class TestArtifact${i}Service {}
+`;
+ files[`src/app/${name}.spec.ts`] = `
+import { TestBed } from '@angular/core/testing';
+import { TestArtifact${i}Service } from './${name}';
+
+describe('TestArtifact${i}Service', () => {
+ let service: TestArtifact${i}Service;
+
+ beforeEach(() => {
+ TestBed.configureTestingModule({});
+ service = TestBed.inject(TestArtifact${i}Service);
+ });
+
+ it('should be created', () => {
+ expect(service).toBeTruthy();
+ });
+});
+`;
break;
default:
- generateType = 'pipe';
- break;
- }
+ files[`src/app/${name}-pipe.ts`] = `
+import { Pipe, PipeTransform } from '@angular/core';
- commands.push(ng('generate', generateType, name, '--skip-tests=false'));
+@Pipe({
+ name: 'testArtifact${i}',
+})
+export class TestArtifact${i}Pipe implements PipeTransform {
+ transform(value: unknown): unknown {
+ return null;
+ }
+}
+`;
+ files[`src/app/${name}-pipe.spec.ts`] = `
+import { TestArtifact${i}Pipe } from './${name}-pipe';
- if (commands.length === BATCH_SIZE || i === artifactCount - 1) {
- await Promise.all(commands);
- commands = [];
+describe('TestArtifact${i}Pipe', () => {
+ it('create an instance', () => {
+ const pipe = new TestArtifact${i}Pipe();
+ expect(pipe).toBeTruthy();
+ });
+});
+`;
+ break;
}
}
+
+ const entries = Object.entries(files);
+ const CONCURRENCY_LIMIT = 100;
+ for (let i = 0; i < entries.length; i += CONCURRENCY_LIMIT) {
+ const chunk = entries.slice(i, i + CONCURRENCY_LIMIT);
+ await Promise.all(
+ chunk.map(async ([filePath, content]) => {
+ await mkdir(dirname(filePath), { recursive: true });
+ await writeFile(filePath, content.trim());
+ }),
+ );
+ }
}
diff --git a/tests/e2e/utils/puppeteer.ts b/tests/e2e/utils/puppeteer.ts
index d33411938639..ae8aae45761a 100644
--- a/tests/e2e/utils/puppeteer.ts
+++ b/tests/e2e/utils/puppeteer.ts
@@ -40,7 +40,7 @@ export async function executeBrowserTest(options: BrowserTestOptions = {}) {
const browser = await launch({
executablePath: process.env['CHROME_BIN'],
headless: true,
- args: ['--no-sandbox'],
+ args: ['--no-sandbox', '--disable-dev-shm-usage', '--disable-gpu'],
});
try {
const page = await browser.newPage();