diff --git a/.github/workflows/assistant-to-the-branch-manager.yml b/.github/workflows/assistant-to-the-branch-manager.yml
index 4a9daab0a148..f21e2612ef53 100644
--- a/.github/workflows/assistant-to-the-branch-manager.yml
+++ b/.github/workflows/assistant-to-the-branch-manager.yml
@@ -18,6 +18,6 @@ jobs:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- - uses: angular/dev-infra/github-actions/branch-manager@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ - 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 05fa1692e7c8..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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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,13 +208,13 @@ jobs:
SAUCE_TUNNEL_IDENTIFIER: angular-cli-${{ github.workflow }}-${{ github.run_number }}
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/bazel/configure-remote@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
with:
google_credential: ${{ secrets.RBE_TRUSTED_BUILDS_USER }}
- name: Start Sauce Connect
@@ -245,11 +245,11 @@ jobs:
CIRCLE_BRANCH: ${{ github.ref_name }}
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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 7a75337fd3df..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@f205ea1c3313d32999d8d6a48b4f6530d4437b38 # v4.37.4
+ 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@f205ea1c3313d32999d8d6a48b4f6530d4437b38 # v4.37.4
+ 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 0be73a55a51a..2c9e701b95e2 100644
--- a/.github/workflows/dev-infra.yml
+++ b/.github/workflows/dev-infra.yml
@@ -16,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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ - 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ - 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ - 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 5bca0fe665c8..591414f2e95a 100644
--- a/.github/workflows/perf.yml
+++ b/.github/workflows/perf.yml
@@ -22,7 +22,7 @@ jobs:
workflows: ${{ steps.workflows.outputs.workflows }}
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Install node modules
run: pnpm install --frozen-lockfile
- id: workflows
@@ -40,9 +40,9 @@ jobs:
workflow: ${{ fromJSON(needs.list.outputs.workflows) }}
steps:
- name: Initialize environment
- uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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
diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
index 4100bed1bcc8..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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/npm/checkout-and-setup-node@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel
- uses: angular/dev-infra/github-actions/bazel/setup@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ uses: angular/dev-infra/github-actions/bazel/setup@04230133d395dfb032d782b8e63b4fcbbd406aa5 # main
- name: Setup Bazel RBE
- uses: angular/dev-infra/github-actions/bazel/configure-remote@0b701b31038419ad73422a9d9d3dff43a725a0d2 # main
+ 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 ac5d75573754..862ead79f856 100644
--- a/.github/workflows/scorecard.yml
+++ b/.github/workflows/scorecard.yml
@@ -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@f205ea1c3313d32999d8d6a48b4f6530d4437b38 # v4.37.4
+ uses: github/codeql-action/upload-sarif@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
with:
sarif_file: results.sarif
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4f37cdba567a..c624abd370a0 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,48 @@
+
+
+# 22.1.4 (2026-08-13)
+
+### @angular/cli
+
+| Commit | Type | Description |
+| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------- |
+| [67a29899b](https://github.com/angular/angular-cli/commit/67a29899b07f760bac9582cbc6175966cce1c5d2) | fix | disable searching current directory for bare executable names on Windows |
+| [1b0ba5c17](https://github.com/angular/angular-cli/commit/1b0ba5c17f0be2679b31bad1bee8b435315dac1a) | fix | serialize configuration as a single argv token in run_target strategies ([#33657](https://github.com/angular/angular-cli/pull/33657)) |
+| [9440432d2](https://github.com/angular/angular-cli/commit/9440432d273c044965508d80e808c2fe123af0aa) | perf | avoid eager module loading during global bootstrap |
+
+### @schematics/angular
+
+| Commit | Type | Description |
+| --------------------------------------------------------------------------------------------------- | ---- | ------------------------------------------------------- |
+| [d4a48e3ab](https://github.com/angular/angular-cli/commit/d4a48e3abe320e090eefe17cb70abdf8e7eafaed) | fix | generate CLAUDE.md for Claude Code instead of AGENTS.md |
+| [d451f15b2](https://github.com/angular/angular-cli/commit/d451f15b2838a8282363dcb30161dd5dc858750f) | fix | import UrlSegment instead of subPath in guard generator |
+
+### @angular/build
+
+| Commit | Type | Description |
+| --------------------------------------------------------------------------------------------------- | ---- | ----------------------------------------------------------------- |
+| [46fcb29d6](https://github.com/angular/angular-cli/commit/46fcb29d6c1ded962de95449d63716c13950f59a) | fix | count statically imported chunks in the initial total |
+| [796b57684](https://github.com/angular/angular-cli/commit/796b576843191a4d5c74e4f9363ec0e46ae3a881) | fix | normalize setupFiles paths to POSIX for vitest runner |
+| [c805e5cfb](https://github.com/angular/angular-cli/commit/c805e5cfb308d02a1944ef446d0a01af8a7ec6d2) | fix | prevent syntax corruption for Crockford-style enum IIFE |
+| [cc6c17716](https://github.com/angular/angular-cli/commit/cc6c17716df5c411efca5e6f4c960f0565f45d90) | fix | prevent syntax corruption in oxc transform |
+| [a142f6f83](https://github.com/angular/angular-cli/commit/a142f6f83d2f501b64f2404909ef9325bbfa70fb) | fix | return direct file contents for non-Angular TypeScript files |
+| [956c6578d](https://github.com/angular/angular-cli/commit/956c6578d31d8482c04dc45723d7ab3b4fe355a5) | fix | return only lowest version per target engine |
+| [689b5b116](https://github.com/angular/angular-cli/commit/689b5b116717140da98494e61ac5ea5ad7b68d73) | fix | set target for Rolldown dependency prebundling in Vite dev server |
+| [70461f6ed](https://github.com/angular/angular-cli/commit/70461f6ed2e30aeaad2b93400ad00d9274665967) | perf | avoid encoding the inline source map before remapping |
+| [22cce7563](https://github.com/angular/angular-cli/commit/22cce7563e82f17373b69e590d3e445767bd9264) | perf | batch last_accessed updates in sqlite cache store |
+| [ab2ed18d5](https://github.com/angular/angular-cli/commit/ab2ed18d5739e8565403062ca74aa2d5cb3b95ec) | perf | hash the i18n inline cache key options once per locale |
+| [34516ff73](https://github.com/angular/angular-cli/commit/34516ff736185e20ef8239b1fed8eda1f0193f62) | perf | optimize template string size calculation in server manifest |
+| [712971c37](https://github.com/angular/angular-cli/commit/712971c370738beaebff18f6995859b1713ed8ae) | perf | share i18n translations with the inliner workers by reference |
+| [78f8c5fef](https://github.com/angular/angular-cli/commit/78f8c5fef44dc6ff466b17c98fa1d01222cb1781) | perf | use Map for chunk asset size lookups in budget calculator |
+
+### @angular/ssr
+
+| Commit | Type | Description |
+| --------------------------------------------------------------------------------------------------- | ---- | -------------------------------------------------- |
+| [2331c1047](https://github.com/angular/angular-cli/commit/2331c10476830e7a53e0f2fa4a2f37dad58e2d5d) | fix | destroy platform when response stream is cancelled |
+
+
+
# 22.1.3 (2026-08-05)
diff --git a/MODULE.bazel b/MODULE.bazel
index d4fb6902ff2a..02156424e307 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -12,28 +12,28 @@ 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_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 = "a0bbcceea19b7888114eeafe3f52f9822ca2b34a",
+ commit = "20a373d609c4f5765b9ad367a205f3a635dd2cda",
remote = "https://github.com/angular/rules_angular.git",
)
bazel_dep(name = "devinfra")
git_override(
module_name = "devinfra",
- commit = "0b701b31038419ad73422a9d9d3dff43a725a0d2",
+ commit = "04230133d395dfb032d782b8e63b4fcbbd406aa5",
remote = "https://github.com/angular/dev-infra.git",
)
bazel_dep(name = "rules_browsers")
git_override(
module_name = "rules_browsers",
- commit = "7fe4598226334b0809d3054f6948d72df4b5ed59",
+ commit = "37853f23de9a9a70f53c02a9baa27e08d7d12003",
remote = "https://github.com/angular/rules_browsers.git",
)
@@ -131,8 +131,8 @@ use_repo(
pnpm = use_extension("@aspect_rules_js//npm:extensions.bzl", "pnpm")
pnpm.pnpm(
name = "pnpm",
- pnpm_version = "11.20.0",
- pnpm_version_integrity = "sha512-mm8zCpW2ZEbqCI+vFSFAWooB8H/ecSTMmVjf7VLUu0NnN+ZbCPhfN7Rvy6N1CSVYrFEmK4FoRLIvY0Bu0Wa/7g==",
+ 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 a30e6d148916..5dea915111bc 100644
--- a/MODULE.bazel.lock
+++ b/MODULE.bazel.lock
@@ -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",
@@ -222,7 +222,7 @@
"moduleExtensions": {
"@@aspect_rules_esbuild+//esbuild:extensions.bzl%esbuild": {
"general": {
- "bzlTransitiveDigest": "Nhop9eqlQBcxge+uYzGmhiFAZmagl+D5CUXkaUpOBCc=",
+ "bzlTransitiveDigest": "DfFT9JjdwDXEFWTCpbJTMqiSwGOU02Jq1C1XgMbRhec=",
"usagesDigest": "LSQ+zZp7JNgnBONTxxXnwGr4NTh2qtQYk7qwXXz5qWo=",
"recordedFileInputs": {},
"recordedDirentsInputs": {},
@@ -539,7 +539,7 @@
},
"@@rules_browsers+//browsers:extensions.bzl%browsers": {
"general": {
- "bzlTransitiveDigest": "w4tgtXA7WLl79lEQFfedhl7OVEGAKFqAFLnlI5c/Rtk=",
+ "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": "7220f7149a01e85e631cb949b03fd472eba72fe0a92c6d8dab7833dd94e0c72c",
+ "sha256": "5b132ebe0be5c0c15cb5222c33e04e37ae21ed3e00d84c68e905f80f29221c50",
"urls": [
- "https://storage.googleapis.com/chrome-for-testing-public/153.0.7981.3/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": "0d80d90379960943f3dc9f5eb966876010dd950736c97386e375581a56baf7c7",
+ "sha256": "522e62dbfce61fddd413fb76a65e699b6f5bdce4045e4398d1e2fb1ef73ff6f3",
"urls": [
- "https://storage.googleapis.com/chrome-for-testing-public/153.0.7981.3/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": "7fad05ead762524231ed026cf40385cba80cb3daab2973622f3533308fc045fa",
+ "sha256": "b68d54b63ab30042874a87ad81a135360fa87e1d4763df2431b30b4d59878b4e",
"urls": [
- "https://storage.googleapis.com/chrome-for-testing-public/153.0.7981.3/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": "2c08f3f53115434e3dd623e2e1f1f54896fa4b2cbaf86518d7f4708dc80fe67d",
+ "sha256": "0fd5b488d41686cb7cb0be1feb861f1e4cb44d9c5e67a4c5328a385742aa6a8e",
"urls": [
- "https://storage.googleapis.com/chrome-for-testing-public/153.0.7981.3/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": "8bab44616dd81669a7a99d77c6b7e952ee3ec3bfd01ddf864cf795a880cfbd92",
+ "sha256": "69139f654d93c12d04209713c725b33ea7074a1e35c47aaf98f419c4a00b4e9b",
"urls": [
- "https://storage.googleapis.com/chrome-for-testing-public/153.0.7981.3/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": "d1f8618664ec5b0433c19b36eef91b55671a1adf595ffd012da8b859c32dc7b1",
+ "sha256": "b56b49cb41658c25405757b3c01a5412403e3744ee6935c5f9f59bf2b907bcf6",
"urls": [
- "https://storage.googleapis.com/chrome-for-testing-public/153.0.7981.3/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": "3c8b50af153cf6e8de8f2ec9f4b9a1ce717cd76a3ca6c82f9e736d7b705bdbe2",
+ "sha256": "e2bd843b45ba197632d29eeef188940488779684207eb3118a5a78c26aef9659",
"urls": [
- "https://storage.googleapis.com/chrome-for-testing-public/153.0.7981.3/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": "2fdba8a5036173c57627b38df844e2f9c6634dd027eaa5a5f306033e14414e08",
+ "sha256": "2f56f10ba3989d8b5c44c22cff080c2cc436314f8f8babbcc151bb95b34de841",
"urls": [
- "https://storage.googleapis.com/chrome-for-testing-public/153.0.7981.3/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"
diff --git a/package.json b/package.json
index 5ff4b5f8d2b8..0b415746264a 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@angular/devkit-repo",
- "version": "22.1.3",
+ "version": "22.1.4",
"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.20.0",
+ "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.20.0"
+ "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",
+ "@angular/compiler-cli": "22.1.1",
"typescript": "6.0.3"
},
"devDependencies": {
- "@angular/animations": "22.1.0",
- "@angular/cdk": "22.1.0",
- "@angular/common": "22.1.0",
- "@angular/compiler": "22.1.0",
- "@angular/core": "22.1.0",
- "@angular/forms": "22.1.0",
- "@angular/localize": "22.1.0",
- "@angular/material": "22.1.0",
- "@angular/ng-dev": "https://github.com/angular/dev-infra-private-ng-dev-builds.git#dcf9b6776377d5d301e054111add3ef80f433b70",
- "@angular/platform-browser": "22.1.0",
- "@angular/platform-server": "22.1.0",
- "@angular/router": "22.1.0",
- "@angular/service-worker": "22.1.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 667658bfb03b..e37ee6976688 100644
--- a/packages/angular/build/package.json
+++ b/packages/angular/build/package.json
@@ -27,7 +27,7 @@
"@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",
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 faa61c6e523b..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';
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/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/unit-test/options.ts b/packages/angular/build/src/builders/unit-test/options.ts
index 1206bb2c1f21..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';
@@ -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-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 70989a8bc08d..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);
}
}
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/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 a6d4b5aeccbb..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' },
);
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/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/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/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 ab6e9cf48589..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';
@@ -39,6 +37,9 @@ let forceExit = false;
// Ignore failure to change directory
}
}
+
+ // Ensure Windows CreateProcess does not search the current directory for bare executable names.
+ process.env['NoDefaultCurrentDirectoryInExePath'] = '1';
}
/**
@@ -48,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];
/**
@@ -121,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".';
-
- // eslint-disable-next-line no-console
- console.error(colors.yellow(warning));
+ } 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".';
+
+ 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/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/ssr/node/src/response.ts b/packages/angular/ssr/node/src/response.ts
index 90ed5bb31a67..d3b0cf403090 100644
--- a/packages/angular/ssr/node/src/response.ts
+++ b/packages/angular/ssr/node/src/response.ts
@@ -17,13 +17,11 @@ import type { Http2ServerResponse } from 'node:http2';
*/
function isResponseDestroyedOrClosed(destination: ServerResponse | Http2ServerResponse): boolean {
return (
- Boolean(destination.destroyed) ||
- Boolean(destination.closed) ||
- Boolean(destination.writableEnded) ||
+ destination.destroyed ||
+ destination.closed ||
+ destination.writableEnded ||
('stream' in destination &&
- (!destination.stream ||
- Boolean(destination.stream.destroyed) ||
- Boolean(destination.stream.closed)))
+ (!destination.stream || destination.stream.destroyed || destination.stream.closed))
);
}
diff --git a/packages/angular/ssr/package.json b/packages/angular/ssr/package.json
index f34036b75949..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",
- "@angular/compiler": "22.1.0",
- "@angular/core": "22.1.0",
- "@angular/platform-browser": "22.1.0",
- "@angular/platform-server": "22.1.0",
- "@angular/router": "22.1.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/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_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json
index d1acd78d2b22..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",
@@ -61,7 +61,7 @@
"webpack-subresource-integrity": "5.1.0"
},
"optionalDependencies": {
- "esbuild": "0.28.1"
+ "esbuild": "0.28.2"
},
"devDependencies": {
"@angular/ssr": "workspace:*",
diff --git a/packages/ngtools/webpack/package.json b/packages/ngtools/webpack/package.json
index 46734c939505..5943aa5d1659 100644
--- a/packages/ngtools/webpack/package.json
+++ b/packages/ngtools/webpack/package.json
@@ -17,8 +17,8 @@
},
"devDependencies": {
"@angular-devkit/core": "workspace:0.0.0-PLACEHOLDER",
- "@angular/compiler": "22.1.0",
- "@angular/compiler-cli": "22.1.0",
+ "@angular/compiler": "22.1.1",
+ "@angular/compiler-cli": "22.1.1",
"typescript": "6.0.3",
"webpack": "5.109.2"
}
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 396f45c57d26..153bc3cb9309 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -14,8 +14,8 @@ importers:
.:
dependencies:
'@angular/compiler-cli':
- specifier: 22.1.0
- version: 22.1.0(@angular/compiler@22.1.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
- version: 22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.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
- version: 22.1.0(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0(@angular/animations@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.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
- version: 22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.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
- version: 22.1.0
+ specifier: 22.1.1
+ version: 22.1.1
'@angular/core':
- specifier: 22.1.0
- version: 22.1.0(@angular/compiler@22.1.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
- version: 22.1.0(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0(@angular/animations@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.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
- version: 22.1.0(@angular/compiler-cli@22.1.0(@angular/compiler@22.1.0)(typescript@6.0.3))(@angular/compiler@22.1.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
- version: 22.1.0(1d5b48d6601505eec7b597e3914980b4)
+ specifier: 22.1.1
+ version: 22.1.1(b9b71bdc0d04c1d399a4036adad75253)
'@angular/ng-dev':
- specifier: https://github.com/angular/dev-infra-private-ng-dev-builds.git#dcf9b6776377d5d301e054111add3ef80f433b70
- version: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/dcf9b6776377d5d301e054111add3ef80f433b70(@modelcontextprotocol/sdk@1.29.0(supports-color@11.0.0)(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
- version: 22.1.0(@angular/animations@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.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
- version: 22.1.0(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.1.0)(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0(@angular/animations@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.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
- version: 22.1.0(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0(@angular/animations@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.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
- version: 22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.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
@@ -135,7 +135,7 @@ importers:
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.25
@@ -176,11 +176,11 @@ 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@11.0.0)
@@ -318,13 +318,13 @@ importers:
version: 29.1.1
ng-packagr:
specifier: 22.1.1
- version: 22.1.1(@angular/compiler-cli@22.1.0(@angular/compiler@22.1.0)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3)
+ 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@22.20.1)(@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:
@@ -348,16 +348,16 @@ importers:
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@22.20.1)(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@11.0.0)
@@ -402,7 +402,7 @@ importers:
version: 0.2.17
vite:
specifier: 8.1.5
- version: 8.1.5(@types/node@22.20.1)(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
@@ -427,7 +427,7 @@ importers:
version: 4.6.7
ng-packagr:
specifier: 22.1.1
- version: 22.1.1(@angular/compiler-cli@22.1.0(@angular/compiler@22.1.0)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3)
+ 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.25
version: 8.5.25
@@ -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@22.20.1)(@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
@@ -463,8 +463,8 @@ importers:
specifier: 4.2.4
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@11.0.0)(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
- version: 22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.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
- version: 22.1.0
+ specifier: 22.1.1
+ version: 22.1.1
'@angular/core':
- specifier: 22.1.0
- version: 22.1.0(@angular/compiler@22.1.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
- version: 22.1.0(@angular/animations@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.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
- version: 22.1.0(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.1.0)(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0(@angular/animations@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.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
- version: 22.1.0(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0(@angular/animations@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.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
@@ -603,19 +603,19 @@ importers:
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.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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@11.0.0)
@@ -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.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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
@@ -660,7 +660,7 @@ importers:
version: 8.5.25
postcss-loader:
specifier: 8.2.1
- version: 8.2.1(postcss@8.5.25)(typescript@6.0.3)(webpack@5.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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
@@ -693,19 +693,19 @@ importers:
version: 2.8.1
webpack:
specifier: 5.109.2
- version: 5.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)
+ 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.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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@11.0.0))(supports-color@11.0.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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:*
@@ -715,14 +715,14 @@ importers:
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.1
- version: 22.1.1(@angular/compiler-cli@22.1.0(@angular/compiler@22.1.0)(typescript@6.0.3))(tslib@2.8.1)(typescript@6.0.3)
+ 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:
@@ -741,10 +741,10 @@ importers:
version: link:../../ngtools/webpack
webpack:
specifier: 5.109.2
- version: 5.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)
+ 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@11.0.0))(supports-color@11.0.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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:
@@ -807,17 +807,17 @@ importers:
specifier: workspace:0.0.0-PLACEHOLDER
version: link:../../angular_devkit/core
'@angular/compiler':
- specifier: 22.1.0
- version: 22.1.0
+ specifier: 22.1.1
+ version: 22.1.1
'@angular/compiler-cli':
- specifier: 22.1.0
- version: 22.1.0(@angular/compiler@22.1.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.109.2
- version: 5.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)
+ 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':
- resolution: {integrity: sha512-MHXOXmn9zmkiq234J+pr2Ir4A+z1iiVmQ0WjQ4skvK8GHTjnjeHKb4HrpAo5f7S3W0oenszmkNCddTQ3pvoJPw==}
+ '@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
+ '@angular/core': 22.1.1
- '@angular/cdk@22.1.0':
- resolution: {integrity: sha512-yfQug47CZ+51mHy0ZLWzi6F/YHfsAF2Z7Jxo3JLM7Aj3Er47hHB8VnrNERwK5tBLs0bE5DoEIm59ga/MI3fVGg==}
+ '@angular/cdk@22.1.1':
+ resolution: {integrity: sha512-P8YuW/r5MS8aeKF0NruktKGHQShOMctvhs3H/51BOwJrMZi5qtWJ40t1yqTrNnewSJIKI0/AroUEmEOqA9Ml9Q==}
peerDependencies:
'@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':
- resolution: {integrity: sha512-67L8AS00egxwEKnoMhNDxy+TY+eKOwvwa+os0Odq8nLm7+Qh7JnMVeub8hfncpenOFqlC/RUjO2W9H7Gd2veNA==}
+ '@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
+ '@angular/core': 22.1.1
rxjs: ^6.5.3 || ^7.4.0
- '@angular/compiler-cli@22.1.0':
- resolution: {integrity: sha512-jL89dbzkrV8AeLaxedBgT7ErMnbfi2dvwDJuCrUgm3eCNfbcOpGbNxzH+wDgvbRg2Lhj11/u3JPbW50xA6rvvg==}
+ '@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
+ '@angular/compiler': 22.1.1
typescript: '>=6.0 <6.1'
peerDependenciesMeta:
typescript:
optional: true
- '@angular/compiler@22.1.0':
- resolution: {integrity: sha512-WCmuPnuXgqnqrkbrwqQRyldi1k3rlzNLVDl8ntINF7XWuJh0KfQLEkRK0FCCmBztWJkbGug4RBVnKTWlKhRzCQ==}
+ '@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':
- resolution: {integrity: sha512-X5UaMuOCI4HAvSQIs3QtM+5e0Cni16DRaHUIL3BIBd4ZQNnSH3pZ25TsKQ8Jlu/3hAQ9rzV278kNQcecooGJ7g==}
+ '@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
+ '@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':
- resolution: {integrity: sha512-nWlSM/pPp78Sx/fBM/tFEgZxdfZe50LkCE2/hkO22Fi1UM2maGc43LDsu/s6l0q9hFep4Wj+xa30KXDBS7Cn8A==}
+ '@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
- '@angular/core': 22.1.0
- '@angular/platform-browser': 22.1.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':
- resolution: {integrity: sha512-oT0d+ru2Rdd1UwLTthu/oMvQ8yXSVCcHTkpH7wO8AXjFCsS9OLCzmmiCdnk/UL2ClaNygJi2I4BNEuKtX+dWRA==}
+ '@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
- '@angular/compiler-cli': 22.1.0
+ '@angular/compiler': 22.1.1
+ '@angular/compiler-cli': 22.1.1
- '@angular/material@22.1.0':
- resolution: {integrity: sha512-i3Os8JZg4DejgNTtw8GCLQbbZ8+lv8h/ym6PxRwmYNpegmyGiVSKAZ2JBkEs5f1pmMaTppuG3MF6mXei4xi6Wg==}
+ '@angular/material@22.1.1':
+ resolution: {integrity: sha512-wXNNstkLrUJwmP/cZl+C64chL5qH0WbnHIeYbiXrPwgriAD10prbVBoSq2CWbBrAhQ691pDdFKVSLG5tC224jg==}
peerDependencies:
- '@angular/cdk': 22.1.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/dcf9b6776377d5d301e054111add3ef80f433b70':
- resolution: {gitHosted: true, tarball: https://codeload.github.com/angular/dev-infra-private-ng-dev-builds/tar.gz/dcf9b6776377d5d301e054111add3ef80f433b70}
- version: 0.0.0-0b701b31038419ad73422a9d9d3dff43a725a0d2
+ '@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':
- resolution: {integrity: sha512-gqUYDUiPfwbaLYdH8WLnOLl3feo3OcNpnMO08HBHaUdi4TLNkC28xwa9fC6ANyYD22QZ5A3abSg8fmR6upWMwg==}
+ '@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
- '@angular/common': 22.1.0
- '@angular/core': 22.1.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':
- resolution: {integrity: sha512-b6Z17lqwtR1SuLBfh2LsGnyFGCPjAdgEXFOYVqV/JOACJCxHFG0TwE6BKYKe8lCgDkC5nQk0uM5pJNv2uC2tUw==}
+ '@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
- '@angular/compiler': 22.1.0
- '@angular/core': 22.1.0
- '@angular/platform-browser': 22.1.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':
- resolution: {integrity: sha512-42Bs0g+tV2gE70Lqnt+VD/+DWbvWwQcg8QgXkTIu3A504tYknrZG/wmvki2AJGyZhmyQ46B4pfXLG4WDP8MFSA==}
+ '@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
- '@angular/core': 22.1.0
- '@angular/platform-browser': 22.1.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':
- resolution: {integrity: sha512-apz0zZ8at3D1Y1FcxrxJknLOyjWvwhzEEoPYIzMvPnMzKUTucU8IhZBHJ4adX3wRLoDPCAVDJrKSnXeOogveWw==}
+ '@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
+ '@angular/core': 22.1.1
rxjs: ^6.5.3 || ^7.4.0
'@asamuzakjp/css-color@5.1.11':
@@ -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':
@@ -2108,8 +2126,8 @@ packages:
resolution: {integrity: sha512-IJn+8A3QZJfe7FUtWqHVNo3xJs7KFpurCWGWCiCz3oEh+BkRymKZ1QxfAbU2yGMDzTytLGQ2IV6T2r3cuo75/w==}
engines: {node: '>=18'}
- '@google/genai@2.13.0':
- resolution: {integrity: sha512-GM7C8Kaomvjz05x5JEO6+l3d/pciL9LxAG9dUjJLD7nTPZ9X0Cfsf2Z7eET6UjgWyUmxXCHtYnQoQ77F9+ZIOQ==}
+ '@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.17':
- resolution: {integrity: sha512-dSneS5qhiauZWGDCeK4o695Xd9nUNjviSZCMQrj10eetr8Uln1ucn6bbphOM6UynAMMtNIzZNSpL9vnASJwrPQ==}
- 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
@@ -2676,8 +2694,8 @@ 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.4':
@@ -2696,8 +2714,8 @@ packages:
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.4':
@@ -2707,16 +2725,16 @@ packages:
'@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.3':
- resolution: {integrity: sha512-t7MBs34Ja16BBZlOSAFslFh4wBMuofD83wVLG9zIuuEGMv/U12XAJ8ESOifgEcC1ptjhNA3sorLA9BCtVfgPuw==}
+ '@octokit/oauth-methods@6.0.4':
+ resolution: {integrity: sha512-96RsnxS7Hk/BQhUA1Qo2pmcYP6LWQRWMdo7bVbNE7ZCkFLhSUYBXVUj9tVnvhl4jzbwHYt/dcIG+ioY427b2sg==}
engines: {node: '>= 20'}
'@octokit/openapi-types@27.0.0':
@@ -2755,10 +2773,6 @@ packages:
peerDependencies:
'@octokit/core': '>=6'
- '@octokit/request-error@7.1.0':
- resolution: {integrity: sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==}
- engines: {node: '>= 20'}
-
'@octokit/request-error@7.1.1':
resolution: {integrity: sha512-+eaY7G2VVpSf2pc5Gn1+mph837V/d/TYTJAgWL9Tb0ogGYcpN3IlAVFgjL+Vv93F/sevrxkvsYCedtpLdcFLzA==}
engines: {node: '>= 20'}
@@ -3707,9 +3721,6 @@ 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==}
@@ -3800,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':
@@ -4254,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:
@@ -4280,8 +4291,8 @@ packages:
bare-events:
optional: true
- bare-url@2.4.7:
- resolution: {integrity: sha512-o8CRCiJtib+ycO3mE4A5UChtGX4dDP2XxsWVu9P+Zc3H8tcmKwNVEDoDTXmwN+uuMhfKeT7/i7Y26xS8W7ohoA==}
+ 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==}
@@ -4290,8 +4301,8 @@ packages:
resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==}
engines: {node: ^4.5.0 || >= 5.9}
- baseline-browser-mapping@2.11.11:
- resolution: {integrity: sha512-/yImnXwyTvgMkhgekLHok/Rx5vO6E0BmStWlSqKWMVm2a2ITuZ1Tn+9bgLS+gZRdZmWtd8nxuhHpdmCUOWsTQQ==}
+ baseline-browser-mapping@2.11.13:
+ resolution: {integrity: sha512-k9HNuUVMlqVjQ9UHzfPjIqiDbWw7WqT1AoT7GL8VwvF3r0ZfArtgiSPAlmupyNquNgOJHTuH4CKYf8ttMTWBTQ==}
engines: {node: '>=6.0.0'}
hasBin: true
@@ -4373,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
@@ -4430,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==}
@@ -4598,8 +4609,8 @@ packages:
resolution: {integrity: sha512-cs+LadpH7Kpw0M3k8wurk+sOVVDAENA0iK4OBOrkL94j5lEVYRJ4j3zd2bhY9qgzyrPqthdcYT3axzRN7AliMg==}
engines: {node: '>=22'}
- conventional-commits-parser@7.1.1:
- resolution: {integrity: sha512-B0f42jI++V5Vb7qK+DDw68r0dNxz5hk+RdKUkx2NOi39emc9hsHa3u2M3doF7QQhRFzCrAj7uM90teG+RBTaYQ==}
+ conventional-commits-parser@7.1.2:
+ resolution: {integrity: sha512-O+x4N2yH+ijvqWlIyTHsXTAP+algNWgGbjY2duCe8w2vUMvUB95cLRslCPfTMQyLAKlet3bhZTdu6ozn4M+QJQ==}
engines: {node: '>=22'}
hasBin: true
@@ -4630,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==}
@@ -4894,8 +4906,8 @@ packages:
engines: {node: '>=0.12.18'}
hasBin: true
- electron-to-chromium@1.5.399:
- resolution: {integrity: sha512-lEcqhErbHjXRvd41rnWLpzbyU/IXfIYo7QwaFWmxGeLiLyY2TBCdHnWY88vB+p3ubnihRypDm66panXl7TylLA==}
+ electron-to-chromium@1.5.403:
+ resolution: {integrity: sha512-MQsYmdaLzvaCX5j+ZZBr5Fm6uCCnPQcRtlvmvRlWqrXy+BH2O4ffXIAScF+JQznQWB9brWp4lSD9Z4yNmaf2BA==}
emoji-regex@10.6.0:
resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
@@ -5014,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
@@ -5178,8 +5190,8 @@ packages:
express-rate-limit@5.5.1:
resolution: {integrity: sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg==}
- express-rate-limit@8.6.1:
- resolution: {integrity: sha512-0D493aP61w0TJ2A0wy27riRsO7FMQ7FK+KUHOKCSfPvYo0R55aiC6emCVgFUeShH0fq0ICPVzNcgoS+BsbXQCA==}
+ express-rate-limit@8.6.2:
+ resolution: {integrity: sha512-YH4ru+eOJxQABscKFfRCy9R7x9QFGdezclVMwwgFFndzS2Xnm0uo6B0ABZsLhcpeptGv2qvuJVWlQr9gQZoC3A==}
engines: {node: '>= 16'}
peerDependencies:
express: '>= 4.11'
@@ -5287,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==}
@@ -5567,8 +5579,8 @@ packages:
resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==}
engines: {node: '>= 0.4'}
- hono@4.12.34:
- resolution: {integrity: sha512-GqXJqY/xJkJmuloTrnV1ZEXG3fqte+VjkUqoRNZXcrUidiUOP4fMSIHHY4tsqZBK++kVyWmt/AAfSUuy57/eSA==}
+ hono@4.13.1:
+ resolution: {integrity: sha512-kdJoFVv2xmayw6cY09H7AbMJMt8Jn5jdlEdXsP7AGBdF2DIptVlKlOLKXP41yPip4/a3yQPv9gVcJYI8YY04dw==}
engines: {node: '>=16.9.0'}
hosted-git-info@10.1.1:
@@ -5733,16 +5745,16 @@ packages:
resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
engines: {node: '>= 0.4'}
- ip-address@10.4.0:
- resolution: {integrity: sha512-oSK96Grm3aP6OrS263xVxbNDGVL7rzBtYdpGqlDG8iQdoenDoTs/nkki+DflYbAEE8Xl6o5YxhxlrKvI3nqKXQ==}
+ 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:
@@ -6030,8 +6042,8 @@ packages:
resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==}
hasBin: true
- jose@6.2.7:
- resolution: {integrity: sha512-hq1OB1bALKfydZNoViyg6hPVGV4i93ny9Op+n4zP5RSf7SCZEXa/TsG2O3IEr7+WlHRTPnpqDmHfMH6qXAD60w==}
+ 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==}
@@ -6410,10 +6422,8 @@ packages:
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==}
@@ -6606,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
@@ -6647,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:
@@ -6690,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:
@@ -7019,8 +7029,8 @@ 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:
@@ -7116,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:
@@ -7162,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==}
@@ -7184,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:
@@ -7436,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:
@@ -7865,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
@@ -8006,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'
@@ -8330,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
@@ -8454,29 +8465,29 @@ snapshots:
'@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.31
- '@angular/animations@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.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(@angular/compiler@22.1.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(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0(@angular/animations@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.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(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
- '@angular/core': 22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)
- '@angular/platform-browser': 22.1.0(@angular/animations@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.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(@angular/core@22.1.0(@angular/compiler@22.1.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(@angular/compiler@22.1.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(@angular/compiler@22.1.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
+ '@angular/compiler': 22.1.1
'@babel/core': 8.0.1
'@jridgewell/sourcemap-codec': 1.5.5
chokidar: 5.0.0
@@ -8488,62 +8499,62 @@ snapshots:
optionalDependencies:
typescript: 6.0.3
- '@angular/compiler@22.1.0':
+ '@angular/compiler@22.1.1':
dependencies:
tslib: 2.8.1
- '@angular/core@22.1.0(@angular/compiler@22.1.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
+ '@angular/compiler': 22.1.1
zone.js: 0.16.2
- '@angular/forms@22.1.0(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0(@angular/animations@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.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(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
- '@angular/core': 22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)
- '@angular/platform-browser': 22.1.0(@angular/animations@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.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(@angular/compiler-cli@22.1.0(@angular/compiler@22.1.0)(typescript@6.0.3))(@angular/compiler@22.1.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
- '@angular/compiler-cli': 22.1.0(@angular/compiler@22.1.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(1d5b48d6601505eec7b597e3914980b4)':
+ '@angular/material@22.1.1(b9b71bdc0d04c1d399a4036adad75253)':
dependencies:
- '@angular/cdk': 22.1.0(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0(@angular/animations@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)
- '@angular/common': 22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
- '@angular/core': 22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)
- '@angular/forms': 22.1.0(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0(@angular/animations@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(rxjs@7.8.2)
- '@angular/platform-browser': 22.1.0(@angular/animations@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.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/dcf9b6776377d5d301e054111add3ef80f433b70(@modelcontextprotocol/sdk@1.29.0(supports-color@11.0.0)(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.1)
+ '@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.13.0(@modelcontextprotocol/sdk@1.29.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)
+ '@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': 28.0.0
- '@octokit/plugin-paginate-rest': 15.0.0(@octokit/core@7.0.6)
- '@octokit/plugin-rest-endpoint-methods': 18.0.0(@octokit/core@7.0.6)
- '@octokit/request-error': 7.1.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': 17.0.0
'@pnpm/dependency-path': 1001.1.10
@@ -8553,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
@@ -8561,11 +8572,11 @@ snapshots:
bufferutil: 4.1.0
cli-progress: 3.12.0
conventional-commits-filter: 6.0.1
- conventional-commits-parser: 7.1.1
+ conventional-commits-parser: 7.1.2
ejs: 6.0.1
encoding: 0.1.13
fast-glob: 3.3.3
- firebase: 12.16.0
+ firebase: 12.17.1
folder-hash: 4.1.3(supports-color@11.0.0)
jasmine: 6.3.0
jasmine-core: 6.3.0
@@ -8573,10 +8584,10 @@ snapshots:
jsonc-parser: 3.3.1
minimatch: 10.2.6
multimatch: 8.0.0
- nock: 14.0.16
+ nock: 14.0.17
semver: 7.8.5
supports-color: 11.0.0
- tsx: 4.23.1
+ tsx: 4.23.7
typed-graphqlify: 3.1.6
typescript: 6.0.3
utf-8-validate: 6.0.6
@@ -8588,35 +8599,35 @@ snapshots:
- '@modelcontextprotocol/sdk'
- '@react-native-async-storage/async-storage'
- '@angular/platform-browser@22.1.0(@angular/animations@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.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(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
- '@angular/core': 22.1.0(@angular/compiler@22.1.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(@angular/core@22.1.0(@angular/compiler@22.1.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(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/compiler@22.1.0)(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0(@angular/animations@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.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(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
- '@angular/compiler': 22.1.0
- '@angular/core': 22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)
- '@angular/platform-browser': 22.1.0(@angular/animations@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.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(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(@angular/platform-browser@22.1.0(@angular/animations@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.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(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2)
- '@angular/core': 22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)
- '@angular/platform-browser': 22.1.0(@angular/animations@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2)))(@angular/common@22.1.0(@angular/core@22.1.0(@angular/compiler@22.1.0)(rxjs@7.8.2)(zone.js@0.16.2))(rxjs@7.8.2))(@angular/core@22.1.0(@angular/compiler@22.1.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(@angular/core@22.1.0(@angular/compiler@22.1.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(@angular/compiler@22.1.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
@@ -8719,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
@@ -8727,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
@@ -9255,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)':
@@ -9327,14 +9338,14 @@ snapshots:
'@colors/colors@1.5.0': {}
- '@conventional-changelog/git-client@3.1.0(conventional-commits-filter@6.0.1)(conventional-commits-parser@7.1.1)':
+ '@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.1
+ conventional-commits-parser: 7.1.2
'@csstools/color-helpers@6.1.0': {}
@@ -9410,82 +9421,82 @@ 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@11.0.0))':
@@ -9544,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
@@ -9766,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
@@ -9926,14 +9934,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@google/genai@2.13.0(@modelcontextprotocol/sdk@1.29.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)':
+ '@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.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@11.0.0)(zod@4.4.3)
+ '@modelcontextprotocol/sdk': 1.30.0(supports-color@11.0.0)(zod@4.4.3)
transitivePeerDependencies:
- bufferutil
- supports-color
@@ -9966,9 +9974,9 @@ snapshots:
'@harperfast/extended-iterable@1.0.3':
optional: true
- '@hono/node-server@1.19.17(hono@4.12.34)':
+ '@hono/node-server@2.1.0(hono@4.13.1)':
dependencies:
- hono: 4.12.34
+ hono: 4.13.1
'@humanfs/core@0.19.2':
dependencies:
@@ -10283,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)
+ '@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)
+ '@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.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
@@ -10418,9 +10426,9 @@ snapshots:
'@lmdb/lmdb-win32-x64@3.5.6':
optional: true
- '@modelcontextprotocol/sdk@1.29.0(supports-color@11.0.0)(zod@4.4.3)':
+ '@modelcontextprotocol/sdk@1.30.0(supports-color@11.0.0)(zod@4.4.3)':
dependencies:
- '@hono/node-server': 1.19.17(hono@4.12.34)
+ '@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
@@ -10429,9 +10437,9 @@ snapshots:
eventsource: 3.0.7
eventsource-parser: 3.1.0
express: 5.2.1(supports-color@11.0.0)
- express-rate-limit: 8.6.1(express@5.2.1(supports-color@11.0.0))(supports-color@11.0.0)
- hono: 4.12.34
- jose: 6.2.7
+ 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
@@ -10567,13 +10575,13 @@ 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.4
'@octokit/auth-oauth-user': 6.0.3
'@octokit/request': 10.0.13
'@octokit/request-error': 7.1.1
- '@octokit/types': 16.0.0
+ '@octokit/types': 17.0.0
toad-cache: 3.7.4
universal-github-app-jwt: 2.2.2
universal-user-agent: 7.0.3
@@ -10588,7 +10596,7 @@ snapshots:
'@octokit/auth-oauth-device@8.0.4':
dependencies:
- '@octokit/oauth-methods': 6.0.3
+ '@octokit/oauth-methods': 6.0.4
'@octokit/request': 10.0.13
'@octokit/types': 17.0.0
universal-user-agent: 7.0.3
@@ -10596,20 +10604,20 @@ snapshots:
'@octokit/auth-oauth-user@6.0.3':
dependencies:
'@octokit/auth-oauth-device': 8.0.4
- '@octokit/oauth-methods': 6.0.3
+ '@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/graphql': 9.0.4
'@octokit/request': 10.0.13
'@octokit/request-error': 7.1.1
- '@octokit/types': 16.0.0
+ '@octokit/types': 17.0.0
before-after-hook: 4.0.0
universal-user-agent: 7.0.3
@@ -10623,15 +10631,15 @@ 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.13
- '@octokit/types': 16.0.0
+ '@octokit/types': 17.0.0
universal-user-agent: 7.0.3
'@octokit/oauth-authorization-url@8.0.0': {}
- '@octokit/oauth-methods@6.0.3':
+ '@octokit/oauth-methods@6.0.4':
dependencies:
'@octokit/oauth-authorization-url': 8.0.0
'@octokit/request': 10.0.13
@@ -10642,34 +10650,30 @@ snapshots:
'@octokit/openapi-types@28.0.0': {}
- '@octokit/plugin-paginate-rest@14.0.0(@octokit/core@7.0.6)':
+ '@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-paginate-rest@15.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-request-log@6.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/core': 7.0.7
- '@octokit/plugin-rest-endpoint-methods@17.0.0(@octokit/core@7.0.6)':
+ '@octokit/plugin-rest-endpoint-methods@17.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-rest-endpoint-methods@18.0.0(@octokit/core@7.0.6)':
+ '@octokit/plugin-rest-endpoint-methods@18.0.0(@octokit/core@7.0.7)':
dependencies:
- '@octokit/core': 7.0.6
+ '@octokit/core': 7.0.7
'@octokit/types': 17.0.0
- '@octokit/request-error@7.1.0':
- dependencies:
- '@octokit/types': 16.0.0
-
'@octokit/request-error@7.1.1':
dependencies:
'@octokit/types': 17.0.0
@@ -10685,10 +10689,10 @@ snapshots:
'@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:
@@ -10989,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
@@ -11229,7 +11233,7 @@ snapshots:
'@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@11.0.0))
- '@typescript-eslint/types': 8.65.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
@@ -11386,10 +11390,10 @@ snapshots:
'@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.109.2(esbuild@0.28.1)
+ webpack: 5.109.2(esbuild@0.28.2)
transitivePeerDependencies:
- '@minify-html/node'
- '@swc/core'
@@ -11455,8 +11459,6 @@ snapshots:
'@types/retry@0.12.2': {}
- '@types/semver@7.7.1': {}
-
'@types/semver@7.8.0': {}
'@types/send@0.17.6':
@@ -11574,7 +11576,7 @@ 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@11.0.0)(typescript@6.0.3)':
dependencies:
@@ -11778,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@22.20.1)(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@22.20.1)(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:
@@ -11794,7 +11796,7 @@ snapshots:
obug: 2.1.4
std-env: 4.2.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.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)
'@vitest/expect@4.1.10':
dependencies:
@@ -11805,13 +11807,13 @@ snapshots:
chai: 6.2.2
tinyrainbow: 3.1.1
- '@vitest/mocker@4.1.10(vite@8.1.5(@types/node@22.20.1)(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@22.20.1)(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:
@@ -12091,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: {}
@@ -12120,8 +12122,8 @@ snapshots:
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.25
@@ -12137,18 +12139,18 @@ snapshots:
b4a@1.8.1: {}
- babel-loader@10.1.1(@babel/core@8.0.1)(webpack@5.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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.109.2(esbuild@0.28.1)(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)
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: {}
@@ -12156,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.7
+ bare-url: 2.5.1
fast-fifo: 1.3.2
transitivePeerDependencies:
- bare-abort-controller
@@ -12179,7 +12181,7 @@ snapshots:
transitivePeerDependencies:
- react-native-b4a
- bare-url@2.4.7:
+ bare-url@2.5.1:
dependencies:
bare-path: 3.1.1
@@ -12187,7 +12189,7 @@ snapshots:
base64id@2.0.0: {}
- baseline-browser-mapping@2.11.11: {}
+ baseline-browser-mapping@2.11.13: {}
batch@0.6.1: {}
@@ -12340,13 +12342,13 @@ snapshots:
dependencies:
pako: 0.2.9
- browserslist@4.28.7:
+ browserslist@4.28.8:
dependencies:
- baseline-browser-mapping: 2.11.11
- caniuse-lite: 1.0.30001806
- electron-to-chromium: 1.5.399
- 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: {}
@@ -12402,7 +12404,7 @@ snapshots:
callsites@3.1.0: {}
- caniuse-lite@1.0.30001806: {}
+ caniuse-lite@1.0.30001809: {}
caseless@0.12.0: {}
@@ -12439,7 +12441,7 @@ snapshots:
chokidar@5.0.0:
dependencies:
- readdirp: 5.0.0
+ readdirp: 5.1.1
chrome-trace-event@1.0.4: {}
@@ -12576,7 +12578,7 @@ snapshots:
conventional-commits-filter@6.0.1: {}
- conventional-commits-parser@7.1.1:
+ conventional-commits-parser@7.1.2:
dependencies:
'@simple-libs/stream-utils': 2.0.0
argue-cli: 3.1.0
@@ -12595,18 +12597,18 @@ snapshots:
dependencies:
is-what: 4.1.16
- copy-webpack-plugin@14.0.0(webpack@5.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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.109.2(esbuild@0.28.1)(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)
- 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: {}
@@ -12632,7 +12634,7 @@ snapshots:
shebang-command: 2.0.0
which: 2.0.2
- css-loader@7.1.4(webpack@5.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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.25)
postcss: 8.5.25
@@ -12643,7 +12645,7 @@ snapshots:
postcss-value-parser: 4.2.0
semver: 7.8.5
optionalDependencies:
- webpack: 5.109.2(esbuild@0.28.1)(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)
css-select@6.0.0:
dependencies:
@@ -12858,7 +12860,7 @@ snapshots:
ejs@6.0.1: {}
- electron-to-chromium@1.5.399: {}
+ electron-to-chromium@1.5.403: {}
emoji-regex@10.6.0: {}
@@ -12887,7 +12889,7 @@ snapshots:
'@socket.io/component-emitter': 3.1.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
@@ -12907,7 +12909,7 @@ snapshots:
cors: 2.8.6
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
@@ -13040,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: {}
@@ -13243,11 +13245,11 @@ snapshots:
express-rate-limit@5.5.1: {}
- express-rate-limit@8.6.1(express@5.2.1(supports-color@11.0.0))(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):
dependencies:
debug: 4.4.3(supports-color@11.0.0)
express: 5.2.1(supports-color@11.0.0)
- ip-address: 10.4.0
+ ip-address: 10.5.0
transitivePeerDependencies:
- supports-color
@@ -13472,36 +13474,36 @@ 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'
@@ -13845,7 +13847,7 @@ snapshots:
dependencies:
function-bind: 1.1.2
- hono@4.12.34: {}
+ hono@4.13.1: {}
hosted-git-info@10.1.1:
dependencies:
@@ -14033,11 +14035,11 @@ snapshots:
hasown: 2.0.4
side-channel: 1.1.1
- ip-address@10.4.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:
@@ -14311,7 +14313,7 @@ snapshots:
jiti@2.7.0: {}
- jose@6.2.7: {}
+ jose@6.2.8: {}
js-tokens@10.0.0: {}
@@ -14499,12 +14501,12 @@ snapshots:
picocolors: 1.1.1
shell-quote: 1.10.0
- less-loader@13.0.0(less@4.6.7)(webpack@5.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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.109.2(esbuild@0.28.1)(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)
less@4.6.7:
dependencies:
@@ -14524,11 +14526,11 @@ snapshots:
prelude-ls: 1.2.1
type-check: 0.4.0
- license-webpack-plugin@4.0.2(webpack@5.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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.109.2(esbuild@0.28.1)(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)
lightningcss-android-arm64@1.33.0:
optional: true
@@ -14725,16 +14727,16 @@ snapshots:
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)
@@ -14781,11 +14783,11 @@ snapshots:
mimic-response@3.1.0: {}
- mini-css-extract-plugin@2.10.2(webpack@5.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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.109.2(esbuild@0.28.1)(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)
minimalistic-assert@1.0.1: {}
@@ -14811,28 +14813,28 @@ snapshots:
minimist@1.2.8: {}
- minimizer-webpack-plugin@5.6.1(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)(webpack@5.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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.109.2(esbuild@0.28.1)(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)
optionalDependencies:
- esbuild: 0.28.1
+ esbuild: 0.28.2
lightningcss: 1.33.0
postcss: 8.5.25
uglify-js: 3.19.3
- minimizer-webpack-plugin@5.6.1(esbuild@0.28.1)(webpack@5.109.2(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.109.2(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: {}
@@ -14884,7 +14886,7 @@ snapshots:
mute-stream@3.0.0: {}
- nanoid@3.3.16: {}
+ nanoid@3.3.18: {}
natural-compare@1.4.0: {}
@@ -14902,18 +14904,18 @@ snapshots:
neo-async@2.6.2: {}
- ng-packagr@22.1.1(@angular/compiler-cli@22.1.0(@angular/compiler@22.1.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(@angular/compiler@22.1.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
@@ -14930,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
@@ -14972,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: {}
@@ -15284,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: {}
@@ -15296,14 +15298,14 @@ snapshots:
possible-typed-array-names@1.1.0: {}
- postcss-loader@8.2.1(postcss@8.5.25)(typescript@6.0.3)(webpack@5.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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.25
semver: 7.8.5
optionalDependencies:
- webpack: 5.109.2(esbuild@0.28.1)(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)
transitivePeerDependencies:
- typescript
@@ -15317,13 +15319,13 @@ snapshots:
dependencies:
icss-utils: 5.1.0(postcss@8.5.25)
postcss: 8.5.25
- postcss-selector-parser: 7.1.4
+ postcss-selector-parser: 7.1.5
postcss-value-parser: 4.2.0
postcss-modules-scope@3.2.1(postcss@8.5.25):
dependencies:
postcss: 8.5.25
- postcss-selector-parser: 7.1.4
+ postcss-selector-parser: 7.1.5
postcss-modules-values@4.0.0(postcss@8.5.25):
dependencies:
@@ -15334,7 +15336,7 @@ snapshots:
dependencies:
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
@@ -15343,7 +15345,7 @@ snapshots:
postcss@8.5.25:
dependencies:
- nanoid: 3.3.16
+ nanoid: 3.3.18
picocolors: 1.1.1
source-map-js: 1.2.1
@@ -15420,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
@@ -15445,7 +15447,7 @@ snapshots:
dependencies:
tslib: 2.8.1
- pvutils@1.1.5: {}
+ pvutils@1.2.0: {}
qjobs@1.2.0: {}
@@ -15498,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:
@@ -15536,7 +15538,7 @@ snapshots:
dependencies:
picomatch: 2.3.2
- readdirp@5.0.0: {}
+ readdirp@5.1.1: {}
real-require@0.2.0: {}
@@ -15807,10 +15809,10 @@ snapshots:
dependencies:
truncate-utf8-bytes: 1.0.2
- sass-loader@17.0.0(sass@1.101.0)(webpack@5.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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.109.2(esbuild@0.28.1)(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)
sass@1.101.0:
dependencies:
@@ -15881,7 +15883,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- serialize-javascript@7.0.7: {}
+ serialize-javascript@7.1.0: {}
serve-index@1.9.2(supports-color@11.0.0):
dependencies:
@@ -16000,7 +16002,7 @@ snapshots:
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@11.0.0)
- 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
@@ -16054,11 +16056,11 @@ snapshots:
source-map-js@1.2.1: {}
- source-map-loader@5.0.0(webpack@5.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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.109.2(esbuild@0.28.1)(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)
source-map-support@0.5.21:
dependencies:
@@ -16280,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:
@@ -16410,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
@@ -16549,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
@@ -16654,7 +16656,7 @@ snapshots:
core-util-is: 1.0.2
extsprintf: 1.3.0
- vite@8.1.5(@types/node@22.20.1)(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
@@ -16663,19 +16665,19 @@ snapshots:
tinyglobby: 0.2.17
optionalDependencies:
'@types/node': 22.20.1
- esbuild: 0.28.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@22.20.1)(@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@22.20.1)(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
@@ -16692,7 +16694,7 @@ snapshots:
tinyexec: 1.3.0
tinyglobby: 0.2.17
tinyrainbow: 3.1.1
- vite: 8.1.5(@types/node@22.20.1)(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)
why-is-node-running: 2.3.0
optionalDependencies:
'@opentelemetry/api': 1.9.1
@@ -16740,32 +16742,28 @@ snapshots:
webidl-conversions@8.0.1: {}
- webpack-dev-middleware@7.4.5(tslib@2.8.1)(webpack@5.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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@11.0.0))(supports-color@11.0.0)(tslib@2.8.1)(utf-8-validate@6.0.6)(webpack@5.109.2(esbuild@0.28.1)(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@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
@@ -16784,7 +16782,7 @@ snapshots:
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@11.0.0))
- ipaddr.js: 2.4.0
+ ipaddr.js: 2.5.0
launch-editor: 2.14.1
open: 10.2.0
p-retry: 6.2.1
@@ -16793,15 +16791,14 @@ snapshots:
serve-index: 1.9.2(supports-color@11.0.0)
sockjs: 0.3.24
spdy: 4.0.2(supports-color@11.0.0)
- webpack-dev-middleware: 7.4.5(tslib@2.8.1)(webpack@5.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3))
- ws: 8.21.1(bufferutil@4.1.0)(utf-8-validate@6.0.6)
+ 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.109.2(esbuild@0.28.1)(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)
transitivePeerDependencies:
- bufferutil
- debug
- supports-color
- - tslib
- utf-8-validate
webpack-merge@6.0.1:
@@ -16812,12 +16809,12 @@ snapshots:
webpack-sources@3.5.1: {}
- webpack-subresource-integrity@5.1.0(webpack@5.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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.109.2(esbuild@0.28.1)(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)
- webpack@5.109.2(esbuild@0.28.1):
+ webpack@5.109.2(esbuild@0.28.2):
dependencies:
'@types/estree': 1.0.9
'@types/json-schema': 7.0.15
@@ -16825,7 +16822,7 @@ snapshots:
'@webassemblyjs/wasm-edit': 1.14.1
'@webassemblyjs/wasm-parser': 1.14.1
acorn: 8.18.0
- browserslist: 4.28.7
+ browserslist: 4.28.8
chrome-trace-event: 1.0.4
enhanced-resolve: 5.24.5
es-module-lexer: 2.3.1
@@ -16833,7 +16830,7 @@ snapshots:
events: 3.3.0
graceful-fs: 4.2.11
mime-db: 1.54.0
- minimizer-webpack-plugin: 5.6.1(esbuild@0.28.1)(webpack@5.109.2(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
@@ -16853,7 +16850,7 @@ snapshots:
- postcss
- uglify-js
- webpack@5.109.2(esbuild@0.28.1)(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:
'@types/estree': 1.0.9
'@types/json-schema': 7.0.15
@@ -16861,7 +16858,7 @@ snapshots:
'@webassemblyjs/wasm-edit': 1.14.1
'@webassemblyjs/wasm-parser': 1.14.1
acorn: 8.18.0
- browserslist: 4.28.7
+ browserslist: 4.28.8
chrome-trace-event: 1.0.4
enhanced-resolve: 5.24.5
es-module-lexer: 2.3.1
@@ -16869,7 +16866,7 @@ snapshots:
events: 3.3.0
graceful-fs: 4.2.11
mime-db: 1.54.0
- minimizer-webpack-plugin: 5.6.1(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(uglify-js@3.19.3)(webpack@5.109.2(esbuild@0.28.1)(lightningcss@1.33.0)(postcss@8.5.25)(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
@@ -17002,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
diff --git a/renovate.json b/renovate.json
index 2e0c41cacfbb..0b21b680f015 100644
--- a/renovate.json
+++ b/renovate.json
@@ -20,6 +20,7 @@
"packages/schematics/angular/utility/latest-versions/package.json"
],
"matchPackageNames": ["*"],
+ "matchUpdateTypes": ["minor", "patch"],
"groupName": "schematics dependencies",
"lockFileMaintenance": {
"enabled": false
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/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();